AWS Secrets Manager を Amazon EKS と統合する際に発生する問題をトラブルシューティングする方法を教えてください。
AWS Secrets Manager を Amazon Elastic Kubernetes Service (Amazon EKS) と統合しようとすると、エラーが発生します。
簡単な説明
ポッドが Running 状態にならない場合、Secrets Manager を Amazon EKS と統合するときにエラーが発生します。この問題を解決するには、Secrets Store コンテナストレージインターフェイス (CSI) ドライバーポッドのログをチェックして、実行されていないポッドを判別します。
解決策
Secrets Store CSI ドライバーポッドを表示するには、以下のコマンドを実行します。
kubectl --namespace=kube-system get pods -l "app=secrets-store-csi-driver"
Secrets Store CSI ポッドからのログを表示するには、以下のコマンドを実行します。
kubectl --namespace=kube-system logs -f -l "app=secrets-store-csi-driver"
以下のログは、各ポッドが正常に動作していることを示しています。
I1120 20:21:19.135834 1 secrets-store.go:74] Driver: secrets-store.csi.k8s.io I1120 20:21:19.135857 1 secrets-store.go:75] Version: v0.2.0, BuildTime: 2021-08-12-18:55 I1120 20:21:19.135868 1 secrets-store.go:76] Provider Volume Path: /etc/kubernetes/secrets-store-csi-providers I1120 20:21:19.135874 1 secrets-store.go:77] GRPC supported providers will be dynamically created I1120 20:21:19.135895 1 driver.go:80] "Enabling controller service capability" capability="CREATE_DELETE_VOLUME" I1120 20:21:19.135912 1 driver.go:90] "Enabling volume access mode" mode="SINGLE_NODE_READER_ONLY" I1120 20:21:19.135922 1 driver.go:90] "Enabling volume access mode" mode="MULTI_NODE_READER_ONLY" I1120 20:21:19.135938 1 main.go:172] starting manager I1120 20:21:19.136210 1 server.go:111] Listening for connections on address: //csi/csi.sock I1120 20:21:18.956092 1 exporter.go:33] metrics backend: prometheus
**注:**同じアクションを実行するポッドは、重複したエントリとして表示されます。
volumeMount の SecretProviderClass がポッドと同じ名前空間に存在しない場合、次のエラーが表示されます。
「Warning FailedMount 3s (x4 over 6s) kubelet, kind-control-plane MountVolume.SetUp failed for volume "secrets-store-inline" : rpc error: code = Unknown desc = failed to get secretproviderclass default/aws, error: secretproviderclasses.secrets-store.csi.x-k8s.io "aws" not found」
SecretProviderClass はポッドと同じ名前空間に存在する必要があります。
Secrets Store CSI ドライバーはデーモンセットとしてデプロイされます。CSI Driver Pod がノードで実行されていない場合は、次のエラーが表示されます。
「Warning FailedMount 1s (x4 over 4s) kubelet, kind-control-plane MountVolume.SetUp failed for volume "secrets-store-inline" : kubernetes.io/csi: mounter.SetUpAt failed to get CSI client: driver name secrets-store.csi.k8s.io not found in the list of registered CSI drivers」
ノードが汚染されている場合は、Secrets Store CSI ドライバーデーモンセットに汚染に対する許容値を追加します。
Secrets Store CSI ドライバーポッドをノード上で実行できないノードセレクターがないかどうかを確認します。
kubectl --namespace=kube-system describe pods -l "app=secrets-store-csi-driver" | grep Node-Selectors*
ポッド内のワーカーノードに関連付けられているラベルを取得します。
kubectl get node --selector=kubernetes.io/os=linux
前述のコマンドの出力を比較します。ラベルがノードセレクターの値と一致することを確認します。
CSI ドライバーがクラスターにデプロイされ、すべての Pod が Running 状態になっているかどうかを確認します。
kubectl get pods -l app=secrets-store-csi-driver -n kube-system
または、
kubectl get daemonset csi-secrets-store-secrets-store-csi-driver -n kube-system
出力例:
kubectl get csidriver NAME ATTACHREQUIRED PODINFOONMOUNT MODES AGE secrets-store.csi.k8s.io false true Ephemeral 110m
上記の出力は、ドライバーがクラスターにデプロイされたことを示しています。secrets-store.csi.k8s.io が見つからない場合は、ドライバーを再インストールしてください。
secrets-store-csi-driver-provider-aws ポッドは、デーモンセットとしてデプロイされます。アプリケーションポッドを起動しようとしているワーカーノードでポッドが実行されていない場合、次のエラーが発生します。
「ボリューム "volumename" で MountVolume.Setup が失敗しました: rpc エラー: code = Unknown desc = failed to mount secrets store objects for pod namespace/pod, err: プロバイダー "aws" への接続でエラーが発生しました: プロバイダーが見つかりません: プロバイダー "aws"」
クラスターで実行されている secrets-store-csi-driver-provider-aws ポッドの数および、ノードの数を確認するには、次の 2 つのコマンドを実行します。
kubectl get ds csi-secrets-store-provider-aws -n kube-system
kubectl get nodes
デーモンセットの desiredNumberScheduled パラメータがクラスター内のノードの数より少ない場合は、デーモンセットの Tolerations パラメータを確認してください。
kubectl get ds csi-secrets-store-provider-aws -n kube-system -o yaml
コマンドの出力の tolerations: で、operator: Exists を探します。operator: Exists が見つからない場合は、それが原因で、secrets-store-csi-driver-provider-aws デーモンセットポッドがノードで実行されなかった可能性があります。secrets-store-csi-driver-provider-aws デーモンセットは、デフォルトではテイントを許容しないことが原因です。この問題を解決するには、容認を追加してください。詳細については、Kubernetes のウェブサイトで「テイントと容認」を参照してください。
SecretProviderClass が取り込んだファイルが 4 メガバイト (MiB) より大きい場合、FailedMount という警告が表示されることがあります。エラーメッセージには、grpc: received message larger than max という文言が含まれています。4 MiB よりも大きい応答を受け付けるには、csi-secrets-store デーモンセットのシークレットストアコンテナに対し、--max-call-recv-msg-size=size in bytes を指定します。
**注:**size in bytes を、ドライバーが受け付けたいサイズに置き換えます。応答が大きくなると、secrets-store コンテナのメモリリソース消費量が増える可能性があるため、メモリ制限を増やす必要がある場合があります。問題が解決しない場合は、ログイベントを時系列で確認して、他に発生した障害があるかどうかを確認します。
kubectl get events -n kube-system --sort-by='.metadata.creationTimestamp'
関連するコンテンツ
- 質問済み 3ヶ月前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 6ヶ月前
- AWS公式更新しました 1年前