Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
如何在 Amazon EKS 中使用持續性儲存空間?
我想要在 Amazon Elastic Kubernetes Service (Amazon EKS) 中使用持續性儲存空間。
簡短描述
若要在 Amazon EKS 中使用持續性儲存空間,請完成下列其中一個選項的步驟:
- 部署並測試 Amazon Elastic Block Store (Amazon EBS) 容器儲存介面 (CSI) 驅動程式。
- 部署並測試 Amazon Elastic File System (Amazon EFS) CSI 驅動程式。
**注意:**出於安全性和效率的考慮,最佳實務是透過 Amazon EKS 附加元件安裝 CSI 驅動程式。安裝最新版本的驅動程式也是一項最佳實務。如需安裝步驟和最新驅動程式版本,請參閱 GitHub 網站上的 aws-ebs-csi-driver 或 aws-efs-csi-driver。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
先決條件:
-
[設定一個與您的 Kubernetes 版本相符的 kubectl 版本](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)。如需版本不一致要求的資訊,請參閱 Kubernetes 網站上的 kubectl。
-
安裝或更新 eksctl。如需說明,請參閱 eksctl 網站上的安裝。
-
設定 AWS Identity and Access Management (IAM) 建立權限。然後,將政策附加到 CSI 驅動程式角色或 Amazon EKS 工作節點角色。
-
建立您的 Amazon EKS 叢集,然後將工作節點加入叢集。若要確認您是否已將工作節點附加到叢集,請執行以下命令:
kubectl get nodes -
若要確認您的叢集是否存在 IAM OpenID Connect (OIDC) 提供者,請執行下列 describe-cluster AWS CLI 命令:
aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text**注意:**將 your_cluster_name 替換為您的叢集名稱。
-
若要確認您是否已設定 IAM OIDC 提供者,請執行以下 list-open-id-connect-providers 命令:
aws iam list-open-id-connect-providers | grep OIDC-ID**注意:**將 OIDC-ID 替換為您的 OIDC 提供者 ID。如果您收到 錯誤訊息,請建立 IAM OIDC 提供者"No OpenIDConnect provider found in your account"。
Amazon EBS CSI 驅動程式
若要部署 Amazon EBS CSI 驅動程式,請完成下列步驟:
-
建立類似下列範例的 IAM 信任政策檔案:
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/OIDC-ID" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:aud": "sts.amazonaws.com", "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa" } } } ] } EOF**注意:**將 YOUR_AWS_ACCOUNT_ID 替換為您的 AWS 帳戶 ID,將 YOUR_AWS_REGION 替換為您的 AWS 區域,並將 OIDC-ID 替換為您的 OIDC 提供者 ID。
-
若要建立名為 AmazonEKS_EBS_CSI_DriverRole 的 IAM 角色,請執行下列 create-role 命令:
aws iam create-role --role-name AmazonEKS_EBS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json" -
若要將 CSI 驅動程式的 AWS 受管 IAM 政策附加到 IAM 角色,請執行下列 attach-role-policy 命令:
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --role-name AmazonEKS_EBS_CSI_DriverRole -
若要部署 Amazon EBS CSI 驅動程式,請使用 Kustomize、Helm 或 Amazon EKS 受管附加元件。如需部署說明,請參閱 GitHub 網站上的安裝。
-
使用對 Pod 使用動態佈建的範例應用程式來測試 Amazon EBS CSI 驅動程式。Amazon EBS CSI 驅動程式會隨需佈建 EBS 磁碟區。
Amazon EFS CSI 驅動程式
為 CSI 驅動程式建立 IAM 角色
對於具有工作節點的叢集,完成以下步驟:
-
若要使用 AmazonEFSCSIDriverPolicy,請參閱如果在服務帳戶使用 IAM 角色。然後繼續進行步驟 7。
或者,執行以下命令從 GitHub 下載 IAM 政策文件:curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json -
若要建立 IAM 政策,請執行以下 create-policy 命令:
aws iam create-policy --policy-name AmazonEKS_EFS_CSI_Driver_Policy --policy-document file://iam-policy-example.json -
若要確定叢集的 OIDC 提供者 ID,請執行以下 describe-cluster 命令:
aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text**注意:**將 your_cluster_name 替換為您的叢集名稱。
-
建立以下 IAM 信任政策,將 AssumeRoleWithWebIdentity 動作授予您的 Kubernetes 服務帳戶:
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/OIDC-ID" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/OIDC-ID:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa" } } } ] } EOF**注意:**將 YOUR_AWS_ACCOUNT_ID 替換為您的帳戶 ID,將 YOUR_AWS_REGION 替換為您的區域,並將 OIDC-ID 替換為您叢集的 OIDC 提供者 ID。
-
若要建立 IAM 角色,請執行以下 create-role 命令:
aws iam create-role --role-name AmazonEKS_EFS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json" -
若要將新的 IAM 政策附加到角色,請執行以下 attach-role-policy 命令:
aws iam attach-role-policy --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/AmazonEKS_EFS_CSI_Driver_Policy --role-name AmazonEKS_EFS_CSI_DriverRole**注意:**將 YOUR_AWS_ACCOUNT_ID 替換為您的帳戶 ID。
-
如果您使用受管附加元件,請繼續部署 Amazon EFS CSI 驅動程式。若要安裝自我管理驅動程式,請完成步驟 7-10。將以下內容儲存到名為 efs-service-account.yaml 的 YAML 檔案中:
apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: aws-efs-csi-driver name: efs-csi-controller-sa namespace: kube-system annotations: eks.amazonaws.com/role-arn: arn:aws:iam::AWS_ACCOUNT_ID:role/AmazonEKS_EFS_CSI_DriverRole**注意:**將 YOUR_AWS_ACCOUNT_ID 替換為您的帳戶 ID。
-
若要在叢集上建立 Kubernetes 服務帳戶,請執行下列命令:
kubectl apply -f efs-service-account.yaml**注意:**efs-csi-controller-sa Kubernetes 服務帳戶具有您所建立 IAM 角色的註解。
-
若要從公有 Amazon Elastic Container Registry (Amazon ECR) 註冊表下載清單,請執行下列命令:
kubectl kustomize "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-VERSION" > public-ecr-driver.yaml**注意:**將 VERSION 替換為您的發行版本號碼。最佳實務是使用最新發行的版本。如需作用中分支的清單,請參閱 GitHub 網站上的分支。您可以使用 Helm 取代 Kustomize 來安裝驅動程式。如需步驟,請參閱 GitHub 網站上的部署驅動程式。
-
編輯已下載的檔案,移除以下幾行:
apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: aws-efs-csi-driver name: efs-csi-controller-sa namespace: kube-system
**注意:**您不需要包含前述幾行,因為您已經在步驟 7 中建立了服務帳戶。
部署 Amazon EFS CSI 驅動程式
若要套用資訊清單,請執行以下命令:
kubectl apply -f public-ecr-driver.yaml
如果您的叢集不包含節點,且僅包含 AWS Fargate Pod,請執行下列命令將驅動程式部署到所有區域:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/deploy/kubernetes/base/csidriver.yaml
建立 EFS 檔案系統
請完成下列步驟:
- 若要取得 Amazon EKS 叢集的虛擬私有雲端 (VPC) ID,請執行下列 describe-cluster 命令:
**注意:**將 your_cluster_name 替換為您的叢集名稱。aws eks describe-cluster --name your_cluster_name --query "cluster.resourcesVpcConfig.vpcId" --output text - 若要取得 VPC 叢集的 CIDR 範圍,請執行以下 describe-vpcs 命令:
**注意:**將 YOUR_VPC_ID 替換為您的 VPC ID。aws ec2 describe-vpcs --vpc-ids YOUR_VPC_ID --query "Vpcs[].CidrBlock" --output text - 若要建立允許傳入網路檔案系統 (NFS) 流量進入 Amazon EFS 掛載點的安全群組,請執行下列 create-security-group 命令:
**注意:**將 YOUR_VPC_ID 替換為您的 VPC ID。在輸出中,記下 GroupId 值。aws ec2 create-security-group --description efs-test-sg --group-name efs-sg --vpc-id YOUR_VPC_ID - 若要允許 VPC 中的資源與 EFS 檔案系統通訊,請執行以下 authorize-security-group-ingress 命令來新增 NFS 傳入規則:
**注意:**將 YOUR_VPC_CIDR 替換為您的 VPC CIDR,並將 sg-abc 替換為您的安全群組 ID。aws ec2 authorize-security-group-ingress --group-id sg-abc --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR - 若要為您的 Amazon EKS 叢集建立 EFS 檔案系統,請執行以下 create-file-system 命令:
**注意:**記下 FileSystemId。aws efs create-file-system --creation-token eks-efs - 若要為 Amazon EFS 建立掛載目標,請執行以下 create-mount-target 命令:
**注意:**將 FileSystemId 替換為您的 EFS 檔案系統 ID,將 sg-abc 替換為您的安全群組 ID,並將 SubnetID 替換為您的工作節點子網路 ID。最佳實務是對工作節點執行的每個可用區域執行上述命令。可用區域中的所有 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體都可以使用該檔案系統。若要在多個子網路中建立掛載目標,請對每個子網路 ID 執行該命令。aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-abc
測試 Amazon EFS CSI 驅動程式
若要部署兩個寫入相同檔案的 Pod,請參閱 GitHub 網站上的多個 Pod 讀寫共用。
相關資訊
GitHub 網站上的 Amazon EFS CSI 驅動程式
- 語言
- 中文 (繁體)

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