如何配置 Amazon EKS 工作线程节点,以按指定的磁盘使用百分比清理映像缓存?

上次更新时间:2020 年 6 月 10 日

我想要使用 Amazon Elastic Kubernetes Service (Amazon EKS) 工作线程节点按指定磁盘使用百分比清理映像缓存。

简短描述

要使用 Amazon EKS 工作线程节点清理映像缓存,请使用下面的 kubelet 垃圾收集参数:

  • --image-gc-high-threshold 参数用于定义触发映像垃圾收集的磁盘使用百分比。默认值为 85%。
  • --image-gc-low-threshold 参数用于定义映像垃圾收集尝试释放的磁盘使用百分比。默认值为 80%。

注意:在下面的解决方案中,kubelet 垃圾收集参数用于在磁盘使用率达到 70% 时清理工作线程节点中的映像缓存。--image-gc-high-threshold 设置为 70%。--image-gc-low-threshold 设置为 50%。

要将 kubelet 垃圾收集参数添加到新的 Amazon EKS 工作线程节点中,请完成以下部分中的步骤:

  1. 使用 kubelet 垃圾收集参数创建工作线程节点
  2. 验证新的 kubelet 垃圾收集参数在节点 configz 终端节点中

要将 kubelet 垃圾收集参数添加到现有的 Amazon EKS 工作线程节点中,请完成以下部分中的步骤:

  1. 将 kubelet 垃圾收集参数添加到现有的工作线程节点中
  2. 验证新的 kubelet 垃圾收集参数在节点 configz 终端节点中

解决方法

注意:以下分辨率适用于 Amazon EKS 优化的 Linux Amazon 系统映像 (AMI)。

使用 kubelet 垃圾收集参数创建工作线程节点

1.    启动一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例。请确保将 kubelet 参数 --image-gc-low-threshold--image-gc-high-threshold 包含在步骤 3:配置实例详细信息页面的 UserData 部分中。

例如:

#!/bin/bash
set -o xtrace
/etc/eks/bootstrap.sh your-cluster-name --kubelet-extra-args '--image-gc-low-threshold=50 --image-gc-high-threshold=70'

注意:your-cluster-name 替换为您的 Amazon EKS 集群名称。

2.    将工作线程节点添加到您的 Amazon EKS 集群中

3.    要验证参数更改,请遵照验证新的 kubelet 垃圾收集参数在节点 configz 终端节点中部分中的步骤。

将 kubelet 垃圾收集参数添加到现有的工作线程节点中

重要提示:以下步骤需要您使用 SSH 连接到现有工作线程节点并具有 sudo 访问权。必须在您的 Amazon EKS 集群中的所有现有工作线程节点上完成以下步骤。

1.    使用 SSH 连接到现有的工作线程节点

2.    在您的工作线程节点中打开 /etc/kuberentes/kubelet/kubelet-config.json 文件。

如果使用 EKSCTL 启动工作线程节点,则打开 /etc/eksctl/kubelet.yaml

例如:

sudo vi /etc/kubernetes/kubelet/kubelet-config.json

#WORKER NODES LAUNCHED USING EKSCTL

sudo vi /etc/eksctl/kubelet.yaml

3.    将 kubelet 垃圾收集参数添加到 kubelet-config.json 文件或 kubelet.yaml 文件中,具体取决于如何启动工作线程节点。然后,保存文件。

例如:

{
  "kind": "KubeletConfiguration",
  "apiVersion": "kubelet.config.k8s.io/v1beta1",
  .
  .
  .
  "imageGCHighThresholdPercent": 70,         ==> Add the argument under the same alignment as the "kind"
  "imageGCLowThresholdPercent": 50,
  "maxPods": ...
}


#WORKER NODES LAUNCHED USING EKSCTL

kind: KubeletConfiguration
kubeReserved:
  cpu: 70m
  ephemeral-storage: 1Gi
  memory: 1843Mi
serverTLSBootstrap: true
imageGCHighThresholdPercent: 70        ==> Add the arguments under the alignment "Kind" in the yaml file
imageGCLowThresholdPercent: 50

4.    要在工作线程节点中重新启动 kubelet 服务,请运行以下命令:

sudo service kubelet restart

5.    要验证参数更改,请遵照验证新的 kubelet 垃圾收集参数在节点 configz 终端节点中部分中的步骤。

验证新的 kubelet 垃圾收集参数在节点 configz 终端节点中

1.    要获取工作线程节点的名称,请运行以下命令:

kubectl get nodes

2.    要打开至 API 服务器的连接,请运行以下命令:

kubectl proxy

3.    要检查节点 configz,请打开一个新终端,然后运行以下命令:

curl -sSL "http://localhost:8001/api/v1/nodes/node_name/proxy/configz" | python3 -m json.tool

注意:node_name 替换为在步骤 1 中检索的节点列表中的节点名称。如果 curl 和 python 不可用,则您可以在 Web 浏览器中打开 URL。

上述命令将返回 kubeletconfig 中的输出,其中包括 bootstrap.sh 文件中的设置。

例如:

{
"kubeletconfig": {
  .
  .
  "imageGCHighThresholdPercent": 70,          <=== The new value is set to 70 as given in UserData
  "imageGCLowThresholdPercent": 50,           <=== The new value is set to 50 as given in UserData
  .
  .
}
}

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?