Amazon EKS クラスターに Amazon S3 CSI ドライバーをインストールする方法を教えてください。
Amazon Elastic Kubernetes サービス (Amazon EKS) クラスターで Amazon Simple Storage Service (Amazon S3) の Container Storage Interface (CSI) ドライバーを使用したいです。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
前提条件
- kubectl および eksctl コマンドラインツールをインストールする必要があります。
- クラスター用の AWS Identity and Access Management (IAM) OpenID Connect (OIDC) プロバイダーを作成する必要があります。
- Amazon S3 CSI ドライバーでは EKS Pod Identity を使用できないため、サービスアカウント用の IAM ロール (IRSA) を使用してください。
OIDC の発行者 ID を取得するには、次の AWS CLI コマンド describe-cluster を実行します。
aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5
注: your_cluster_name は実際の Amazon EKS クラスター名に置き換えます。
IAM OIDC プロバイダーを設定したかどうかを確認するには、次の list-open-id-connect-providers コマンドを実行します。
aws iam list-open-id-connect-providers | grep your_OIDC_ID | cut -d "/" -f4
注: YOUR_OIDC_ID を実際の OIDC ID に置き換えます。出力が空の場合は、IAM OIDC プロバイダーを作成する必要があります。
IAM OIDC プロバイダーを作成するには、次のコマンドを実行します。
eksctl utils associate-iam-oidc-provider --cluster your_cluster_name --approve
注: your_cluster_name を実際のクラスター名に置き換えます。
Amazon S3 CSI ドライバーをデプロイする
次の手順を実行します。
- 要件に応じて IAM ポリシーを作成します。
汎用バケットポリシー:
注: your-bucket-name を該当するバケット名に置き換えます。cat <<EOF > iam-policy.json { "Version": "2012-10-17", "Statement": [ { "Sid": "MountpointFullBucketAccess", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::your_bucket_name" ] }, { "Sid": "MountpointFullObjectAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::your_bucket_name/*" ] } ] } EOF
ディレクトリバケットポリシー:
注: 実際のものでそれぞれ、YOUR_AWS_REGION を AWS リージョンに、YOUR_AWS_ACCOUNT_ID を AWS アカウントに、your_bucket_name をバケット名に、az_id をアベイラビリティゾーンに置き換えます。cat <<EOF > iam-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3express:CreateSession", "Resource": "arn:aws:s3express:YOUR_AWS_REGION:YOUR_AWS_ACCOUNT_ID:bucket/your_bucket_name--az_id--x-s3" } ] } EOF - 次の create-policy コマンドを実行し、AmazonS3CSIDriverPolicy という名前の IAM ポリシーを作成します。
注: iam-policy.json を実際の IAM ポリシー JSON ファイルに置き換えます。aws iam create-policy --policy-name AmazonS3CSIDriverPolicy --policy-document file://iam-policy.json - 次の IAM 信頼ポリシーを作成します。
注: 実際のものでそれぞれ、YOUR_AWS_ACCOUNT_ID をアカウントに、YOUR_AWS_REGION をリージョンに、YOUR_OIDC_ID を OIDC ID に置き換えます。cat <<EOF > trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/your_OIDC_ID" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/your_OIDC_ID:sub": "system:serviceaccount:kube-system:s3-csi-*", "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/your_OIDC_ID:aud": "sts.amazonaws.com" } } } ] } EOF - 次の create-role コマンドを実行し、AmazonEKS_S3_CSI_DriverRole という名前の IAM ロールを作成します。
注: trust-policy.json を実際の IAM 信頼ポリシー JSON ファイルに置き換えます。aws iam create-role --role-name AmazonEKS_S3_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json" - 次の attach-role-policy コマンドを実行し、ポリシーを IAM ロールにアタッチします。
注: YOUR_AWS_ACCOUNT_ID を実際の AWS アカウント ID に置き換えます。aws iam attach-role-policy --policy-arn arn:aws:iam::YOUR_AWS_ACCOUNT_ID:policy/AmazonS3CSIDriverPolicy --role-name AmazonEKS_S3_CSI_DriverRole - 次の create-addon コマンドを実行し、Amazon S3 CSI ドライバーをクラスターにデプロイします。
注: 実際のものでそれぞれ、your_cluster_name をクラスター名に、YOUR_AWS_ACCOUNT_ID をアカウント ID に置き換えます。Kustomize または Helm で Amazon S3 CSI ドライバをインストールする方法については、GitHub のウェブサイトで「インストール」を参照してください。aws eks create-addon --cluster-name your_cluster_name --addon-name aws-mountpoint-s3-csi-driver --service-account-role-arn arn:aws:iam::YOUR_AWS_ACCOUNT_ID:role/AmazonEKS_S3_CSI_DriverRole
ユーザーが既存のファイルを上書きできるようにするには、--allow-overwrite フラグを永続ボリュームに追加します。すべての書き込みは、ファイルの先頭から順番に追加する必要があります。ファイルを追加することはできません。代わりに、既存のコンテンツを新しいコンテンツに置き換える必要があります。ただし、Amazon S3 Express One Zone ストレージクラスのディレクトリバケットでは、既存のファイルを追加できます。--incremental-upload フラグを永続ボリュームに追加すると、ファイルの追加が可能になります。ファイルの最後から開始すると、すべての書き込みを順番に追加できます。詳細については、GitHub のウェブサイトで「ファイルの読み取りと書き込み」および「設定」を参照してください。
Amazon S3 CSI ドライバーのマウントポイントは静的プロビジョニングのみを使用します。動的プロビジョニングを使用したり、新しいバケットを作成したりすることはできません。マウントポイントにマウントしたボリュームは、一部の POSIX ファイルシステム機能を使用できません。詳細については、GitHub のウェブサイトで「Amazon S3 ファイルシステム用のマウントポイントの動作」を参照してください。アプリケーションに完全なファイルシステムが必要な場合は、Amazon Elastic File System (Amazon EFS) または Amazon FSx を使用することをおすすめします。
Amazon S3 CSI ドライバーをテストする
Amazon S3 CSI ドライバーをテストするには、ポッドに静的プロビジョニングを使用するサンプルアプリケーションをデプロイします。手順と例については、GitHub のウェブサイトで「静的プロビジョニングの例」を参照してください。
Amazon S3 CSI ドライバーに関する問題のトラブルシューティング
Amazon S3 CSI ドライバが想定通りに動作しない
Amazon S3 CSI ドライバーのノードポッドが実行中であることを確認するには、次のコマンドを実行します。
kubectl get all -l app.kubernetes.io/name=aws-mountpoint-s3-csi-driver -n kube-system
Amazon S3 CSI ドライバーポッドのログを確認するには、次のコマンドを実行します。
kubectl logs daemonset/s3-csi-node -n kube-system -c s3-plugin:
Amazon S3 バケットが Amazon EKS クラスターと同じリージョンにあることを確認してください。バケットとクラスターが異なるリージョンにある場合は、mountOptions を更新し、そのリージョンを含めます。
設定例:
apiVersion: v1 kind: PersistentVolume metadata: name: s3-pv-1 spec: accessModes: - ReadWriteMany capacity: storage: 10Gi csi: driver: s3.csi.aws.com volumeAttributes: bucketName: bucket name volumeHandle: s3-csi-driver-volume mountOptions: - region us-west-2 - allow-other persistentVolumeReclaimPolicy: Retain volumeMode: Filesystem
Amazon S3 CSI ドライバーが Bottlerocket Amazon マシンイメージ (AMI) で動作しない場合は、次のコマンドを実行してコンテナイメージのバージョンを確認してください。
kubectl get ds s3-csi-node -n kube-system -ojsonpath="{range .spec.template.spec.containers[*]}{.image}{'\n'}{end}"
コマンドの出力で、コンテナイメージのバージョンが v1.4.0 以上であることを確認します。最新の Amazon S3 CSI ドライバーバージョンを使用することをおすすめします。最新バージョンに関する情報は、GitHub のウェブサイトで 「mountpoint-s3-csi-driver リリース」を参照してください。
コンテナ内のユーザーが Amazon S3 バケットにアクセスできない
デフォルトでは、S3 バケットをマウントしたユーザーのみがマウントされたディレクトリにアクセスできます。この問題は、アクセス許可や所有権がコンテナ内の他のユーザーがバケットにアクセスできるように設定されている場合にも発生します。
root 以外のユーザーがマウントしたディレクトリにアクセスできるようにするには、mountOptions を更新して --allow-other オプションを含めます。root ユーザーがマウントされたディレクトリに別のユーザーとしてアクセスできるようにするには、--allow-root を使用します。
ポリシー例:
apiVersion: v1 kind: PersistentVolume metadata: name: s3-pv-1 spec: accessModes: - ReadWriteMany capacity: storage: 10Gi csi: driver: s3.csi.aws.com volumeAttributes: bucketName: bucket name volumeHandle: s3-csi-driver-volume mountOptions: - region us-west-2 - allow-other persistentVolumeReclaimPolicy: Retain volumeMode: Filesystem
「Volume capability not supported」エラーが発生する
Amazon S3 CSI ドライバーの使用時に、次の例のようなエラーメッセージが表示されることがあります。
「Warning FailedMount 39s (x8 over 104s) kubelet MountVolume.SetUp failed for volume "s3-pv-1" : rpc error: code = InvalidArgument desc = Volume capability not supported」
上記のエラーは、ReadWriteOncePod や ReadWriteOnce など、Amazon S3 CSI ドライバーがサポートしていないアクセスモードを使用した場合に発生します。アクセスモードには、ReadWriteMany または ReadOnlyMany のみを使用できます。
- トピック
- Containers
- 言語
- 日本語

関連するコンテンツ
AWS公式更新しました 10ヶ月前