使用 Amazon S3 CSI 驅動程式的掛載點存取 Amazon S3 物件 - Amazon EKS

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

使用 Amazon S3 CSI 驅動程式的掛載點存取 Amazon S3 物件

透過 Amazon S3 容器儲存介面 (CSI) 驅動程式的掛載點,您的 Kubernetes 應用程式可以透過檔案系統介面存取 Amazon S3 物件,在不變更任何應用程式程式碼的情況下實現高彙總輸送量。以 Amazon S3 掛載點為基礎,CSI 驅動程式會以磁碟區的形式呈現 Amazon S3 儲存貯體,可供 Amazon EKS 中的容器存取並自我管理 Kubernetes 叢集。本主題說明如何部署 Mountpoint 適用於 Amazon S3 CSI 驅動程式至您的 Amazon EKS 叢集。

考量事項

  • 所以此 Mountpoint for Amazon S3 CSI 驅動程式目前與 Windows 型容器映像不相容。

  • 所以此 Mountpoint for Amazon S3 CSI 驅動程式不支援 AWS Fargate。不過,在 Amazon EC2 中執行的容器 (使用 Amazon EKS 或自訂 Kubernetes 安裝)。

  • 所以此 Mountpoint for Amazon S3 CSI 驅動程式僅支援靜態佈建。不支援動態佈建或建立新儲存貯體。

    注意

    靜態佈建是指使用在 PersistentVolume 物件的 bucketName 中指定為 的現有 Amazon S3 儲存貯volumeAttributes體。如需詳細資訊,請參閱 上的靜態佈建 GitHub.

  • 使用 掛載的磁碟區 Mountpoint for Amazon S3 CSI 驅動程式不支援所有 POSIX 檔案系統功能。如需檔案系統行為的詳細資訊,請參閱 上的 Amazon S3 檔案系統行為掛載點 GitHub.

必要條件

  • 現有的 AWS Identity and Access Management (IAM) OpenID Connect (OIDC) 叢集的供應商。若要判定您是否已經擁有一個,或是要建立一個,請參閱 建立 IAM OIDC 叢集的 提供者

  • 在您的裝置或 AWS CLI 上安裝和設定 2.12.3 版或更新版本的 AWS CloudShell。

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

建立 IAM 政策

所以此 Mountpoint 對於 Amazon S3 CSI 驅動程式, 需要 Amazon S3 許可才能與您的檔案系統互動。本節說明如何建立授予必要許可的 IAM 政策。

下列範例政策遵循 的 IAM 許可建議 Mountpoint。 或者,您可以使用 AWS 受管政策 AmazonS3FullAccess,但此受管政策授予的許可超過 所需的許可 Mountpoint.

如需 的建議許可的詳細資訊 Mountpoint,請參閱 上的掛載點 IAM 許可 GitHub.

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

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

  3. 政策頁面上,選擇建立政策

  4. 針對政策編輯器,選擇 JSON

  5. 政策編輯器下,複製並貼上以下內容:

    重要

    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 儲存類別一起推出的目錄儲存貯體,使用與一般用途儲存貯體不同的身分驗證機制。您應該使用 s3:*動作,而不是使用 s3express:CreateSession動作。如需有關目錄儲存貯體的資訊,請參閱 Amazon S3 使用者指南中的目錄儲存貯體。

    以下是您要用於目錄儲存貯體的最低權限政策範例。

    { "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" } ] }
  6. 選擇 Next (下一步)

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

  8. 選擇 建立政策

建立 IAM 角色

所以此 Mountpoint 對於 Amazon S3 CSI 驅動程式, 需要 Amazon S3 許可才能與您的檔案系統互動。本節說明如何建立 IAM 角色來委派這些許可。若要建立此角色,您可以使用下列其中一個工具:

注意

IAM 政策AmazonS3CSIDriverPolicy是在上一節中建立的。

eksctl

若要建立您的 Mountpoint 適用於 的 Amazon S3 CSI 驅動程式 IAM 角色 eksctl

