指定したディスク使用率でイメージキャッシュをクリーンアップするように Amazon EKS ワーカーノードを設定する方法を教えてください。

所要時間2分
0

Amazon Elastic Kubernetes Service (Amazon EKS) ワーカーノードを使用して、指定したディスク使用率でイメージキャッシュをクリーンアップしたいと考えています。

簡単な説明

Amazon EKS ワーカーノードを使用してイメージキャッシュをクリーンアップするには、次の kubelet ガベージコレクション引数を使用します。

  • --image-gc-high-threshold 引数は、イメージガベージコレクションを開始するディスク使用量の割合を定義します。デフォルトは 85% です。
  • --image-gc-low-threshold 引数は、低閾値パーセント値を定義します。kubelet はディスク使用量がこの値に達するまでイメージを削除します。デフォルトは 50% です。

注: 次の解像度では、ディスク使用量が 70% に達すると、kubelet ガベージコレクション引数がワーカーノードのイメージキャッシュをクリーンアップします。--image-gc-high-threshold は 70% に設定されています。--image-gc-low-threshold は 50% に設定されています。

ユースケースに応じて、解決手順に従って kubelet ガベージコレクションをデフォルトの設定ファイルまたは既存のボードに追加します。次に、引数がノードエンドポイントに存在することを確認します。

詳細については、Kubernetes Web サイトの「未使用のコンテナとイメージのガベージコレクション」を参照してください。

解決策

注: 以下の解決策は Amazon EKS に最適化された Linux AMI に適用されます。

kubelet ガベージコレクションの引数をデフォルトの kubelet-config に追加します。

Amazon EKS のカスタム起動テンプレート機能を使用して、Amazon マシンイメージ (AMI) のデフォルトの kubelet-config ファイルに kubelet ガベージコレクション引数を追加します。起動テンプレートを作成するときに、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 クラスター名に置き換えてください。デフォルトの 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-config.json ファイルまたは kubelet.yaml ファイルに kubelet ガベージコレクション引数を追加します。次に、ファイルを保存します。

    {  "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. ノードの設定を確認するには、新しいターミナルを開きます。以下のコマンドを実行します。

    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公式更新しました 7ヶ月前
コメントはありません

関連するコンテンツ