我想缓解我的 Amazon Elastic Kubernetes Service (Amazon EKS) Worker 节点上的过大磁盘压力。
简短描述
当可用磁盘空间降至较低水平时,Kubernetes Worker 节点就会出现磁盘压力。要缓解磁盘压力,请增加 EBS 卷大小,或向节点组添加新的 Worker 节点以提供更多磁盘容量。您还可以调整 Kubelet 映像垃圾回收阈值、配置容器运行时日志轮换,以及手动清理未使用的映像以有效管理磁盘使用情况。
监控和管理临时存储以防止磁盘压力问题并确保您的 Kubernetes 集群正常运行非常重要。
如果磁盘压力过大,则可能会收到一条错误消息。
对于节点,您可能会收到如下错误消息:
"Warning DiskPressure ... kubelet, worker-node DiskPressure on node"
对于 Kubelet,您可能会收到如下错误消息:
"Disk usage on image filesystem is over the high threshold, trying to free bytes down to the low threshold"
要确认问题,请运行 df -h 命令来检查 Worker 节点上的磁盘使用情况。
输出示例:
/dev/nvme0n1p1 20G 18G 2.2G 90% /
........
**注意:**在前面的示例中,根文件系统 /dev/nvme0n1p1 的使用率为 90%。高使用率会导致磁盘压力和映像垃圾回收失败问题。
解决方法
增加 EBS 卷大小
要增加可用磁盘空间,请增加连接到 Worker 节点的 EBS 卷的大小。有关详细信息,请参阅如何增加或减少我的 EBS 卷的容量?
**注意:**最佳做法是使用所需的磁盘大小配置新实例,而不是调整临时卷的大小。使用新实例替换旧实例。然后,新实例具有正确的磁盘大小并符合不可变的基础架构思维方式。
向节点组中添加新的 Worker 节点
向节点组或池中添加新节点,以便向集群中添加更多磁盘容量,从而将工作负载分配到多个节点。这样可以减轻任何单个节点的磁盘压力。
为 Kubelet 垃圾回收器设置自定义阈值
配置 Kubelet 以在不同的磁盘使用量阈值下启动映像垃圾回收。为此,请设置 --image-gc-high-threshold 和 --image-gc-low-threshold 参数以允许更多的缓冲区。例如,将高阈值设置为 70%,将低阈值设置为 60%,以保持更大的可用磁盘空间缓冲区。此配置允许 Kubelet 在磁盘严重占用之前执行映像垃圾回收。
有关如何在 Worker 节点上配置这些参数的详细信息,请参阅如何配置 Amazon EKS Worker 节点以按指定的磁盘使用百分比清理映像缓存?
检查和调整容器运行时日志轮换
容器化应用程序将日志写入 stdout 和 stderr,日志文件由容器运行时管理。最佳做法是在 Worker 节点上调整容器运行时的日志轮换设置。
要配置日志轮换,对于 containerd,请使用配置文件 /etc/cotainerd/config/toml 中的 containerd.runc.log 选项。设置 log_file_max 和 log_file_max_size 选项,以控制轮换日志文件的最大数量和每个日志文件的最大大小。
清理未使用的容器映像
如果 Kubelet 无法自动执行映像垃圾回收,请手动清理 Worker 节点上未使用的容器映像。要删除悬空或未使用的映像并释放大量磁盘空间,请使用 crictl rmi --prune 命令。
管理您的临时存储
为了确保应用程序的长期稳定性和平稳运行,最佳做法是正确管理临时存储。如果您不对临时存储设置限制,则容器组可能会占用它运行的节点上的全部磁盘空间。
为了降低这种风险,请为您的容器组设置适当的临时存储请求和限制。执行以下操作来确定限制: