AWS Secrets Manager を Amazon EKS と統合する際に発生する問題をトラブルシューティングする方法を教えてください。

所要時間2分
0

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

**注:**同じアクションを実行するポッドは、重複したエントリとして表示されます。

volumeMountSecretProviderClass がポッドと同じ名前空間に存在しない場合、次のエラーが表示されます。

「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'
AWS公式
AWS公式更新しました 4ヶ月前
コメントはありません

関連するコンテンツ