如何設定 Amazon EKS 工作節點以指定的磁碟使用率百分比清理映像快取?

2 分的閱讀內容
0

我想使用 Amazon Elastic Kubernetes Service (Amazon EKS) 工作節點以指定的磁碟使用率百分比清理映像快取。

簡短說明

若要使用 Amazon EKS 工作節點清理映像快取,請使用下列 kubelet 垃圾回收引數:

  • --image-gc-high-threshold 引數定義啟動映像垃圾回收的磁碟使用率百分比。預設值為 85%。
  • --image-gc-low-threshold 引數定義 LowThresholdPercent 值。kubelet 會刪除映像,直到磁碟使用率達到此值。預設值為 50%。

注意:在下列解決方法中,當磁碟使用率達到 70% 時,kubelet 垃圾回收引數會清理工作節點中的映像快取。--image-gc-high-threshold 設定為 70%。--image-gc-low-threshold 設定為 50%。

根據您的使用情況,請按照解決方法步驟將 kubelet 垃圾回收新增至預設組態檔或現有節點中。然後,確認引數是否存在於節點端點中。

如需詳細資訊,請參閱 Kubernetes 網站上的未使用容器和映像的垃圾回收

解決方法

**注意:**下列解決方法適用於 Amazon EKS 最佳化的 Linux AMI。

將 kubelet 垃圾回收引數新增至預設 kubelet-config

使用 Amazon EKS 的自訂啟動範本功能,將 kubelet 垃圾回收引數新增至 Amazon Machine Image (AMI) 中的預設 kubelet-config 檔案。建立啟動範本時,請在 UserData 中指定引數。

  1. 下列命令會更新 AMI 中的 KUBELET\ _CONFIG 檔案。它會設定 imageGCHighThresholdPercent=70 和 imageGCLowThresholdPercent=60。如需詳細資訊,請參閱設定執行個體詳細資訊
    #!/bin/bash
    set -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
    注意: 使用 Amazon EKS 叢集名稱取代 your-cluster-name。如果不使用預設 kubelet config 檔案,則更新檔案名稱。
  2. 使用啟動範本建立工作節點群組。

將 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.jsonkubelet.yaml 檔案中。然後,儲存檔案:

    {  "kind": "KubeletConfiguration",
      "apiVersion": "kubelet.config.k8s.io/v1beta1",
      .
      .
      .
      "imageGCHighThresholdPercent": 70,         ==> Add the argument under the same alignment as the "kind"
      "imageGCLowThresholdPercent": 60,
      "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: 60
  4. 若要在工作節點中重新啟動 kubelet 服務,請執行下列命令:

    sudo service kubelet restart

確認新的 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。如果無法使用 cURL 和 Python,則在網頁瀏覽器中開啟 URL。

    此命令傳回 kubeletconfig 的輸出。此輸出包括來自 bootstrap.sh 檔案的設定。請參閱下列範例:

    {"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
      .
      .
    }
    }
AWS 官方
AWS 官方已更新 1 個月前