如何在我的 Amazon EKS 叢集上安裝 Amazon S3 CSI 驅動程式?
我想在 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集上使用 Amazon Simple Storage Service (Amazon S3) 容器儲存介面 (CSI) 驅動程式。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
先決條件:
- 安裝 kubectl 和 eksctl 命令列工具。
- 為您的叢集建立 AWS Identity and Access Management( IAM) OpenID Connect (OIDC) 提供者。
- 使用服務帳戶 (IRSA) 的 IAM 角色,因為您無法將 EKS Pod 身分識別與 Amazon S3 CSI 驅動程式一起使用。
若要取得您的 OIDC 發行者 ID,請執行以下 describe-cluster AWS CLI 命令:
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 替換為您的區域,並將 HOUR_ 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 驅動程式,請部署一個使用靜態佈建 Pod 的範例應用程式。如需步驟和範例,請參閱 GitHub 網站上的靜態佈建範例。
對 Amazon S3 CSI 驅動程式的問題進行疑難排解
您的 Amazon S3 CSI 驅動程式未如預期運作
若要確認 Amazon S3 CSI 驅動程式節點 Pod 是否正在執行,請執行下列命令:
kubectl get all -l app.kubernetes.io/name=aws-mountpoint-s3-csi-driver -n kube-system
若要查看來自 Amazon S3 CSI 驅動程式 Pod 的日誌,請執行下列命令:
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 Machine Image (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 儲存貯體的使用者才能存取您掛載的目錄。即使您設定了權限和擁有權設定,以允許容器中的其他使用者存取儲存貯體,也會發生這種情況。
若要允許其他非根使用者存取您掛載的目錄,請更新 mountOptions 以包含 --allow-other 選項。若要允許根使用者以其他使用者身分存取已掛載的目錄,請使用 --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" (「警告 FailedMount 39 秒前 (在 104 秒內重試了 8 次):kubelet 無法為磁碟區 "s3-pv-1" 執行 MountVolume.SetUp:rpc 錯誤:代碼 = InvalidArgument,描述 = 不支援的磁碟區功能」)
當您使用 Amazon S3 CSI 驅動程式不支援的存取模式 (例如 ReadWriteOncePod 或 ReadWriteOnce) 時,就會收到上述錯誤。您只能使用 ReadWriteMany 或 ReadOnlyMany 存取模式。
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前
- 已提問 1 年前
- 已提問 2 年前