如何在 Amazon EKS 中使用持續性儲存空間?

4 分的閱讀內容
0

我想要在 Amazon Elastic Kubernetes Service (Amazon EKS) 中使用持續性儲存空間。

簡短描述

若要在 Amazon EKS 中使用持續性儲存空間,請完成下列其中一個選項的步驟:

注意: 最佳實務是安裝最新版本的驅動程式。如需如何安裝最新驅動程式的步驟,請參閱 GitHub 網站上的 aws-ebs-csi-driveraws-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) 供應商,請執行下列命令:
    aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text
    **注意:**將 your_cluster_name 取代為您的叢集名稱。
  • 若要確認已設定您的 IAM OIDC 供應商,請執行下列命令:
    aws iam list-open-id-connect-providers | grep <ID of the oidc provider>
    **注意:**將 ID of the oidc provider 取代為您的 OIDC ID。如果收到 "No OpenIDConnect provider found in your account" 錯誤,請建立 IAM OIDC 供應商。
  • 安裝或更新 eksctl。如需說明,請參閱 eksctl 網站上的安裝
  • 若要建立 IAM OIDC 供應商,請執行下列命令:
    eksctl utils associate-iam-oidc-provider --cluster my-cluster --approve
    **注意:**將 my-cluster 取代為您的叢集名稱。

Amazon EBS CSI 驅動程式

部署 Amazon EBS CSI 驅動程式

請完成下列步驟:

  1. 建立類似下列範例的 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。

  2. 建立名為 AmazonEKS_EBS_CSI_DriverRole 的 IAM 角色:

    aws iam create-role
     --role-name AmazonEKS_EBS_CSI_DriverRole
     --assume-role-policy-document file://"trust-policy.json"
  3. 將驅動程式的 AWS 受管 IAM 政策附加至 IAM 角色:

    aws iam attach-role-policy
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy
    --role-name AmazonEKS_EBS_CSI_DriverRole
  4. 部署 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 角色

請完成下列步驟:

  1. 從 GitHub 中下載 IAM 政策文件:

    curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json
  2. 建立 IAM 政策:

    aws iam create-policy
        --policy-name AmazonEKS_EFS_CSI_Driver_Policy
        --policy-document file://iam-policy-example.json
  3. 若要確定叢集的 OIDC 供應商 ID,請執行下列命令:

    aws eks describe-cluster --name your_cluster_name --query "cluster.identity.oidc.issuer" --output text

    **注意:**將 your_cluster_name 取代為您的叢集名稱。

  4. 建立下列 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。

  5. 建立 IAM 角色:

    aws iam create-role
      --role-name AmazonEKS_EFS_CSI_DriverRole
      --assume-role-policy-document file://"trust-policy.json"
  6. 將您的新 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
  7. 將下列內容儲存至名為 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
  8. 在叢集上建立 Kubernetes 服務帳戶:

    kubectl apply -f efs-service-account.yaml

    注意: 使用您建立的 IAM 角色為名為 efs-csi-controller-sa 的 Kubernetes 服務帳戶加上註解。

  9. 從公有 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 驅動程式

  10. 編輯檔案 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 驅動程式

請完成下列步驟:

  1. 套用資訊清單:

    $ kubectl apply -f public-ecr-driver.yaml
  2. 如果您的叢集僅包含 AWS Fargate Pod (無節點),請執行下列命令部署驅動程式 (所有區域):

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/deploy/kubernetes/base/csidriver.yaml

建立 Amazon EFS 檔案系統

請完成下列步驟:

  1. 若要取得 Amazon EKS 叢集的虛擬私有雲端 (VPC),請執行下列命令:
    aws eks describe-cluster --name your_cluster_name --query "cluster.resourcesVpcConfig.vpcId" --output text
    **注意:**將 your_cluster_name 取代為您的叢集名稱。
  2. 若要取得 VPC 叢集的 CIDR 範圍,請執行下列命令:
    aws ec2 describe-vpcs --vpc-ids YOUR_VPC_ID --query "Vpcs[].CidrBlock" --output text
    注意:YOUR_VPC_ID 取代為您的 VPC ID。
  3. 建立安全群組,以允許 Amazon EFS 掛載點的輸入網路檔案系統 (NFS) 流量:
    aws ec2 create-security-group --description efs-test-sg --group-name efs-sg --vpc-id YOUR_VPC_ID
    注意:YOUR_VPC_ID 取代為您的 VPC ID。記下 GroupId 供以後使用。
  4. 為了讓 VPC 中的資源與 Amazon EFS 檔案系統通訊,請新增 NFS 輸入規則:
    aws ec2 authorize-security-group-ingress --group-id sg-xxx --protocol tcp --port 2049 --cidr YOUR_VPC_CIDR
    注意:YOUR_VPC_CIDR 取代為您的 VPC CIDR,並將 sg-xxx 取代為您的安全群組 ID。
  5. 為您的 Amazon EKS 叢集建立 Amazon EFS 檔案系統:
    aws efs create-file-system --creation-token eks-efs
    注意: 記下 FileSystemId 供以後使用。
  6. 若要為 Amazon EFS 建立掛載目標,請執行下列命令:
    aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group sg-xxx
    **重要:**在執行工作節點的可用區域中,為所有具有 SubnetID 的可用區域執行上述命令。將 FileSystemId 取代為您的 EFS 檔案系統 ID,將 sg-xxx 取代為安全群組 ID,並將 SubnetID 取代為您的工作節點子網路 ID。若要在多個子網路中建立掛載目標,請對每個子網路 ID 執行命令。最佳實務是在執行工作節點的每個可用區域中建立掛載目標。您可以為啟動工作節點的所有可用區域建立掛載目標。然後,這些可用區域中的所有 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體皆可使用該檔案系統。

測試 Amazon EFS CSI 驅動程式

若要部署兩個寫入相同檔案的 Pod,請參閱 GitHub 網站上的多個 Pod 讀寫許多

相關資訊

對 Amazon EFS 進行疑難排解

AWS 官方
AWS 官方已更新 1 年前