Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
如何配置 Amazon EKS Worker 节点,使之按指定的磁盘使用百分比来清理映像缓存?
我想使用 Amazon Elastic Kubernetes Service(Amazon EKS)Worker 节点,按指定的磁盘使用百分比来清理映像缓存。
简短描述
要使用 Amazon EKS Worker 节点清理映像缓存,请使用以下 kubelet 垃圾回收参数:
- --image-gc-high-threshold 用于定义 kubelet 开始执行映像垃圾回收时的磁盘使用率百分比。
**注意:**此参数的默认值为 85%。 - --image-gc-low-threshold 用于定义 kubelet 执行映像垃圾回收的最低磁盘使用率百分比。
**注意:**此参数的默认值为 80%。
根据您的使用案例,将 kubelet 垃圾回收添加到默认配置文件或现有节点中。然后,验证参数是否存在于节点端点中。
有关更多信息,请参阅 Kubernetes 网站上的 Garbage collection of unused containers and images。
解决方法
**注意:**以下解决方法适用于针对 Amazon EKS 优化的 Linux 亚马逊机器映像 (AMI)。
将 kubelet 垃圾回收参数添加到默认 kubelet-config
完成以下步骤:
- 要更新 AMI 中的 kubelet-config 文件,请运行以下命令:
**注意:**请将 your-cluster-name 替换为您的 Amazon EKS 集群名称。如果您不使用默认的 kubelet 配置文件,请将 kubelet-config.json 替换为您的文件名。上述命令会将 imageGCHighThresholdPercent 设置为 70%,将 imageGCLowThresholdPercent 设置为 60%。因此,当磁盘使用率达到 70% 时,kubelet 会清理 Worker 节点中的映像缓存。如果磁盘使用率低于 60%,则 kubelet 不会清理映像缓存。#!/bin/bashset -o xtrace KUBELET_CONFIG=/etc/kubernetes/kubelet/kubelet-config.json # Inject imageGCHighThresholdPercent value unless it has already been set. if ! grep -q imageGCHighThresholdPercent $KUBELET_CONFIG; then echo "$(jq ".imageGCHighThresholdPercent=70" $KUBELET_CONFIG)" > $KUBELET_CONFIG fi # Inject imageGCLowThresholdPercent value unless it has already been set. if ! grep -q imageGCLowThresholdPercent $KUBELET_CONFIG; then echo "$(jq ".imageGCLowThresholdPercent=60" $KUBELET_CONFIG)" > $KUBELET_CONFIG fi /etc/eks/bootstrap.sh your-cluster-name - 使用启动模板创建 Worker 节点组。
将 kubelet 垃圾回收参数添加到现有 Worker 节点
**先决条件:**您必须具备对现有 Worker 节点的 SSH 连接访问权限,并拥有 sudo 访问权限。
要将 kubelet 垃圾回收参数添加到现有 Worker 节点,请完成以下步骤:
-
要在 Worker 节点中打开 /etc/kubernetes/kubelet/kubelet-config.json 文件,请运行以下命令:
sudo vi /etc/kubernetes/kubelet/kubelet-config.json如果您使用 eksctl 启动了 Worker 节点,请运行以下命令以打开 /etc/eksctl/kubelet.yaml:
sudo vi /etc/eksctl/kubelet.yaml -
将 kubelet 垃圾回收参数添加到 kubelet-config.json 文件中,然后保存该文件。文件示例:
{ "kind": "KubeletConfiguration", "apiVersion": "kubelet.config.k8s.io/v1beta1", . . . "imageGCHighThresholdPercent": 70, ==> Add the argument under the same alignment as the "kind" "imageGCLowThresholdPercent": 60, "maxPods": ... }**注意:**上述命令会将 imageGCHighThresholdPercent 设置为 70%,将 imageGCLowThresholdPercent 设置为 60%。
如果您使用 eksctl 启动了 Worker 节点,请将 kubelet 垃圾回收参数添加到 kubelet.yaml 文件中,然后保存该文件。文件示例: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: 60**注意:**上述命令会将 imageGCHighThresholdPercent 设置为 70%,将 imageGCLowThresholdPercent 设置为 60%。
-
要在 Worker 节点中重新启动 kubelet 服务,请运行以下命令:
sudo service kubelet restart -
对 Amazon EKS 集群中的每个现有 Worker 节点重复之前的解析步骤。
验证新的 kubelet 垃圾回收参数是否位于节点配置端点中
完成以下步骤:
-
要获取 Worker 节点的名称,请运行以下命令:
kubectl get nodes -
要打开与 API 服务器的连接,请运行以下命令:
kubectl proxy -
要检查节点配置,请打开一个新终端,然后运行以下命令:
curl -sSL "http://localhost:8001/api/v1/nodes/node_name/proxy/configz" | python3 -m json.tool**注意:**请将 node_name 替换为您的节点名称。如果您无法使用 curl 或 Python,请在 Web 浏览器中打开 http://localhost:8001/api/v1/nodes/node_name/proxy/configz URL。
输出示例:{"kubeletconfig": { . . "imageGCHighThresholdPercent": 70, <=== The new value is set to 70 as given in UserData "imageGCLowThresholdPercent": 60, <=== The new value is set to 50 as given in UserData . . } }**注意:**上述命令输出将显示您在 kubeletconfig 中对 bootstrap.sh 文件的设置。
- 语言
- 中文 (简体)
