跳至内容

如何缓解我的 Amazon EKS Worker 节点上的磁盘压力?

1 分钟阅读
0

我想缓解我的 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 节点以按指定的磁盘使用百分比清理映像缓存?

检查和调整容器运行时日志轮换

容器化应用程序将日志写入 stdoutstderr,日志文件由容器运行时管理。最佳做法是在 Worker 节点上调整容器运行时的日志轮换设置。

要配置日志轮换,对于 containerd,请使用配置文件 /etc/cotainerd/config/toml 中的 containerd.runc.log 选项。设置 log_file_maxlog_file_max_size 选项,以控制轮换日志文件的最大数量和每个日志文件的最大大小。

清理未使用的容器映像

如果 Kubelet 无法自动执行映像垃圾回收,请手动清理 Worker 节点上未使用的容器映像。要删除悬空或未使用的映像并释放大量磁盘空间,请使用 crictl rmi --prune 命令。

管理您的临时存储

为了确保应用程序的长期稳定性和平稳运行,最佳做法是正确管理临时存储。如果您不对临时存储设置限制,则容器组可能会占用它运行的节点上的全部磁盘空间。

为了降低这种风险,请为您的容器组设置适当的临时存储请求和限制。执行以下操作来确定限制:

  • 要确定容器组存储需求,请分析应用程序的存储需求、临时数据以及存储在临时存储中的任何其他文件。然后,您可以估算每个容器组的存储需求。
  • 要设置临时存储请求和限制,请定义容器组正常运行所需的最小临时存储量。然后,Kubernetes 调度器可以为您的容器组分配具有足够存储资源的节点。
    示例:
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app:latest
        resources:
            requests:
                ephemeral-storage: "1Mi"
            limits:
                ephemeral-storage: "2Mi"
AWS 官方已更新 4 个月前