View a markdown version of this page

搭配 Amazon EFS CSI 驅動程式使用 Amazon S3 檔案系統儲存 EFS - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

搭配 Amazon EFS CSI 驅動程式使用 Amazon S3 檔案系統儲存 EFS

S3 檔案是一種共用檔案系統,可直接將任何 AWS 運算與 Amazon S3 中的資料連線。它可讓您以具有完整檔案系統語意和低延遲效能的檔案形式,快速直接存取所有 S3 資料,而不會讓您的資料離開 S3。這表示以檔案為基礎的應用程式、客服人員和團隊可以使用他們已經依賴的工具,以檔案系統的形式存取和使用 S3 資料。Amazon EFS 容器儲存介面 (CSI) 驅動程式允許在 上執行的 Kubernetes 叢集 AWS 將 Amazon S3 檔案系統掛載為從 3.0.0 版開始的持久性磁碟區。本主題說明如何使用 Amazon EFS CSI 驅動程式來管理 Amazon EKS 叢集上的 Amazon S3 檔案系統。

考量事項

  • Amazon EFS CSI 驅動程式與以 Windows 為基礎的容器映像不相容。

  • EKS Fargate 不支援 S3 檔案。

  • Amazon EFS CSI 驅動程式與 Amazon EKS 混合節點不相容。

  • Amazon EFS CSI 驅動程式中的 Amazon S3 檔案支援從 3.0.0 版開始。 EFS

先決條件

  • Amazon EFS CSI 驅動程式需要 AWS Identity and Access Management (IAM) 許可。

  • 在您的裝置或 AWS CloudShell 上安裝和設定的 AWS 命令列界面 (AWS CLI) 版本 1.27.160 2.12.3或更新版本。若要檢查您目前的版本,請使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。適用於 macOS 的 yumapt-get或 Homebrew 等套件管理員通常是最新版本 CLI AWS 後面的幾個版本。若要安裝最新版本,請參閱《 AWS 命令列界面使用者指南》中的使用 aws 設定安裝 和快速組態。 https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config在 AWS CloudShell 中安裝的 AWS CLI 版本也可能是最新版本後面的幾個版本。若要更新它,請參閱《CloudShell AWS 使用者指南》中的將 CLI 安裝到您的主目錄 AWS CloudShell

  • kubectl 命令列工具安裝在您的裝置或 AWS CloudShell 上。版本可以與您的叢集 Kubernetes 版本相同,或是為最多比該版本更舊一版或更新一版的次要版本。例如,如果您的叢集版本為 1.29,則可以搭配使用 kubectl 1.281.291.30 版。若要安裝或升級 kubectl,請參閱 設定 kubectl 和 eksctl

步驟 1:建立 IAM 角色

Amazon EFS CSI 驅動程式需要 IAM 許可才能與檔案系統互動。EFS CSI 驅動程式使用兩個具有不同 IAM 角色的服務帳戶:

  • efs-csi-controller-sa — 供控制器使用,需要 AmazonS3FilesCSIDriverPolicy

  • efs-csi-node-sa — 由節點協助程式集使用, 需要:

    • AmazonS3ReadOnlyAccess — 啟用直接從 S3 儲存貯體進行串流讀取,以提高輸送量。

    • AmazonElasticFileSystemsUtils — 可將 efs-utils 日誌發佈至 Amazon CloudWatch,以便查看掛載操作並更輕鬆地進行故障診斷。

注意

如果您想要同時使用 Amazon S3 檔案系統和 Amazon EFS 儲存,您必須同時將 AmazonS3FilesCSIDriverPolicyAmazonEFSCSIDriverPolicy受管政策連接到控制器角色。如需 Amazon EFS 儲存體的詳細資訊,請參閱 透過 Amazon EFS 使用彈性檔案系統儲存

若要實作此程序,您可使用下列其中一個工具:

注意

本程序中的特定步驟是針對將驅動程式用作 Amazon EKS 附加元件而編寫。如需有關自我管理安裝的詳細資訊,請參閱 GitHub 上的設定驅動程式許可一節。

eksctl

如果使用 Pod 身分識別

執行下列命令,以建立與 的 IAM 角色和 Pod 身分關聯eksctl。將 my-cluster 取代為您的值。

export cluster_name=my-cluster # Create the controller role eksctl create podidentityassociation \ --service-account-name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_ControllerRole \ --permission-policy-arns arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy # Create the node role eksctl create podidentityassociation \ --service-account-name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_NodeRole \ --permission-policy-arns arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess,arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils

