

 **協助改進此頁面** 

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

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

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

# 部署適用於 Amazon S3 的掛載點驅動程式
<a name="s3-csi-create"></a>

使用[適用於 Amazon S3 的掛載點容器儲存介面 (CSI) 驅動程式](https://github.com/awslabs/mountpoint-s3-csi-driver)，您的 Kubernetes 應用程式可以透過檔案系統介面存取 Amazon S3 物件，在不變更任何應用程式碼的情況下實現高彙總輸送量。

此程序將向您展示如何部署[適用於 Amazon S3 的掛載點 CSI Amazon EKS 驅動程式](s3-csi.md)。請先檢閱[考量事項](s3-csi.md#s3-csi-considerations)再繼續操作。

## 先決條件
<a name="s3-csi-prereqs"></a>
+ 叢集的現有 AWS Identity and Access Management (IAM) OpenID Connect (OIDC) 提供者。若要判定您是否已經擁有一個，或是要建立一個，請參閱 [為您的叢集建立 IAM OIDC 身分提供者](enable-iam-roles-for-service-accounts.md)。
+ 在您的裝置或 AWS CloudShell 上安裝和設定 CLI AWS 的 2.12.3 版或更新版本。
+ `kubectl` 命令列工具安裝在您的裝置或 AWS CloudShell 上。版本可以與您的叢集 Kubernetes 版本相同，或是為最多比該版本更舊一版或更新一版的次要版本。例如，如果您的叢集版本為 `1.29`，則可以搭配使用 `kubectl` `1.28`、`1.29` 或 `1.30` 版。若要安裝或升級 `kubectl`，請參閱 [設定 `kubectl` 和 `eksctl`](install-kubectl.md)。

## 步驟 1：建立 IAM 政策
<a name="s3-create-iam-policy"></a>

適用於 Amazon S3 的掛載點 CSI 驅動程式需要 Amazon S3 許可才能與檔案系統互動。此節將介紹如何建立可授予必要許可的 IAM 政策。

下列範例政策遵循掛載點的 IAM 許可建議。或者，您可以使用 AWS 受管政策 [AmazonS3FullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonS3FullAccess$jsonEditor)，但此受管政策授予的許可超過掛載點所需的許可。

若要了解掛載點建議許可的相關詳細資訊，請參閱 GitHub 上的[掛載點 IAM 許可](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md#iam-permissions)。

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

1. 在左側導覽窗格中選擇 **Policies** (政策)。

1. 在**政策**頁面上，選擇**建立政策**。

1. 對於**政策編輯器**，選擇 **JSON**。

1. 在**政策編輯器**下，複製並貼上以下內容：
**重要**  
將 `amzn-s3-demo-bucket1` 取代為您自己 Amazon S3 儲存貯體的名稱。

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
           {
               "Sid": "MountpointFullBucketAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1"
               ]
           },
           {
               "Sid": "MountpointFullObjectAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:AbortMultipartUpload",
                   "s3:DeleteObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket1/*"
               ]
           }
      ]
   }
   ```

   Amazon S3 Express One Zone 儲存類別推出目錄儲存貯體，可使用與一般用途儲存貯體不同的驗證機制。您應使用 `s3express:CreateSession` 動作，而非 `s3:*` 動作。若要了解目錄儲存貯體的相關詳細資訊，請參閱*Amazon S3 使用者指南*中的[目錄儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html)。

   下面介紹了您將用於目錄儲存貯體的最低權限政策範例。

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "s3express:CreateSession",
               "Resource": "arn:aws:s3express:us-west-2:111122223333:bucket/amzn-s3-demo-bucket1--usw2-az1--x-s3"
           }
       ]
   }
   ```

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

1. 在**檢閱與建立**頁面上，為您的政策命名。本範例逐步教學使用的名稱是 `AmazonS3CSIDriverPolicy`。

1. 選擇**建立政策**。

## 步驟 2：建立 IAM 角色
<a name="s3-create-iam-role"></a>

