1.当node节点出现故障的时候pod怎么办?

kubernetes提供了pod eviction,在某些情况下node出现NotReady,资源不足的时候,需要将node上面的pod驱逐至其他节点,用于保障业务的正常运行,但是驱逐的行为并不是“立即”执行,给了一段的缓冲时间,超过这个时间才会将pod驱逐。

2.驱逐pod是谁来执行,怎么执行?

2.1 谁来执行

Kube-controller-manager会周期性的检查所有node的状态,当node处于NotReady状态一定时间后将node上面的pod进行驱逐

2.2 如何执行

kubernetes 1.13版本之前 pod-eviction-timeout NotReady 状态node超过该时间后,执行驱逐,默认 5 min
kubernetes 1.13版本之后 集群开启 TaintBasedEvictionsTaintNodesByCondition 功能,即taint-based-evictions,即节点若失联或者出现各种异常情况,k8s会自动为node打上污点,同时为pod默认添加如下容忍设置:

tolerations:
 1. effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
 2. effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300

即各pod可以独立设置驱逐容忍时间。

3.当node资源不足时,并不是一股脑驱逐所有pod,按照一定的优先级进行驱逐

1.memory.available:节点可用内存
2. nodefs.available:节点根盘可用存储空间
3. nodefs.inodesFree:节点inodes可用数量
4. imagefs.available:镜像存储盘的可用空间
5. imagefs.inodesFree:镜像存储盘的inodes可用数量

Logo

开源、云原生的融合云平台

更多推荐