K8s:Pod驱逐
驱逐:Evicted
驱逐原因:cpu、内存、磁盘不足。
驱逐顺序:配置优先级、声明好的。
1、驱逐方式
1、由节点上的kubelet进程主动终止pod、以回收节点上的内存。
2、导致OOM的进程、强制驱逐、直接kill进程、
2、配置
位置:配置到kubelet的文件中、配置在每个node节点上的kubelet文件里面。
###找出文件: grep inodesFree / -R
就是yaml文件(查看kubelet的services文件、里面有一个yaml文件的配置)
###vim /var/lib/kubelet/config.yaml
3、驱逐优先级
###1、最不被驱逐:limits和requests一样为最不被驱逐。(声明和实际使用上限的资源是一样的、优先级最高)
Guaranteed: #limits和request的值相等,等级最高、最后被驱逐
resources:
limits:
cpu: 500m
memory: 256Mi
requests:
cpu: 500m
memory: 256Mi
###2、中间被驱逐
Burstable: #limit和request不相等,等级折中、中间被驱逐
resources:
limits:
cpu: 500m
memory: 256Mi
requests:
cpu: 256m
memory: 128Mi
###3、没有任何限制、最先被驱逐
BestEffort: #没有限制,即resources为空,等级最低、最先被驱逐
4、驱逐条件
硬驱逐
1、通过cgroup去捕捉获取内存和cpu的等值使用情况、进行下一步的匹配
2、操作符:通过操作符的等职条件对比资源量、决定是否发生驱逐。
3、使用量:基于指定的资源使用值进行判断、内存CPU及磁盘 进行驱逐
软驱逐条件:
1、软驱逐触发条件。
2、定义时间周期去驱逐pod。
3、终止pod的宽限期。
总结:硬驱逐没有宽限期、达到值就驱逐
软驱逐有宽限期。
5、kubelet配置
1、有些配置是加在yaml文件中(配置软驱逐和硬驱逐)
2、有些配置是写在services文件中
6、预留
作用:节点上预留一些空间出来、
如何预留:修改kubelet的service文件
添加下面行到kubelet的service文件
--system-reserved=cpu=200m,memory=500Mi,ephemeral-storage=1Gi
总结
什么情况下驱逐?
1、node节点上的条件满足之后、就会开始驱逐pod(内存、cpu、磁盘)
驱逐原理 ?
1、通过cgroup去捕捉获取内存和cpu的等值使用情况、进行下一步的匹配、然后开始驱逐