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

最終更新日: 2020 年 11 月 4 日

Amazon Elastic Kubernetes Service (Amazon EKS) ワーカーノードを使用して、特定のディスク使用率になったときイメージキャッシュをクリーンアップしたいと思っています。

簡単な説明

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

  • --image-gc-high-threshold 引数により、イメージのガベージコレクションがトリガーされるデスクの使用率を、パーセンテージで定義します。デフォルトは 85% です。
  • --image-gc-low-threshold 引数により、イメージのガベージコレクションが解放するデスクの使用率を、パーセンテージで定義します。デフォルトは 80% です。

注: 次に示す解決方法では、ディスクの使用率が 70% に達した時点で、ワーカーノードのイメージキャッシュをクリーンアップするように、kubelet ガベージコレクション引数を設定しています。--image-gc-high-threshold は 70% に設定します。--image-gc-low-threshold は 50% に設定します。

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

  • Amazon EKS に最適化された Linux Amazon Machine Image (AMI) で、デフォルトの kubelet-config ファイルに、kubelet ガベージコレクション引数を追加します。
  • 新しい kubelet ガベージコレクション引数が、ノードの configz エンドポイント内にあることを確認する

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

  • 既存のワーカーノードにkubelet ガベージコレクション引数を追加する
  • 新しい kubelet ガベージコレクション引数が、ノードの configz エンドポイント内にあることを確認する

解決方法

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

新しいワーカーノードでの UserData により、Amazon EKS に最適化された Linux AMI にあるデフォルトの kubelet-config ファイルに、kubelet ガベージコレクション引数を追加します。

1.    Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動します。

Amazon EKS に最適化された Linux AMI 内の kubelet-config.json ファイルに、sed コマンドを使用し、--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 config ファイルを使用している場合は、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 が使用できない場合は、ウェブブラウザ―で 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
  .
  .
}
}

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?