如果為服務帳戶使用 IAM 角色

執行下列命令以使用 建立 IAM 角色eksctl。將 my-cluster 取代為您的叢集名稱,並將 region-code 取代為您的 AWS 區域代碼。

export cluster_name=my-cluster export region_code=region-code # Create the controller role export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole eksctl create iamserviceaccount \ --name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $controller_role_name \ --attach-policy-arn arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --approve \ --region $region_code # Create the node role export node_role_name=AmazonEKS_EFS_CSI_NodeRole eksctl create iamserviceaccount \ --name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $node_role_name \ --attach-policy-arn arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess \ --attach-policy-arn arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils \ --approve \ --region $region_code

AWS 管理主控台

執行下列操作以使用 建立 IAM 角色 AWS 管理主控台。

  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

  2. 在左側導覽窗格中,選擇 Roles (角色)。

  3. Roles (角色) 頁面上,選擇 Create role (建立角色)。

  4. Select trusted entity (選取信任的實體) 頁面上,執行以下作業:

    1. 如果使用 EKS Pod 身分識別:

      1. 信任的實體類型區段中,選擇 AWS 服務

      2. 服務或使用案例下拉式清單中,選擇 EKS

      3. 使用案例區段中,選擇 EKS - Pod 身分識別

      4. 選擇下一步

    2. 如果為服務帳戶使用 IAM 角色:

      1. Trusted entity type (信任的實體類型) 區段中,選擇 Web identity (Web 身分)。

      2. 對於 Identity provider (身分提供者),為您的叢集選擇 OpenID Connect provider URL (OpenID Connect 供應商 URL)(如 Amazon EKS Overview (概觀) 下所示)。

      3. 針對 Audience (對象),選擇 sts.amazonaws.com

      4. 選擇下一步

  5. Add permissions (新增許可) 頁面上,執行以下作業:

    1. Filter policies (篩選政策) 方塊中,輸入 AmazonS3FilesCSIDriverPolicy

    2. 選取搜尋中傳回的政策左側的核取方塊。

    3. 選擇下一步

  6. Name, review, and create (命名、檢閱和建立) 頁面上,執行以下作業:

    1. 針對 Role name (角色名稱),為您的角色輸入唯一名稱 (例如 AmazonEKS_EFS_CSI_ControllerRole)。

    2. 藉由連接標籤做為鍵值對,在新增標籤 (選用) 下將中繼資料新增至角色。如需有關在 IAM 中使用標籤的詳細資訊,請參閱《IAM 使用者指南》中的標記 IAM 資源

    3. 選擇建立角色

  7. 建立角色之後:

    1. 如果使用 EKS Pod 身分識別:

      1. 開啟 Amazon EKS 主控台

      2. 在左側導覽窗格中,選取叢集,然後選取您要為其設定 EKS Pod 身分識別關聯之叢集的名稱。

      3. 選擇存取索引標籤。

      4. Pod 身分識別關聯中,選擇建立

      5. 選擇 IAM 角色下拉式清單,然後選取新建立的角色。

      6. 選擇 Kubernetes 命名空間欄位,並輸入 kube-system

      7. 選擇 Kubernetes 服務帳戶欄位,並輸入 efs-csi-controller-sa

      8. 選擇建立

      9. 如需建立 Pod 身分識別關聯的詳細資訊,請參閱 建立 Pod Identity 關聯AWS (主控台)

      10. 重複上述步驟,為節點服務帳戶建立第二個角色。在新增許可頁面上,AmazonElasticFileSystemsUtils改為連接 AmazonS3ReadOnlyAccess和 。然後,為 Kubernetes 服務帳戶欄位建立與 efs-csi-node-sa的 Pod Identity 關聯。

    2. 如果為服務帳戶使用 IAM 角色:

      1. 選擇角色以開啟進行編輯。

      2. 選擇 Trust Relationships (信任關係) 標籤,然後選擇 Edit Trust Relationship (編輯信任政策)。

      3. 查找與下列行相似的行:

        "oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com"

        在前一行上方加入下列行。<region-code> 將 取代為叢集所在的 AWS 區域。將 <EXAMPLED539D4633E53DE1B71EXAMPLE> 取代為叢集的 OIDC 提供商 ID。

        "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa",
      4. 選擇 Update policy (更新政策) 以完成操作。

      5. 重複上述步驟,為節點服務帳戶建立第二個角色。在新增許可頁面上,AmazonElasticFileSystemsUtils改為連接 AmazonS3ReadOnlyAccess和 。在信任政策中,使用 efs-csi-node-sa 做為:sub條件值。