適用於 Amazon S3 的掛載點 CSI 驅動程式需要 Amazon S3 許可才能與檔案系統互動。此節將介紹如何建立 IAM 角色以委派這些許可。如需建立此角色，您可使用以下其中一個工具：
+  [eksctl](#eksctl_s3_store_app_data) 
+  [AWS 管理主控台](#console_s3_store_app_data) 
+  [AWS CLI](#awscli_s3_store_app_data) 

**注意**  
IAM 政策 `AmazonS3CSIDriverPolicy` 於上一節建立。

### eksctl
<a name="eksctl_s3_store_app_data"></a>

 **使用 `eksctl` 建立適用於 Amazon S3 的掛載點 CSI 驅動程式 IAM 角色** 

執行以下命令來建立 IAM 角色和 Kubernetes 服務帳戶。這些命令也會將 `AmazonS3CSIDriverPolicy` IAM 政策連接至角色、使用 IAM 角色 Amazon Resource Name (ARN) 標註 Kubernetes 服務帳戶 (`s3-csi-controller-sa`)，並將 Kubernetes 服務帳戶名稱新增至 IAM 角色的信任政策。

```
CLUSTER_NAME=my-cluster
REGION=region-code
ROLE_NAME=AmazonEKS_S3_CSI_DriverRole
POLICY_ARN=AmazonEKS_S3_CSI_DriverRole_ARN
eksctl create iamserviceaccount \
    --name s3-csi-driver-sa \
    --namespace kube-system \
    --cluster $CLUSTER_NAME \
    --attach-policy-arn $POLICY_ARN \
    --approve \
    --role-name $ROLE_NAME \
    --region $REGION \
    --role-only
```

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

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

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

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

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

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

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

      若 URL 未顯示，則檢閱[先決條件](#s3-csi-prereqs)。

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

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

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

   1. 請在**篩選政策**方塊中，輸入 AmazonS3CSIDriverPolicy。
**注意**  
此政策於上一節建立。

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

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

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

   1. 針對**角色名稱**，為您的角色輸入唯一名稱 (例如 AmazonEKS\$1S3\$1CSI\$1DriverRole)。

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

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

1. 建立角色之後，在主控台中選擇角色，以開啟角色進行編輯。

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

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

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

   在上一行的末尾新增一個逗號，然後在上一行之後新增下一行。將 *region-code* 取代為您的叢集所在的 AWS 區域。使用叢集的 OIDC 提供商 ID 取代 *EXAMPLED539D4633E53DE1B71EXAMPLE*。

   ```
   "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:s3-csi-driver-sa"
   ```

1. 確認 `Condition` 運算子已設定為 `"StringEquals"`。

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

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

1. 檢視叢集的 OIDC 提供者 URL。使用您叢集的名稱取代 *my-cluster*。如果來自命令的輸出是 `None`，則請檢閱[先決條件](#s3-csi-prereqs)。

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

   範例輸出如下。

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

1. 建立 IAM 角色，將 Kubernetes 服務帳戶授予 `AssumeRoleWithWebIdentity` 動作。

   1. 將下列內容複製到名為 `aws-s3-csi-driver-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.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              "StringEquals": {
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:s3-csi-driver-sa",
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
              }
            }
          }
        ]
      }
      ```

   1. 建立角色。您可以將 *AmazonEKS\$1S3\$1CSI\$1DriverRole* 變更為不同的名稱，但如果這樣做，請務必在稍後的步驟中進行變更。

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

1. 使用以下命令將先前建立的 IAM 政策連接至角色。

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws: iam::aws:policy/AmazonS3CSIDriverPolicy \
     --role-name AmazonEKS_S3_CSI_DriverRole
   ```
**注意**  
IAM 政策 `AmazonS3CSIDriverPolicy` 於上一節建立。

1. 如果您要將驅動程式安裝為 Amazon EKS 附加元件，請略過此步驟。若為驅動程式的自我管理安裝，請建立使用您所建立的 IAM 角色之 ARN 予以註釋的 Kubernetes 服務帳戶。

   1. 將下列內容儲存到名為 `mountpoint-s3-service-account.yaml` 的檔案中。使用您的帳戶 ID 取代 *111122223333*。

      ```
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        labels:
          app.kubernetes.io/name: aws-mountpoint-s3-csi-driver
        name: mountpoint-s3-csi-controller-sa
        namespace: kube-system
        annotations:
          eks.amazonaws.com/role-arn: arn:aws: iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
      ```

   1. 在您的叢集上建立 Kubernetes 服務帳戶。Kubernetes 服務帳戶 (`mountpoint-s3-csi-controller-sa`) 使用您建立的名稱為 *AmazonEKS\$1S3\$1CSI\$1DriverRole* 的 IAM 角色進行註解。

      ```
      kubectl apply -f mountpoint-s3-service-account.yaml
      ```
**注意**  
當您在此程序中部署外掛程式時，其會建立並設定為使用名為 `s3-csi-driver-sa` 的服務帳戶。

## 步驟 3：安裝適用於 Amazon S3 的掛載點 CSI 驅動程式
<a name="s3-install-driver"></a>

您可透過 Amazon EKS 附加元件安裝適用於 Amazon S3 的掛載點 CSI 驅動程式。您可使用下面的工具，新增附加元件至您的叢集：
+  [eksctl](#eksctl_s3_add_store_app_data) 
+  [AWS 管理主控台](#console_s3_add_store_app_data) 
+  [AWS CLI](#awscli_s3_add_store_app_data) 

或者以自我管理安裝的方式，安裝適用於 Amazon S3 的掛載點 CSI 驅動程式。若要了解執行自我管理安裝的說明，請參閱 GitHub 上的[安裝](https://github.com/awslabs/mountpoint-s3-csi-driver/blob/main/docs/install.md#deploy-driver)。

從 `v1.8.0` 開始，您可設定能夠容忍 CSI 驅動程式 Pod 的污點。若要這樣做，請指定一組自訂的污點，以使用 來容忍`node.tolerations`或容忍所有污點`node.tolerateAllTaints`。如需詳細資訊，請參閱 Kubernetes 文件中的[污點和容差](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/)。

### eksctl
<a name="eksctl_s3_add_store_app_data"></a>

 **使用 `eksctl` 來新增 Amazon S3 CSI 附加元件** 

執行下列命令。使用您的叢集名稱取代 *my-cluster*、使用您的帳戶 ID 取代 *111122223333*，再以[先前建立的 IAM 角色](#s3-create-iam-role)名稱取代 *AmazonEKS\$1S3\$1CSI\$1DriverRole*。

```
eksctl create addon --name aws-mountpoint-s3-csi-driver --cluster my-cluster \
  --service-account-role-arn arn:aws: iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole --force
```

如果您移除 *--force* 選項，且任何 Amazon EKS 附加元件設定與現有設定衝突，然後更新 Amazon EKS 附加元件失敗，則您會收到錯誤訊息以協助您解決衝突。指定此選項之前，請確定 Amazon EKS 附加元件未管理您需要管理的設定，因為這些設定會被此選項覆寫。如需有關此設定之其他選項的詳細資訊，請參閱 `eksctl` 文件中的 [Addons](https://eksctl.io/usage/addons/) (附加元件)。如需有關 Amazon EKS Kubernetes 欄位管理的詳細資訊，請參閱 [確定您可為 Amazon EKS 附加元件自訂的欄位](kubernetes-field-management.md)。

您可透過組態檔案來自訂 `eksctl`。如需詳細資訊，請參閱 `eksctl` 文件中的[使用組態值](https://eksctl.io/usage/addons/#working-with-configuration-values)。以下範例說明了如何容忍所有污點。

```
# config.yaml
...

addons:
- name: aws-mountpoint-s3-csi-driver
  serviceAccountRoleARN: arn:aws: iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
  configurationValues: |-
    node:
      tolerateAllTaints: true
```

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

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

1. 在左側導覽窗格中選擇**叢集**。

1. 選擇要為其設定適用於 Amazon S3 的掛載點 CSI 附加元件的叢集名稱。

1. 選擇**附加元件**索引標籤。

1. 選擇**取得更多附加元件**。

1. 在**選取附加元件**頁面上，執行下列動作：

   1. 在 **Amazon EKS-外掛程式**區段中，選取**適用於 Amazon S3 的掛載點 CSI 驅動程式**核取方塊。

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

1. 在**設定選取的附加元件設定**頁面上，執行以下操作：

   1. 選取您要使用的**版本**。

   1. 針對**選取 IAM 角色**，選取已連接適用於 Amazon S3 的掛載點 CSI 驅動程式 IAM 政策的 IAM 角色名稱。

   1. (選用) 展開**選用的組態設定**之後，更新**衝突解決方法**。如果您選取**覆寫**，就能使用 Amazon EKS 附加元件的設定來覆寫現有附加元件的一種或多種設定。若未啟用此選項，而且有設定與現有設定發生衝突，則操作會失敗。您可以使用產生的錯誤訊息對此衝突進行疑難排解。在選取此選項之前，請確認 Amazon EKS 附加元件未管理您需要自我管理的設定。

   1. (選用) 展開**選用的組態設定**之後，在**組態值**欄位中設定容差。

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

1. 在**檢閱並新增**頁面上，選擇**建立**。附加元件安裝完成後，您會看到已安裝的附加元件。

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

 **使用 CLI 新增 Amazon S3 CSI AWS 附加元件的掛載點** 

執行下列命令。使用您的叢集名稱取代 *my-cluster*、使用您的帳戶 ID 取代 *111122223333*，再以先前建立的角色名稱取代 *AmazonEKS\$1S3\$1CSI\$1DriverRole*。

```
aws eks create-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver \
  --service-account-role-arn arn:aws: iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
```

您可使用 `--configuration-values` 標誌來自訂命令。以下替代範例說明了如何容忍所有污點。

```
aws eks create-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver \
  --service-account-role-arn arn:aws: iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole \
  --configuration-values '{"node":{"tolerateAllTaints":true}}'
```

## 步驟 4：設定適用於 Amazon S3 的掛載點
<a name="s3-configure-mountpoint"></a>

在大多數情況下，您只能使用儲存貯體名稱來設定適用於 Amazon S3 的掛載點。若要了解設定適用於 Amazon S3 的掛載點的相關說明，請參閱 GitHub 上的[設定適用於 Amazon S3 的掛載點](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md)。

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

您可以將靜態佈建部署到現有 Amazon S3 儲存貯體上的驅動程式。如需詳細資訊，請參閱 GitHub 上的[靜態佈建](https://github.com/awslabs/mountpoint-s3-csi-driver/blob/main/examples/kubernetes/static_provisioning/README.md)。