Amazon EKS の Amazon EFS ボリュームマウントに関する問題をトラブルシューティングする方法を教えてください。

所要時間2分
0

Amazon Elastic Kubernetes Service (Amazon EKS) クラスターに Amazon エラスティックファイルシステム (Amazon EFS) ボリュームをマウントする際のエラーをトラブルシューティングしたいです。

解決策

Amazon EKS クラスターに Amazon EFS ボリュームをマウントすると、ポッドで次のエラーのいずれかが発生する可能性があります:

  • 「出力:mount.nfs4: fs-18xxxxxx.efs.us-east-1.amazonaws.com: /path-in-dir:/failed、サーバーから返された原因: そのようなファイルまたはディレクトリはありません」
  • 「出力: 「fs-xxxxxx.efs.us-west-2.amazonaws.com」を解決できませんでした-ファイルシステム ID が正しいか確認してください」
  • 「mount.nfs4:127.0.0.1のマウント中にサーバーによってアクセスが拒否されました:/」
  • 「.nfs をマウント: 接続がタイムアウトしました」
  • 「ボリュームをアタッチまたはマウントできません:条件を満たすまでタイムアウトしました」

トラブルシューティング手順を開始する前に、以下の前提条件を満たしていることを確認してください:

マウントターゲットが正しく構成されていることを確認する

EKS ノードが実行されている各アベイラビリティーゾーンに EFS マウントターゲットを作成してください。たとえば、ワーカーノードが** us-east-1a** と** us-east-1b に分散しているとします**。この場合、マウントする EFS ファイルシステムの両方のアベイラビリティーゾーンにマウントターゲットを作成します。マウントターゲットを正しく作成しないと、EFS ファイルシステムをマウントしているポッドから次のメッセージのようなエラーが返されます:

「出力: 「fs-xxxxxx.efs.us-west-2.amazonaws.com」を解決できませんでした。ファイルシステム ID が正しいことを確認してください。」

EFS ファイルシステムとワーカーノードに関連付けられているセキュリティグループが NFS トラフィックを許可していることを確認します

EFS ファイルシステムのセキュリティグループには、クラスターの VPC の CIDR からの NFS トラフィックを許可するインバウンドルールが必要です。インバウンドトラフィックにポート 2049 を許可します。

ポッドが EFS ボリュームのマウントに失敗しているワーカーノードに関連付けられているセキュリティグループには、アウトバウンドルールが必要です。具体的には、このアウトバウンドルールでは、EFS ファイルシステムへの NFS トラフィック (ポート 2049) を許可する必要があります。

セキュリティグループが NFS トラフィックを許可しない場合、ファイルシステムをマウントしているポッドは次のエラーを返します:

  • 「.nfs をマウント: 接続がタイムアウトしました」
  • 「ボリュームをアタッチまたはマウントできません:条件を満たすまでタイムアウトしました」

ポッドをサブディレクトリにマウントする場合は、EFS ファイルシステムにサブディレクトリが作成されていることを確認します

永続ボリュームにサブパスを追加しても、EFS CSI ドライバーはファイルシステムにサブディレクトリパスを作成しません。マウント操作を正常に実行するには、ディレクトリがすでに存在している必要があります。サブパスがファイルシステムに存在しない場合、ポッドは次のエラーで失敗します::

「出力:mount.nfs4: fs-18xxxxxx.efs.us-east-1.amazonaws.com: /path-in-dir:/failed、サーバーから返された原因: そのようなファイルまたはディレクトリはありません」

クラスターの VPC が Amazon DNS サーバーを使用していることを確認する

EFS CSI ドライバーを使用して EFS をマウントする場合、EFS マウントヘルパーでは VPC 用の Amazon DNS サーバーを使用する必要があります。

**注:**EFS サービスのファイルシステム DNS には AWS アーキテクチャ上の制限があります。Amazon が提供する DNS のみが、EFS サービスのファイルシステム DNS を解決できます。

DNS サーバーを確認するには、ワーカーノードにログインし、次のコマンドを実行します::

nslookup fs-4fxxxxxx.efs.region.amazonaws.com AMAZON\_PROVIDED\_DNS\_IP

