

 **協助改進此頁面** 

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

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

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

# 透過 Amazon EFS 使用彈性檔案系統儲存
<a name="efs-csi"></a>

 [Amazon Elastic File System](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) (Amazon EFS) 提供無伺服器、完全彈性的檔案儲存功能，讓您無需佈建或管理儲存容量和效能，即可分享檔案資料。[Amazon EFS 容器儲存介面 (CSI) 驅動程式](https://github.com/kubernetes-sigs/aws-efs-csi-driver)允許在 上執行的 Kubernetes 叢集 AWS 將 Amazon EFS 檔案系統掛載為持久性磁碟區。本主題旨在說明如何將 Amazon EFS CSI 驅動程式部署到您的 Amazon EKS 叢集。

## 考量事項
<a name="efs-csi-considerations"></a>
+ Amazon EFS CSI 驅動程式與以 Windows 為基礎的容器映像不相容。
+ 您不能將[動態持續性磁碟區佈建](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/efs/dynamic_provisioning/README.md)與 Fargate 節點搭配使用，但可以使用[靜態佈建](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/efs/static_provisioning/README.md)。
+  [動態佈建](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/efs/dynamic_provisioning/README.md)需要 [1.2](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-1.x.md#v12) 或更新版本的驅動程序。您可以在任何支援的 Amazon EKS 叢集版本上，使用版本 `1.1` 驅動程式[靜態佈建](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/efs/static_provisioning/README.md)持續性磁碟區 (請參閱 [Amazon EKS 支援的版本](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html))。
+ 此驅動程式的 [1.3.2](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-1.x.md#v132) 或更新版本支援 Arm64 架構，包括基於 Amazon EC2 Graviton 的執行個體。
+ 此驅動程式的 [1.4.2](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-1.x.md#v142) 版或更新版本皆支援使用 FIPS 掛載檔案系統。
+ 記下 Amazon EFS 的資源配額。如需詳細資訊，請參閱 [Amazon EFS 配額](https://docs.aws.amazon.com/efs/latest/ug/limits.html)。
+ 從 [2.0.0](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/CHANGELOG-2.x.md#v200) 版開始，此驅動程式會從使用 `stunnel` 切換至 `efs-proxy` 以進行 TLS 連線。當使用 `efs-proxy` 時，它將開啟的執行緒數量等於其執行節點的核心數加一。
+ Amazon EFS CSI 驅動程式與 Amazon EKS 混合節點不相容。

## 先決條件
<a name="efs-csi-prereqs"></a>
+ Amazon EFS CSI 驅動程式需要 AWS Identity and Access Management (IAM) 許可。
  +  AWS 建議使用 EKS Pod 身分。如需詳細資訊，請參閱[設定 EKS Pod 身分識別的概觀](pod-identities.md#pod-id-setup-overview)。
  + 如需有關服務帳戶的 IAM 角色，以及為叢集設定 IAM OpenID Connect (OIDC) 供應商的資訊，請參閱 [為您的叢集建立 IAM OIDC 身分提供者](enable-iam-roles-for-service-accounts.md)。
+ 在您的裝置或 AWS CloudShell 上安裝和設定的 AWS 命令列界面 (AWS CLI) 版本 `1.27.160` `2.12.3`或更新版本。若要檢查您目前的版本，請使用 `aws --version | cut -d / -f2 | cut -d ' ' -f1`。適用於 macOS 的 `yum`、 `apt-get`或 Homebrew 等套件管理員通常是最新版本 CLI AWS 後面的幾個版本。若要安裝最新版本，請參閱《 * AWS 命令列界面使用者指南*》中的使用 aws 設定[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 和快速組態。 [https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)在 AWS CloudShell 中安裝的 AWS CLI 版本也可能是最新版本後面的幾個版本。若要更新它，請參閱《CloudShell [AWS 使用者指南》中的將 CLI 安裝到您的主目錄](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)。 * AWS CloudShell *
+ `kubectl` 命令列工具安裝在您的裝置或 AWS CloudShell 上。版本可以與您的叢集 Kubernetes 版本相同，或是為最多比該版本更舊一版或更新一版的次要版本。例如，如果您的叢集版本為 `1.29`，則可以搭配使用 `kubectl` `1.28`、`1.29` 或 `1.30` 版。若要安裝或升級 `kubectl`，請參閱 [設定 `kubectl` 和 `eksctl`](install-kubectl.md)。

**注意**  
在 Fargate 上執行的 Pod 會自動掛載 Amazon EFS 檔案系統，而無需執行手動驅動程式安裝步驟。

## 步驟 1：建立 IAM 角色
<a name="efs-create-iam-resources"></a>

Amazon EFS CSI 驅動程式需要 IAM 許可才能與檔案系統互動。建立 IAM 角色，並將 ` arn:aws: iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy`受管政策連接至該角色。

**注意**  
如果您想要同時使用 Amazon EFS 和 Amazon S3 檔案系統儲存，您必須同時將 `AmazonEFSCSIDriverPolicy`和 `AmazonS3FilesCSIDriverPolicy`受管政策連接到您的 IAM 角色。如需 Amazon S3 檔案系統儲存體的詳細資訊，請參閱 [搭配 Amazon EFS CSI 驅動程式使用 Amazon S3 檔案系統儲存 EFS](s3files-csi.md)。

若要實作此程序，您可使用下列其中一個工具：
+  [`eksctl`](#eksctl_efs_store_app_data) 
+  [AWS 管理主控台](#console_efs_store_app_data) 
+  [AWS CLI](#awscli_efs_store_app_data) 

**注意**  
本程序中的特定步驟是針對將驅動程式用作 Amazon EKS 附加元件而編寫。如需有關自我管理安裝的詳細資訊，請參閱 GitHub 上的[設定驅動程式許可](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/install.md#set-up-driver-permission)一節。

### `eksctl`
<a name="eksctl_efs_store_app_data"></a>

#### 如果使用 Pod 身分識別
<a name="efs-eksctl-pod-identities"></a>

執行以下命令以使用 `eksctl` 建立 IAM 角色和 Pod 身分識別關聯。使用您的叢集名稱取代 `my-cluster`。也可使用不同名稱取代 `AmazonEKS_EFS_CSI_DriverRole`。

```
export cluster_name=my-cluster
export role_name=AmazonEKS_EFS_CSI_DriverRole
eksctl create podidentityassociation \
    --service-account-name efs-csi-controller-sa \
    --namespace kube-system \
    --cluster $cluster_name \
    --role-name $role_name \
    --permission-policy-arns arn:aws: iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy
```

#### 如果為服務帳戶使用 IAM 角色
<a name="efs-eksctl-irsa"></a>

執行以下命令以使用 `eksctl` 建立 IAM 角色。使用您的叢集名稱取代 `my-cluster`。也可使用不同名稱取代 `AmazonEKS_EFS_CSI_DriverRole`。

```
export cluster_name=my-cluster
export role_name=AmazonEKS_EFS_CSI_DriverRole
eksctl create iamserviceaccount \
    --name efs-csi-controller-sa \
    --namespace kube-system \
    --cluster $cluster_name \
    --role-name $role_name \
    --role-only \
    --attach-policy-arn arn:aws: iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
    --approve
TRUST_POLICY=$(aws iam get-role --output json --role-name $role_name --query 'Role.AssumeRolePolicyDocument' | \
    sed -e 's/efs-csi-controller-sa/efs-csi-*/' -e 's/StringEquals/StringLike/')
aws iam update-assume-role-policy --role-name $role_name --policy-document "$TRUST_POLICY"
```

### AWS 管理主控台
<a name="console_efs_store_app_data"></a>

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

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

1. 在左側導覽窗格中，選擇 **Roles** (角色)。

1. 在 **Roles** (角色) 頁面上，選擇 **Create role** (建立角色)。

1. 在 **Select trusted entity** (選取信任的實體) 頁面上，執行以下作業：

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

      1. 在**信任的實體類型**區段中，選擇** AWS 服務**。

      1. 在**服務或使用案例**下拉式清單中，選擇 **EKS**。

      1. 在**使用案例**區段中，選擇 **EKS - Pod 身分識別**。

      1. 選擇**下一步**。

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

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

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

      1. 針對 **Audience** (對象)，選擇 `sts.amazonaws.com`。

      1. 選擇**下一步**。

1. 在 **Add permissions** (新增許可) 頁面上，執行以下作業：

   1. 在 **Filter policies** (篩選政策) 方塊中，輸入 `AmazonEFSCSIDriverPolicy`。

   1. 勾選在搜尋中傳回的 `AmazonEFSCSIDriverPolicy` 左側的核取方塊。

   1. 選擇**下一步**。

1. 在 **Name, review, and create** (命名、檢閱和建立) 頁面上，執行以下作業：

   1. 針對 **Role name** (角色名稱)，為您的角色輸入唯一名稱 (例如 `AmazonEKS_EFS_CSI_DriverRole`)。

   1. 藉由連接標籤做為鍵值對，在**新增標籤 (選用)** 下將中繼資料新增至角色。如需有關在 IAM 中使用標籤的詳細資訊，請參閱《IAM 使用者指南》**中的[標記 IAM 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)。

   1. 選擇建**立角色**。

1. 建立角色之後：

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

      1. 開啟 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

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

      1. 選擇**存取**索引標籤。

      1. 在 **Pod 身分識別關聯**中，選擇**建立**。

      1. 選擇 **IAM 角色**下拉式清單，然後選取新建立的角色。

      1. 選擇 **Kubernetes 命名空間**欄位，並輸入 `kube-system`。

      1. 選擇 **Kubernetes 服務帳戶**欄位，並輸入 `efs-csi-controller-sa`。

      1. 選擇**建立**。

      1. 如需建立 Pod 身分識別關聯的詳細資訊，請參閱 [建立 Pod Identity 關聯AWS （主控台）](pod-id-association.md#pod-id-association-create)。

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

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

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

      1. 查找與下列行相似的行：

         ```
         "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-*",
         ```

      1. 將 `Condition` 運算子從 `"StringEquals"` 修改為 `"StringLike"`。

      1. 選擇 **Update policy** (更新政策) 以完成操作。

### AWS CLI
<a name="awscli_efs_store_app_data"></a>

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

#### 如果使用 Pod 身分識別
<a name="efs-cli-pod-identities"></a>

1. 建立將 `AssumeRole` 和 `TagSession` 動作授予 `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"
                  ]
              }
          ]
      }
      ```

   1. 建立角色。使用您的叢集名稱取代 `my-cluster`。也可使用不同名稱取代 `AmazonEKS_EFS_CSI_DriverRole`。

      ```
      export cluster_name=my-cluster
      export role_name=AmazonEKS_EFS_CSI_DriverRole
      aws iam create-role \
        --role-name $role_name \
        --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
      ```

1. 使用下列命令將所需的 AWS 受管政策連接至角色。

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws: iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
     --role-name $role_name
   ```

1. 執行下列命令以建立 Pod 身分識別關聯。使用您的帳戶 ID 取代 `<111122223333>`。

   ```
   aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$role_name --namespace kube-system --service-account efs-csi-controller-sa
   ```

1. 如需建立 Pod 身分識別關聯的詳細資訊，請參閱 [建立 Pod Identity 關聯AWS （主控台）](pod-id-association.md#pod-id-association-create)。

#### 如果為服務帳戶使用 IAM 角色
<a name="efs-cli-irsa"></a>

1. 檢視叢集的 OIDC 提供商 URL。使用您的叢集名稱取代 `my-cluster`。也可使用不同名稱取代 `AmazonEKS_EFS_CSI_DriverRole`。

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

   範例輸出如下。

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

   如果來自命令的輸出是 `None`，則請檢閱**先決條件**。

1. 建立授予 `AssumeRoleWithWebIdentity` 動作許可的 IAM 角色。

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

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              "StringLike": {
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:efs-csi-*",
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
              }
            }
          }
        ]
      }
      ```

   1. 建立角色。

      ```
      aws iam create-role \
        --role-name $role_name \
        --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy.json"
      ```

1. 使用下列命令將所需的 AWS 受管政策連接至角色。

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws: iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
     --role-name $role_name
   ```

## 步驟 2：取得 Amazon EFS CSI 驅動程式
<a name="efs-install-driver"></a>

我們建議您透過 Amazon EKS 附加元件安裝 Amazon EFS CSI 驅動程式。若要將 Amazon EKS 附加元件新增至叢集，請參閱 [建立 Amazon EKS 附加元件](creating-an-add-on.md)。如需附加元件的詳細資訊，請參閱 [Amazon EKS 附加元件](eks-add-ons.md)。如果您無法使用 Amazon EKS 附加元件，我們建議您提交有關為何無法存取[容器藍圖 GitHub 儲存庫](https://github.com/aws/containers-roadmap/issues)的問題。

**重要**  
將 Amazon EFS 驅動程式新增為 Amazon EKS 附加元件之前，請確認您的叢集上並未安裝自我管理的驅動程式版本。若是如此，請參閱 GitHub 上[解除安裝 Amazon EFS CSI 驅動程式](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/install.md#uninstalling-the-amazon-efs-csi-driver)。

或者，如果您想要 Amazon EFS CSI 驅動程式的自我管理安裝，請參閱 GitHub 上的[安裝](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/install.md)。

## 步驟 3：建立 Amazon EFS 檔案系統
<a name="efs-create-filesystem"></a>

如需建立 Amazon EFS 檔案系統，請參閱 GitHub 上的[為 Amazon EKS 建立 Amazon EFS 檔案系統](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/docs/efs-create-filesystem.md)。

## 步驟 4：部署範例應用程式
<a name="efs-sample-app"></a>

您可以部署各種範例應用程式，再視需要進行修改。如需詳細資訊，請參閱 GitHub 上的[範例](https://github.com/kubernetes-sigs/aws-efs-csi-driver/tree/master/examples/kubernetes)。