节点压力驱逐是 kubelet 主动终止 Pod 以回收节点上资源的过程。kubelet 监控集群节点的内存、磁盘空间和文件系统的 inode 等资源。 当这些资源中的一个或者多个达到特定的消耗水平, kubelet 可以主动地使节点上的 Pod 失效,以回收资源。

kubelet 支持以下文件系统分区:

  1. nodefs:节点的主要文件系统,用于本地磁盘卷、emptyDir、日志存储等。 例如,nodefs 包含 /var/lib/kubelet/。
  2. imagefs:可选文件系统,供容器运行时存储容器镜像和容器可写层。

驱逐条件包括软驱逐和硬驱逐。其中kubelet具有以下默认的硬驱逐条件:

  • memory.available<100Mi
  • nodefs.available<10%
  • imagefs.available<15%
  • nodefs.inodesFree<5%

当达到硬驱逐条件时, kubelet 会立即杀死 pod。只有在没有更改任何参数的情况下,硬驱逐阈值才会被设置成这些默认值。 如果你更改了任何参数的值,则其他参数的取值不会继承其默认值设置,而将被设置为零。 为了提供自定义值,你应该分别设置所有阈值。

当出现imagefs.available<15%的情况时,如果存在专用的imagefs文件系统,kubelet 会执行以下操作:

  1. 对死亡的 Pod 和容器进行垃圾收集
  2. 删除未使用的镜像

如果回收节点级资源的尝试没有满足需求,kubelet 会根据所有容器的可写层使用情况,即磁盘使用量对 Pod 进行排序驱逐。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