Amazon EKS ワーカーノードを設定して、特定のディスク使用率のときにイメージキャッシュをクリーンアップする方法を教えてください。
Amazon Elastic Kubernetes Service (Amazon EKS) ワーカーノードを使用して、特定のディスク使用率になったときイメージキャッシュをクリーンアップしたいと思っています。
簡単な説明
Amazon EKS ワーカーノードのイメージキャッシュをクリーンアップするには、次の kubelet ガベージコレクション (Kubernetes ウェブサイトから) 引数を使用します。
- --image-gc-high-threshold 引数により、イメージのガベージコレクションがトリガーされるデスクの使用率を、パーセンテージで定義します。デフォルトは 85% です。
- --image-gc-low-threshold 引数により、イメージのガベージコレクションが解放するデスクの使用率を、パーセンテージで定義します。デフォルトは 80% です。
注: 次に示す解決方法では、ディスクの使用率が 70% に達した時点で、ワーカーノードのイメージキャッシュをクリーンアップするように、kubelet ガベージコレクション引数を設定しています。--image-gc-high-threshold は 70% に設定します。--image-gc-low-threshold は 50% に設定します。
新しいワーカーノードに kubelet ガベージコレクション引数を追加するには、次のセクションの手順を実行します。
- 新しいワーカーノードの UserData を使用して、Amazon マシンイメージ (AMI) のデフォルトの kubelet-config ファイルに kubelet ガベージコレクション引数を追加します。
- 新しい kubelet ガベージコレクション引数が、ノードの configz エンドポイント内にあることを確認する
既存のワーカーノードに kubelet ガベージコレクション引数を追加するには、次のセクションの手順を実行します。
- 既存のワーカーノードにkubelet ガベージコレクション引数を追加する
- 新しい kubelet ガベージコレクション引数が、ノードの configz エンドポイント内にあることを確認する
解決方法
注: 以下の解決策は、Amazon EKS に最適化された Linux AMI に適用されます。
新しいワーカーノードの UserData を使用して、kubelet ガベージコレクション引数を AMI のデフォルトの kubelet-config ファイルに追加します。
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 . . } }

関連するコンテンツ
- 質問済み 5年前lg...
- 質問済み 6年前lg...
- AWS公式更新しました 4ヶ月前
- AWS公式更新しました 4ヶ月前
- AWS公式更新しました 2年前