pod驱逐疑问处置 K8S缺点处置指南
在K8S集群缺点处置环节中,你或许遇到过pod的各种形态,Evicted形态代表你的K8S环境遇到了资源驱逐的疑问,本节经过对驱逐疑问的处置,参数的调整,疑问的处置思绪,宿愿给你处置此类疑问提供协助。
pod发生形态为Evicted时,示意发生了驱逐。pod驱逐发生的要素普通为资源无余,内存或磁盘空间无余,kubect describe node 依据集群事情或许系统日志来判别处于哪种驱逐场景。
操作系统日志,kubelet厂商驱逐pod来回收内存
依据pod日志检查也可以。
当发生磁盘驱逐的时刻,K8S的机制会在磁盘资源无余时删除未经常使用的容器镜像来监禁空间。
总体战略:依据剖析的要素对应处置即可,找到驱逐pod所在的node节点,剖析内存,cpu或许磁盘空间,区分采取不同措施。
首先是监禁资源,让pod不再发生驱逐事情,保障业务经常使用不受影响。
内存场景说明
echo 1 > /proc/sys/vm/drop_caches或许 sysctl -w vm.drop_caches=1echo 2 > /proc/sys/vm/drop_caches或许 sysctl -w vm.drop_caches=2echo 3 > /proc/sys/vm/drop_caches或许sysctl -w vm.drop_caches=3
3.假设是反常业务占用,则后续及时扩容内存即可。
4.假设是其余场景,审核操作系统能否为XC系统,须要找厂商启动剖析。
清算驱逐的pod,防止重复重启积攒过多。
kubectl get pod -o wide | grep'Evicted' | awk '{print $2}' | xargs kubectl delete pod
在K8S集群中,为了及时监控到驱逐疑问,咱们可以经过参与Prometheus监控来提早检测。
# 监控内存驱逐kube_node_status_condition{cnotallow="MemoryPressure",status="true"} ==1#监控磁盘驱逐kube_node_status_condition{cnotallow="DiskPressure",status="true"} == 1
处置了疑问,咱们来钻研下驱逐的战略是怎么的。
节点压力驱逐是 kubelet 被动中断 Pod 以回收节点上资源的环节。
kubelet 监控集群节点的内存、磁盘空间和文件系统的 inode 等资源。当这些资源中的一个或许多个到达特定的消耗水平, kubelet 可以被动地使节点上一个或许多个 Pod 失效,以回收资源。
memory.available<100Minodefs.available<10%imagefs.available<15%nodefs.inodesFree<5%(Linux 节点)
例如,假设一个节点的总内存为 10GiB,并且你宿愿在可用内存低于 1GiB 时触发驱逐 则可以将驱逐条件定义为memory.available<10%或memory.available< 1G(你不能同时经常使用二者)。
有些状况下,当你的内存或许磁盘足够多时,驳回百分比或许会造成在资源短缺的状况下,发生驱逐疑问,因此咱们可以将自动驱逐修正为当残余资源低于某个阈值时发生驱逐疑问。
cat /data/kube/kubelet/kubelet-config.yaml| grep -A 4 evictionHardevictionHard:imagefs.available: "1Gi"memory.available: "200Mi"nodefs.available: "1Gi"nodefs.inodesFree: "5%"
sudo systemctl daemon-reload && sudo systemctl restart kubelet
重启实现后审核pod能否反常,业务闲时操作。