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

3 分钟阅读
0

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

简短描述

要使用 Amazon EKS Worker 节点清理映像缓存,请使用下面的 kubelet 垃圾回收(来自 Kubernetes 网站)参数:

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

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

要将 kubelet 垃圾回收参数添加到新的 Worker 节点中,请完成以下部分中的步骤:

  • 使用新 Worker 节点的 UserData 将 kubelet 垃圾回收参数添加到亚马逊云机器镜像(AMI)中的默认 kubelet-config 文件
  • 验证新的 kubelet 垃圾回收参数在节点 configz 端点中

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

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

解决方案

**注意:**以下解决方案适用于 Amazon EKS 优化的 Linux AMI。

使用新 Worker 节点的 UserData 将 kubelet 垃圾回收参数添加到 AMI 中的默认 kubelet-config 文件

1.    启动一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例。

使用 sed 命令在 Amazon EKS 优化的 Linux AMI 的 kubelet-config.json 文件中添加 --image-gc-low-threshold--image-gc-high-thresholdsed 命令位于步骤 3:配置实例详细信息UserData 部分。

例如:

#!/bin/bash
set -o xtrace

# Inject imageGCHighThresholdPercent value unless it has already been set.
if ! grep -q imageGCHighThresholdPercent /etc/kubernetes/kubelet/kubelet-config.json; 
then 
    sed -i '/"apiVersion*/a \ \ "imageGCHighThresholdPercent": 70,' /etc/kubernetes/kubelet/kubelet-config.json
fi

# Inject imageGCLowThresholdPercent value unless it has already been set.
if ! grep -q imageGCLowThresholdPercent /etc/kubernetes/kubelet/kubelet-config.json; 
then 
    sed -i '/"imageGCHigh*/a \ \ "imageGCLowThresholdPercent": 50,' /etc/kubernetes/kubelet/kubelet-config.json
fi

/etc/eks/bootstrap.sh your-cluster-name

**注意:**将 your-cluster-name 替换为您的 Amazon EKS 集群名称。如果您使用的是其他 kubelet 配置文件,请在 sed 命令中更新文件名。

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

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

将 kubelet 垃圾回收参数添加到现有的 Worker 节点中

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

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

2.    在您的 Worker 节点中打开 /etc/kubernetes/kubelet/kubelet-config.json 文件。

如果使用 EKSCTL 启动 Worker 节点,则打开 /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 文件中,具体取决于如何启动 Worker 节点。然后,保存文件。请参阅以下示例:

{
  "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
  .
  .
}
}

AWS 官方
AWS 官方已更新 2 个月前