Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何在 Amazon EKS 中使用持續性儲存空間?
我想要在 Amazon Elastic Kubernetes Service (Amazon EKS) 中使用持續性儲存空間。
簡短描述
若要在 Amazon EKS 中使用持續性儲存空間,請完成下列其中一個選項的步驟:
- 部署並測試 Amazon Elastic Block Store (Amazon EBS) 容器儲存介面 (CSI) 驅動程式。
- 部署並測試 Amazon Elastic File System (Amazon EFS) 容器儲存介面 (CSI) 驅動程式。
注意: 最佳實務是安裝最新版本的驅動程式。如需如何安裝最新驅動程式的步驟,請參閱 GitHub 網站上的 aws-ebs-csi-driver 和 aws-efs-csi-driver。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
先決條件:
- 安裝 AWS CLI。
- 使用 ** kubectl ** 版本 1.14 或更高版本執行命令。如需詳細資訊,請參閱安裝或更新 kubectl。
- 將 AWS Identity and Access Management (IAM) 權限設定為建立。然後,將政策附加到 Amazon EKS 工作節點角色 CSI 驅動程式角色。
- 建立 Amazon EKS 叢集,並將工作節點加入叢集。
**注意:**執行 kubectl get nodes 命令,以確認工作節點已附加至叢集。 - 若要確認您的叢集中存在 AWS IAM OpenID Connect (OIDC) 供應商,請執行下列命令:
**注意:**將 your_cluster_name 取代為您的叢集名稱。aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text
- 若要確認已設定您的 IAM OIDC 供應商,請執行下列命令:
**注意:**將 ID of the oidc provider 取代為您的 OIDC ID。如果收到 "No OpenIDConnect provider found in your account" 錯誤,請建立 IAM OIDC 供應商。aws iam list-open-id-connect-providers | grep <ID of the oidc provider>
- 安裝或更新 eksctl。如需說明,請參閱 eksctl 網站上的安裝。
- 若要建立 IAM OIDC 供應商,請執行下列命令:
**注意:**將 my-cluster 取代為您的叢集名稱。eksctl utils associate-iam-oidc-provider --cluster my-cluster --approve
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/<your OIDC ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:aud": "sts.amazonaws.com", "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa" } } } ] } EOF
注意: 將 YOUR_AWS_ACCOUNT_ID 取代為您的 AWS 帳戶 ID,將 YOUR_AWS_REGION 取代為您的 AWS 區域,並將 your OIDC ID 取代為您的 OIDC ID。
-
建立名為 AmazonEKS_EBS_CSI_DriverRole 的 IAM 角色:
aws iam create-role --role-name AmazonEKS_EBS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json"
-
將驅動程式的 AWS 受管 IAM 政策附加至 IAM 角色:
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --role-name AmazonEKS_EBS_CSI_DriverRole
-
部署 Amazon EBS CSI 驅動程式。
注意: 若要部署 EBS CSI 驅動程式,您可以使用 Kustomize、Helm 或 Amazon EKS 受管附加元件。如需如何部署 EBS CSI 驅動程式的說明,請參閱 GitHub 網站上的安裝。
測試 Amazon EBS CSI 驅動程式
使用對 Pod 使用動態佈建的範例應用程式來測試 Amazon EBS CSI 驅動程式。隨需佈建 Amazon EBS 磁碟區。
Amazon EFS CSI 驅動程式
為 CSI 驅動程式建立 IAM 角色
請完成下列步驟:
-
從 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 政策:
aws iam create-policy --policy-name AmazonEKS_EFS_CSI_Driver_Policy --policy-document file://iam-policy-example.json
-
若要確定叢集的 OIDC 供應商 ID,請執行下列命令:
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/<XXXXXXXXXX45D83924220DC4815XXXXX>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.YOUR_AWS_REGION.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa" } } } ] } EOF
注意: 將 YOUR_AWS_ACCOUNT_ID 取代為您的帳戶 ID,將 YOUR_AWS_REGION 取代為您的 AWS 區域,並將 XXXXXXXXXX45D83924220DC4815XXXXX 取代為您叢集的 OIDC 供應商 ID。
-
建立 IAM 角色:
aws iam create-role --role-name AmazonEKS_EFS_CSI_DriverRole --assume-role-policy-document file://"trust-policy.json"
-
將您的新 IAM 政策連接至該角色:
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
-
將下列內容儲存至名為 efs-service-account.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
-
在叢集上建立 Kubernetes 服務帳戶:
kubectl apply -f efs-service-account.yaml
注意: 使用您建立的 IAM 角色為名為 efs-csi-controller-sa 的 Kubernetes 服務帳戶加上註解。
-
從公有 Amazon ECR 登錄下載資訊清單,並使用映像來安裝驅動程式:
$ kubectl kustomize "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.5" > public-ecr-driver.yaml
**注意:**若要安裝 EFS CSI 驅動程式,可以將 Helm 和 Kustomize 與 AWS 私有或公有登錄搭配使用。如需如何安裝 EFS CSI 驅動程式的說明,請參閱 GitHub 網站上的 AWS EFS CSI 驅動程式。
-
編輯檔案 public-ecr-driver.yaml,並使用 IAM 角色的 ARN 為 efs-csi-controller-sa Kubernetes 服務帳戶區段加上註解:
apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: aws-efs-csi-driver annotations: eks.amazonaws.com/role-arn: arn:aws:iam::<accountid>:role/AmazonEKS\_EFS\_CSI\_DriverRole name: efs-csi-controller-sa namespace: kube-system
部署 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
建立 Amazon EFS 檔案系統
請完成下列步驟:
- 若要取得 Amazon EKS 叢集的虛擬私有雲端 (VPC),請執行下列命令:
**注意:**將 your_cluster_name 取代為您的叢集名稱。aws eks describe-cluster --name your_cluster_name --query "cluster.resourcesVpcConfig.vpcId" --output text
- 若要取得 VPC 叢集的 CIDR 範圍,請執行下列命令:
注意: 將 YOUR_VPC_ID 取代為您的 VPC ID。aws ec2 describe-vpcs --vpc-ids YOUR_VPC_ID --query "Vpcs[].CidrBlock" --output text
- 建立安全群組,以允許 Amazon EFS 掛載點的輸入網路檔案系統 (NFS) 流量:
注意: 將 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 中的資源與 Amazon EFS 檔案系統通訊,請新增 NFS 輸入規則:
注意: 將 YOUR_VPC_CIDR 取代為您的 VPC CIDR,並將 sg-xxx 取代為您的安全群組 ID。aws ec2 authorize-security-group-ingress --group-id sg-xxx --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
- 為您的 Amazon EKS 叢集建立 Amazon EFS 檔案系統:
注意: 記下 FileSystemId 供以後使用。aws efs create-file-system --creation-token eks-efs
- 若要為 Amazon EFS 建立掛載目標,請執行下列命令:
**重要:**在執行工作節點的可用區域中,為所有具有 SubnetID 的可用區域執行上述命令。將 FileSystemId 取代為您的 EFS 檔案系統 ID,將 sg-xxx 取代為安全群組 ID,並將 SubnetID 取代為您的工作節點子網路 ID。若要在多個子網路中建立掛載目標,請對每個子網路 ID 執行命令。最佳實務是在執行工作節點的每個可用區域中建立掛載目標。您可以為啟動工作節點的所有可用區域建立掛載目標。然後,這些可用區域中的所有 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體皆可使用該檔案系統。aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-xxx
測試 Amazon EFS CSI 驅動程式
若要部署兩個寫入相同檔案的 Pod,請參閱 GitHub 網站上的多個 Pod 讀寫許多。
相關資訊
相關內容
- 已提問 2 年前lg...
- 已提問 5 個月前lg...
- 已提問 12 天前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前