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 に引数を指定します。
- 以下のコマンドは 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 ファイルを使用しない場合は、ファイル名を更新してください。
- 起動テンプレートを使用してワーカーノードグループを作成します。
kubelet ガベージコレクション引数を既存のワーカーノードに追加します。
重要: 次の手順では、SSH を使用して既存のワーカーノードに接続し、sudo アクセス権を持っている必要があります。Amazon EKS クラスターの既存のすべてのワーカーノードでこれらのステップを実行する必要があります。
-
SSH を使用して既存のワーカーノードに接続します。
-
ワーカーノードで /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
-
ワーカーノードの起動方法に基づいて、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
-
ワーカーノードで kubelet サービスを再起動するには、次のコマンドを実行します。
sudo service kubelet restart
新しい kubelet ガベージコレクション引数がノード configz エンドポイントにあることを確認します
-
ワーカーノードの名前を取得するには、次のコマンドを実行します。
kubectl get nodes
-
API サーバーへの接続を開くには、以下のコマンドを実行します。
kubectl proxy
-
ノードの設定を確認するには、新しいターミナルを開きます。以下のコマンドを実行します。
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
.
.
}
}