容器异常退出

# The node was low on resource: ephemeral-storage. Container kube-proxy was using 12Ki, which exceeds

启动kubernetes时候,发现kube-proxy无法启动,状态是Evicted。查看详情是:

The node was low on resource: ephemeral-storage. Container kube-proxy was using 12Ki, which exceeds its request of 0。

用df -h查看磁盘的使用空间,发现根目录占用85%,删除了一些后,发现可以正常启动了。

原因可能是根目录的磁盘空间不足,删除部分空间即可。

原因分析

磁盘使用空间高于85%后,集群会在该节点打上污点node.kubernetes.io/disk-pressure:NoSchedule,并触发k8s节点驱逐pod策略,pod被驱逐后,当前节点pod处于停止状态,同时image处于未使用状态,因此删除image,导致image被删除。参考如下

  • 驱逐Node级别资源
    • 配置了 imagefs 阈值时
      • 达到 nodefs 阈值:删除已停止的 Pod
      • 达到 imagefs 阈值:删除未使用的镜像
    • 未配置 imagefs 阈值时
      • 达到 nodefs阈值时,按照删除已停止的 Pod 和删除未使用镜像的顺序清理资源
  • 驱逐用户 Pod
    • 驱逐顺序为:BestEffort、Burstable、Guaranteed
    • 配置了 imagefs 阈值时
      • 达到 nodefs 阈值,基于 nodefs 用量驱逐(local volume + logs)
      • 达到 imagefs 阈值,基于 imagefs 用量驱逐(容器可写层)
    • 未配置 imagefs 阈值时
      • 达到 nodefs阈值时,按照总磁盘使用驱逐(local volume + logs + 容器可写层)

  • image-gc-high-threshold:磁盘使用率上限,有效范围[0-100],默认85
  • image-gc-low-threshold:磁盘使用率下限,有效范围[0-100],默认80
  • minimum-image-ttl-duration:镜像最短应该生存的年龄,默认为2分钟