若要建立 IAM 角色和 Kubernetes 服務帳戶,請執行下列命令。這些命令也會將 AmazonS3CSIDriverPolicy IAM 政策連接至角色,為 Kubernetes 服務帳戶 (s3-csi-controller-sa) 搭配 IAM 角色的 Amazon Resource Name (ARN),並新增 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 Management Console

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

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

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

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

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

    2. 對於身分提供者,選擇 OpenID Connect 叢集的提供者 URL (如 Amazon EKS 概觀所示)。

      如果沒有顯示 URLs,請檢閱先決條件

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

    4. 選擇 Next (下一步)

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

    1. 篩選政策方塊中,輸入 AmazonS3CSIDriverPolicy.

      注意

      此政策於上一節建立。

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

    3. 選擇 Next (下一步)

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

    1. 針對角色名稱,輸入角色的唯一名稱,例如 AmazonEKS_S3_CSI_DriverRole.

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

    3. 選擇建立角色

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

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

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

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

    在上一行的末尾新增一個逗號,然後在上一行之後新增下一行。Replace (取代) region-code 叢集所在的 AWS 區域。Replace (取代) EXAMPLED539D4633E53DE1B71EXAMPLE 使用叢集的 OIDC 提供者 ID。

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:s3-csi-*"
  10. Condition 運算子從 "StringEquals" 變更為 "StringLike"

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

AWS CLI

  1. 檢視叢集的 OIDC 提供者 URL。Replace (取代) my-cluster 您的叢集名稱。如果來自命令的輸出是 None,則請檢閱先決條件

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

    範例輸出如下。

    https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
  2. 建立 IAM 角色,授予 Kubernetes 服務帳戶 AssumeRoleWithWebIdentity動作。

    1. 將下列內容複製到名為 aws-s3-csi-driver-trust-policy.json 的檔案。Replace (取代) 111122223333 使用您的帳戶 ID。Replace (取代) 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": { "StringLike": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:s3-csi-*", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" } } } ] }
    2. 建立角色。您可以變更 AmazonEKS_S3_CSI_DriverRole 不同的名稱,但如果這樣做,請務必在稍後的步驟中變更它。

      aws iam create-role \ --role-name AmazonEKS_S3_CSI_DriverRole \ --assume-role-policy-document file://"aws-s3-csi-driver-trust-policy.json"
  3. 使用下列命令將先前建立的 IAM 政策連接至角色。

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonS3CSIDriverPolicy \ --role-name AmazonEKS_S3_CSI_DriverRole
    注意

    IAM 政策AmazonS3CSIDriverPolicy是在上一節中建立的。

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

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

      --- 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
    2. 建立 Kubernetes 叢集上的 服務帳戶。所以此 Kubernetes 服務帳戶 (mountpoint-s3-csi-controller-sa) 會以您建立的 IAM 角色加上註釋 AmazonEKS_S3_CSI_DriverRole.

      kubectl apply -f mountpoint-s3-service-account.yaml
      注意

      當您在此程序中部署外掛程式時,其會建立並設定為使用名為 s3-csi-driver-sa 的服務帳戶。

安裝 Mountpoint 適用於 Amazon S3 CSI 驅動程式

您可以安裝 Mountpoint 適用於透過 Amazon Word 附加元件的 Amazon S3 EKS 驅動程式。 CSI您可以使用下列工具將附加元件新增至叢集:

或者,您可以安裝 Mountpoint 適用於 Amazon S3 CSI 驅動程式作為自我管理的安裝。如需執行自我管理安裝的指示,請參閱上安裝 GitHub.

從 開始v1.8.0,您可以為 CSI 驅動程式的 設定可容忍的污點 Pods。 若要執行此操作,請指定一組自訂的污點,以搭配 來容忍node.tolerations,或使用 來清除所有污點node.tolerateAllTaints。如需詳細資訊,請參閱中的提示和容錯 Kubernetes 文件中)。

eksctl

若要使用 新增 Amazon S3 CSI 附加元件 eksctl

執行下列命令。Replace (取代) my-cluster 使用叢集的名稱 111122223333 使用您的帳戶 ID,以及 AmazonEKS_S3_CSI_DriverRole 具有先前建立的 IAM 角色名稱。

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 (附加元件)。如需 Amazon EKS 的詳細資訊 Kubernetes 欄位管理,請參閱 判斷您可以自訂 Amazon EKS 附加元件的欄位

您可以透過eksctl組態檔案自訂 。如需詳細資訊,請參閱 文件中的使用組態值eksctl。下列範例顯示如何容忍所有污點。

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