注:リージョンを自分の AWS リージョンに置き換えてください。AMAZON_PROVIDED_DNS_IP をお客様の DNS IP アドレスに置き換えてください。デフォルトでは、これは VPC ネットワークの範囲 (10.0.0.0) に 2 を加えた値です。

クラスター VPC がカスタム DNS サーバーを使用している場合は、すべての**\ .amazonaws.com* リクエストを Amazon DNS サーバーに転送するようにこの DNS サーバーを設定します。これらのリクエストが転送されない場合、ポッドは次のメッセージのようなエラーで失敗します:

「出力: 「fs-4 fxxxxxx.efs.us-west-2.amazonaws.com」を解決できませんでした。ファイルシステム ID が正しいことを確認してください。」

制限のあるファイルシステムポリシーを使用する場合は、永続ボリューム定義に「iam」マウントオプションがあることを確認してください

場合によっては、マウント権限を特定の IAM ロールに制限するように EFS ファイルシステムポリシーが設定されています。この場合、EFS マウントヘルパーでは、マウント操作中に-o iam マウントオプションを渡す必要があります。Spec.MountOptions プロパティを含めると、CSI ドライバーが (GitHub ウェブサイトから) iam マウントオプションを追加できるようになります。

次の例は、パーシステントボリュームの仕様です::

apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv1
spec:
  mountOptions:
    - iam
. . . . . .

制限のあるファイルシステムポリシーで** iam** mount オプションを追加しないと、ポッドは次のメッセージのようなエラーで失敗します:

「mount.nfs4:127.0.0.1のマウント中にサーバーによってアクセスが拒否されました:/」

Amazon EFS CSI ドライバーコントローラーサービスアカウントに正しい IAM ロールの注釈が付いており、IAM ロールに必要なアクセス権限があることを確認します

efs-csi-controller ポッドが使用するサービスアカウントに正しい注釈が付いていることを確認するには、次のコマンドを実行します:

kubectl describe sa efs-csi-controller-sa -n kube-system

次の注釈があることを確認します:

eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKS\_EFS\_CSI\_DriverRole

次の手順を完了したことを確認します:

  • クラスターの IAM OIDC プロバイダーを作成しました。
  • efs-csi-controller-sa サービスアカウントに関連付けられた IAM ロールには、EFS API 呼び出しを実行するために必要な権限が (GitHub ウェブサイトから) 与えられています。
  • IAM ロールのトラストポリシーは、サービスアカウント** efs-csi-controller-sa** を信頼します。IAM ロールのトラストポリシーは次の例のようになっている必要があります:
{
	"Version": "2012-10-17",
	"Statement": \[{
		"Effect": "Allow",
		"Principal": {
			"Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
		},
		"Action": "sts:AssumeRoleWithWebIdentity",
		"Condition": {
			"StringEquals": {
				"oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa"
			}
		}
	}\]
}

EFS CSI ドライバーポッドが実行されていることを確認する

EFS CSI ドライバーは、デプロイとして実行されるコントローラーポッドと、デーモンSet として実行されるノードポッドで構成されています。これらのポッドがクラスターで実行されていることを確認するには、以下のコマンドを実行します:

kubectl get all -l app.kubernetes.io/name=aws-efs-csi-driver -n kube-system

ポッドがファイルシステムをマウントできない EC2 ワーカーノードからの EFS マウント操作を確認します

ポッドがスケジュールされている Amazon EKS ワーカーノードにログインします。次に、 EFS マウントヘルパーを使用して、EFS ファイルシステムをワーカーノードに手動でマウントしてみます。マウント操作をテストするには、以下のコマンドを実行します:

sudo mount -t -efs -o tls file-system-dns-name efs-mount-point/

ワーカーノードがファイルシステムをマウントできる場合は、CSI コントローラーと CSI ノードポッドの** efs-plugin** ログを確認します。

EFS CSI ドライバーポッドのログを確認する

CSI ドライバーポッドのログを確認して、マウント失敗の原因を特定します。ボリュームをマウントできない場合は、** efs-plugin** のログを確認してください。efs-plugin コンテナーログを取得するには、以下のコマンドを実行します:

kubectl logs deployment/efs-csi-controller -n kube-system -c efs-plugin
kubectl logs daemonset/efs-csi-node -n kube-system -c efs-plugin
AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