AWS CLI

執行下列命令,使用 CLI 建立 IAM AWS 角色。

如果使用 Pod 身分識別

  1. 建立將 AssumeRoleTagSession 動作授予 pods.eks.amazonaws.com 服務的 IAM 角色。

    1. 將下列內容複製到名為 aws-efs-csi-driver-trust-policy-pod-identity.json 的檔案。

      { "Version":"2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
    2. 建立角色。使用您的叢集名稱取代 my-cluster

      export cluster_name=my-cluster export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
  2. 將所需的 AWS 受管政策連接至控制器角色。

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name
  3. 使用相同的信任政策建立節點 IAM 角色。

    export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
  4. 將所需的 AWS 受管政策連接至節點角色。

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name
  5. 執行下列命令來建立 Pod Identity 關聯。使用您的帳戶 ID 取代 <111122223333>

    aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$controller_role_name --namespace kube-system --service-account efs-csi-controller-sa
    aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$node_role_name --namespace kube-system --service-account efs-csi-node-sa
  6. 如需建立 Pod 身分識別關聯的詳細資訊,請參閱 建立 Pod Identity 關聯AWS (主控台)

如果為服務帳戶使用 IAM 角色

  1. 檢視叢集的 OIDC 提供商 URL。使用您的叢集名稱取代 my-cluster

    export cluster_name=my-cluster aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text

    範例輸出如下。

    https://oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>

    如果來自命令的輸出是 None,則請檢閱先決條件

  2. 建立控制器服務帳戶的 IAM 角色。

    1. 將下列內容複製到名為 controller-trust-policy.json 的檔案。使用您的帳戶 ID 取代 <111122223333>。使用前一個步驟傳回的值取代 <EXAMPLED539D4633E53DE1B71EXAMPLE><region-code>

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws: iam::<111122223333>:oidc-provider/oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com", "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-controller-sa" } } } ] }
    2. 建立角色。

      export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_role_name \ --assume-role-policy-document file://"controller-trust-policy.json"
  3. 將所需的 AWS 受管政策連接至控制器角色。

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name
  4. 建立節點服務帳戶的 IAM 角色。

    1. 將下列內容複製到名為 node-trust-policy.json 的檔案。使用您的帳戶 ID 取代 <111122223333>。將 <EXAMPLED539D4633E53DE1B71EXAMPLE>和 取代<region-code>為步驟 1 中傳回的值。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws: iam::<111122223333>:oidc-provider/oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-node-sa", "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com" } } } ] }
    2. 建立角色。

      export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"node-trust-policy.json"
  5. 將所需的 AWS 受管政策連接至節點角色。

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name
注意

AmazonS3ReadOnlyAccess 政策會授予所有 S3 儲存貯體的讀取存取權。若要限制對特定儲存貯體的存取,您可以將其分離,並以標籤型內嵌政策取代。如需詳細資訊,請參閱 GitHub 上的 Amazon EFS CSI 驅動程式 IAM 政策文件

步驟 2:取得 Amazon EFS CSI 驅動程式

我們建議您透過 Amazon EKS 附加元件安裝 Amazon EFS CSI 驅動程式。若要將 Amazon EKS 附加元件新增至叢集,請參閱 建立 Amazon EKS 附加元件。如需附加元件的詳細資訊,請參閱 Amazon EKS 附加元件。如果您無法使用 Amazon EKS 附加元件,我們建議您提交有關為何無法存取容器藍圖 GitHub 儲存庫的問題。

重要

將 Amazon EFS 驅動程式新增為 Amazon EKS 附加元件之前,請確認您的叢集上並未安裝自我管理的驅動程式版本。若是如此,請參閱 GitHub 上解除安裝 Amazon EFS CSI 驅動程式

或者,如果您想要 Amazon EFS CSI 驅動程式的自我管理安裝,請參閱 GitHub 上的安裝

步驟 3:建立 Amazon S3 檔案系統

若要建立 Amazon S3 檔案系統,請參閱在 GitHub 上為 Amazon EKS 建立 Amazon S3 檔案系統。 GitHub

步驟 4:部署範例應用程式

您可以部署各種範例應用程式,再視需要進行修改。如需詳細資訊,請參閱 GitHub 上的範例