スキップしてコンテンツを表示

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

所要時間2分
0

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

簡単な説明

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

  • --image-gc-high-threshold により、kubelet がイメージのガベージコレクションを実行開始するディスク使用率を定義します。
    注: この引数のデフォルト値は 85% です。
  • --image-gc-low-threshold により、kubelet イメージのガベージコレクションを実行する最小ディスク使用率を定義します。
    注: この引数のデフォルト値は 80% です。

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

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

解決策

注: 次の解決策は、Amazon EKS に最適化された Linux Amazon マシンイメージ (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 を使用するファイル名に置き換えてください。上記のコマンドでは、imageGCHighThresholdPercent70%imageGCLowThresholdPercent60% に設定します。したがって、ディスク使用量が 70% に達すると、kubelet はワーカーノードのイメージキャッシュをクリーンアップします。ディスク使用量が 60% 未満の場合、kubelet はイメージキャッシュをクリーンアップしません。
  2. 起動テンプレートを使用してワーカーノードグループを作成します

kubelet ガベージコレクションの引数を既存のワーカーノードに追加します。

前提条件: 既存のワーカーノードへの SSH 接続アクセスおよび、sudo アクセスが必要です。

kubelet ガベージコレクションの引数を既存のワーカーノードに追加するには、次の手順を実行します。

  1. SSH を使用して既存のワーカーノードに接続します

  2. ワーカーノードの /etc/kubernetes/kubelet/kubelet-config.json ファイルを開くには、次のコマンドを実行します。

    sudo vi /etc/kubernetes/kubelet/kubelet-config.json

    eksctl を使用してワーカーノードを起動した場合は、次のコマンドを実行して /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": ...
    }

    注: 上記のコマンドでは、imageGCHighThresholdPercent70%imageGCLowThresholdPercent60% に設定します。
    eksctl を使用してワーカーノードを起動した場合は、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

    注: 上記のコマンドでは、imageGCHighThresholdPercent70%imageGCLowThresholdPercent60% に設定します。

  4. ワーカーノードで kubelet サービスを再起動するには、次のコマンドを実行します。

    sudo service kubelet restart
  5. Amazon EKS クラスター内の既存のワーカーノードごとに、上記の解決手順を繰り返します。

新しい 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 を使用できない場合は、ウェブブラウザで 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
      .
      .
    }
    }

    注: 上記のコマンド出力には、kubeletconfigbootstrap.sh ファイルでの設定が表示されます。

AWS公式更新しました 8ヶ月前
コメントはありません