上次更新时间:2020 年 11 月 4 日
我想要使用 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 垃圾收集参数添加到新的工作线程节点中,请完成以下部分中的步骤:
将 kubelet 垃圾回收参数添加到 Amazon EKS 优化的 Linux Amazon 系统映像 (AMI) 中的默认 kubelet-config 文件 验证新的 kubelet 垃圾收集参数在节点 configz 终端节点中要将 kubelet 垃圾收集参数添加到现有的工作线程节点中,请完成以下部分中的步骤:
将 kubelet 垃圾收集参数添加到现有的工作线程节点中 验证新的 kubelet 垃圾收集参数在节点 configz 终端节点中 解决方案注意:以下解决方案适用于 Amazon EKS 优化的 Linux AMI。
使用新工作节点的 UserData 将 kubelet 垃圾回收参数添加到 Amazon EKS 优化的 Linux 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-threshold。sed 命令位于第 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 垃圾收集参数添加到现有的工作线程节点中重要提示:以下步骤需要您使用 SSH 连接到现有工作线程节点并具有 sudo 访问权。您必须在您的 Amazon EKS 集群中的所有现有工作线程节点上完成这些步骤。
1.使用 SSH 连接到现有的工作线程节点。
2.在您的工作线程节点中打开 /etc/kubernetes/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
.
.
}
}