跳至内容

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

2 分钟阅读
0

我想使用 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

完成以下步骤:

  1. 要更新 AMI 中的 kubelet-config 文件,请运行以下命令:
    #!/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
    **注意:**请将 your-cluster-name 替换为您的 Amazon EKS 集群名称。如果您不使用默认的 kubelet 配置文件,请将 kubelet-config.json 替换为您的文件名。上述命令会将 imageGCHighThresholdPercent 设置为 70%,将 imageGCLowThresholdPercent 设置为 60%。因此,当磁盘使用率达到 70% 时,kubelet 会清理 Worker 节点中的映像缓存。如果磁盘使用率低于 60%,则 kubelet 不会清理映像缓存。
  2. 使用启动模板创建 Worker 节点组

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

**先决条件:**您必须具备对现有 Worker 节点的 SSH 连接访问权限,并拥有 sudo 访问权限。

要将 kubelet 垃圾回收参数添加到现有 Worker 节点,请完成以下步骤:

  1. 使用 SSH 连接到现有 Worker 节点

  2. 要在 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
  3. 将 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%

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

    sudo service kubelet restart
  5. 对 Amazon EKS 集群中的每个现有 Worker 节点重复之前的解析步骤。

验证新的 kubelet 垃圾回收参数是否位于节点配置端点中

完成以下步骤:

  1. 要获取 Worker 节点的名称,请运行以下命令:

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

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

    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 文件的设置。

AWS 官方已更新 9 个月前