AWS Management Console

  1. 開啟 Amazon EKS 主控台

  2. 在左側導覽窗格中選擇 Clusters (叢集)。

  3. 選擇您要設定 的叢集名稱 Mountpoint 適用於 Amazon S3 CSI 附加元件。

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

  5. 選擇取得更多附加元件

  6. 選取附加元件頁面上,執行下列動作:

    1. Amazon EKS-addons 區段中,選取 Mountpoint 適用於 Amazon S3 CSI 驅動程式核取方塊。

    2. 選擇 Next (下一步)

  7. 設定選取的附加元件設定頁面上,執行以下操作:

    1. 選取您要使用的版本

    2. 針對選取 IAM 角色,選取您連接 的 IAM 角色名稱 Mountpoint 適用於 Amazon S3 CSI 驅動程式 IAM 政策。

    3. (選用) 展開選用組態設定後,更新衝突解決方法。如果您選擇覆寫,可使用 Amazon EKS 附加元件設定覆寫現有附加元件的一或多個設定。如果您未啟用此選項,且與現有設定發生衝突,則操作會失敗。您可以使用產生的錯誤訊息對此衝突進行疑難排解。選擇此選項之前,請確定 Amazon EKS 附加元件不會管理自我管理所需的設定。

    4. (選用) 在展開選用組態設定之後,在組態值欄位中設定容錯。

    5. 選擇 Next (下一步)

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

AWS CLI

若要新增 Mountpoint 適用於使用 CSI 的 Amazon S3 AWS CLI 附加元件

執行下列命令。Replace (取代) my-cluster 使用叢集的名稱 111122223333 使用您的帳戶 ID,以及 AmazonEKS_S3_CSI_DriverRole 使用先前建立的角色名稱。

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}}'

設定 Mountpoint 適用於 Amazon S3

在大多數情況下,您可以設定 Mountpoint 僅具有儲存貯體名稱的 Amazon S3。如需設定 的指示 Mountpoint 對於 Amazon S3,請參閱在 上設定 Amazon S3 的掛載點 GitHub.

部署範例應用程式

您可以將靜態佈建部署到現有 Amazon S3 儲存貯體上的驅動程式。如需詳細資訊,請參閱 上的靜態佈建 GitHub.

Remove (移除) Mountpoint 適用於 Amazon S3 CSI 驅動程式

您有兩個移除 Amazon EKS 附加元件的選項。

  • 在叢集上保留附加元件軟體 – 此選項會移除任何設定的 Amazon EKS 管理。它也會移除 Amazon EKS 通知您更新,並在您啟動更新後自動更新 Amazon EKS 附加元件的功能。不過,該選項會保留您叢集上的附加元件軟體。此選項可讓附加元件成為自我管理的安裝,而不是 Amazon EKS 附加元件。使用此選項時,附加元件沒有停機時間。本程序中的命令使用此選項。

  • 完全從叢集移除附加元件軟體 – 僅當叢集上沒有依賴於 的資源時,建議您從叢集中移除 Amazon EKS 附加元件。若要執行此選項,請從您在此程序中使用的命令刪除 --preserve

如果附加元件具有與其相關聯的 IAM 帳戶,則不會移除 IAM 帳戶。

您可以使用下列工具來移除 Amazon S3 CSI 附加元件:

eksctl

使用 移除 Amazon S3 CSI 附加元件 eksctl

Replace (取代) my-cluster 使用叢集的名稱,然後執行下列命令。

eksctl delete addon --cluster my-cluster --name aws-mountpoint-s3-csi-driver --preserve

AWS Management Console

  1. 開啟 Amazon EKS 主控台

  2. 在左側導覽窗格中選擇 Clusters (叢集)。

  3. 選擇您要移除 Amazon EBS CSI 附加元件的叢集名稱。

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

  5. 選擇 Mountpoint 適用於 Amazon S3 CSI 驅動程式

  6. 選擇移除

  7. 移除: aws-mountpoint-s3-csi-driver 確認對話方塊中,執行下列動作:

    1. 如果您希望 Amazon EKS 停止管理附加元件的設定,請選取保留叢集。若要在叢集上保留附加元件軟體,請執行此動作。如此一來,您就可以自行管理附加元件的所有設定。

    2. 輸入 aws-mountpoint-s3-csi-driver

    3. 選取 Remove (移除)。

AWS CLI

使用 CSI 移除 Amazon S3 AWS CLI 附加元件

Replace (取代) my-cluster 使用叢集的名稱,然後執行下列命令。

aws eks delete-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver --preserve