使用 Amazon EBS 存放Kubernetes磁碟區 - Amazon EKS

協助改善此頁面

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

想要為此使用者指南做出貢獻? 選擇 GitHub 上的編輯此頁面連結,該連結位於每個頁面的右窗格中。您的貢獻將幫助我們的使用者指南更適合每個人。

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

使用 Amazon EBS 存放Kubernetes磁碟區

注意

新功能:Amazon EKS Auto Mode 會自動執行區塊儲存的例行任務。了解如何 將具狀態工作負載範例部署至 EKS Auto 模式

Amazon Elastic Block Store (Amazon EBS) 容器儲存介面 (CSI) 驅動程式會管理 Amazon EBS 磁碟區的生命週期,做為您建立之 Kubernetes 磁碟區的儲存體。Amazon EBS CSI 驅動程式會為這些類型的磁碟區建立 Amazon EBS Kubernetes磁碟區:一般暫時性磁碟區持久性磁碟區

考量事項

  • 您不需要在 EKS Auto Mode 叢集上安裝 Amazon EBS CSI 控制器。

  • 您無法將 Amazon EBS 磁碟區掛載至 Fargate Pods。

  • 您可以在 Fargate 節點上執行 Amazon EBS CSI 控制器,但是 Amazon EBS CSI 節點 DaemonSet 僅能在 Amazon EC2 執行個體上執行。

  • Amazon EBS 磁碟區和 Amazon EBS CSI 驅動程式與 Amazon EKS 混合節點不相容。

  • 將提供最新附加元件版本和一個先前版本的支援。最新版本中發現的錯誤或漏洞將回溯至新次要版本中的先前版本。

重要

若要使用 Amazon EBS CSI 驅動程式的快照功能,您必須先安裝 CSI 快照控制器。如需詳細資訊,請參閱啟用 CSI 磁碟區的快照功能

必要條件

步驟 1:建立 IAM 角色

Amazon EBS CSI 外掛程式需要 IAM 許可,才能代表您呼叫 AWS APIs。如果您不執行這些步驟,嘗試安裝附加元件並執行 kubectl describe pvc時,將會顯示 failed to provision volume with StorageClass並顯示could not create volume in EC2: UnauthorizedOperation錯誤。如需詳細資訊,請參閱 GitHub 上的設定驅動程式許可

注意

Pods 可以存取指派給 IAM 角色的許可,除非您封鎖對 IMDS 的存取。如需詳細資訊,請參閱使用最佳實務保護 Amazon EKS 叢集

下列程序說明如何建立 IAM 角色,並將 AWS 受管政策連接至該角色。若要實作此程序,您可以使用下列其中一個工具:

注意

本程序中的特定步驟是針對將驅動程式用作 Amazon EKS 附加元件而編寫。需要執行不同的步驟,才能將驅動程式用作自我管理附加元件。如需詳細資訊,請參閱 GitHub 上的設定驅動程式許可

eksctl

  1. 建立 IAM 角色並連接政策。 會 AWS 維護 AWS 受管政策,或者您可以建立自己的自訂政策。您可以建立 IAM 角色,並使用下列命令連接 AWS 受管政策。使用您叢集的名稱取代 my-cluster。命令會部署可建立 IAM 角色並將 IAM 政策連接至其中的 AWS CloudFormation 堆疊。

    eksctl create iamserviceaccount \ --name ebs-csi-controller-sa \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --role-only \ --attach-policy-arn arn:aws: iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --approve
  2. 如果在 Amazon EBS 磁碟區上使用自訂 KMS 金鑰進行加密,請視需要自訂 IAM 角色。例如,請執行以下操作:

    1. 複製以下程式碼並貼到新 kms-key-for-encryption-on-ebs.json 檔案中。將 custom-key-arn 取代為自訂 KMS 金鑰 ARN

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    2. 建立政策。您可以將 KMS_Key_For_Encryption_On_EBS_Policy 變更為不同的名稱。但是,如果您這樣做,請務必在稍後的步驟中也進行變更。

      aws iam create-policy \ --policy-name KMS_Key_For_Encryption_On_EBS_Policy \ --policy-document file://kms-key-for-encryption-on-ebs.json
    3. 使用以下命令將 IAM 政策連接至角色。使用您的帳戶 ID 取代 111122223333

      aws iam attach-role-policy \ --policy-arn arn:aws: iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \ --role-name AmazonEKS_EBS_CSI_DriverRole

AWS Management Console

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

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

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

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

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

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

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

    4. 選擇 Next (下一步)

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

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

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

    3. 選擇 Next (下一步)

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

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

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

    3. 選擇建立角色

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

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

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

    "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:ebs-csi-controller-sa"
  10. 選擇 Update policy (更新政策) 以完成操作。

  11. 如果在 Amazon EBS 磁碟區上使用自訂 KMS 金鑰進行加密,請視需要自訂 IAM 角色。例如,請執行以下操作:

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

    2. Policies (政策) 頁面上,選擇 Create a policy (建立政策)。

    3. 建立政策頁面上,選擇 JSON 標籤。

    4. 將下列程式碼複製並貼到編輯器中,以自訂 KMS 金鑰 ARN 取代 custom-key-arn

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    5. 選擇下一步:標籤

    6. Add tags (Optional) (新增標籤 (選用)) 頁面上,選擇 Next: Review (下一步:檢閱)。

    7. 針對名稱,輸入政策的唯一名稱 (例如 KMS_Key_For_Encryption_On_EBS_Policy)。

    8. 選擇 建立政策

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

    10. 在主控台中選擇 AmazonEKS_EBS_CSI_DriverRole 以開啟它進行編輯。

    11. 新增許可下拉式清單中,選擇連接政策

    12. 篩選政策方塊中,輸入 KMS_Key_For_Encryption_On_EBS_Policy

    13. 選取搜尋中傳回的 KMS_Key_For_Encryption_On_EBS_Policy 左側的核取方塊。

    14. 選擇連接政策

AWS CLI

  1. 檢視叢集的 OIDC 提供者 URL。使用您的叢集名稱取代 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 角色,授予其 AssumeRoleWithWebIdentity 動作。

    1. 將下列內容複製到名為 的檔案aws-ebs-csi-driver-trust-policy.json。使用您的帳戶 ID 取代 111122223333。將 EXAMPLED539D4633E53DE1B71EXAMPLEregion-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:ebs-csi-controller-sa" } } } ] }
    2. 建立角色。您可以將 AmazonEKS_EBS_CSI_DriverRole 變更為不同的名稱。若要變更名稱,請務必在稍後的步驟中進行變更。

      aws iam create-role \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --assume-role-policy-document file://"aws-ebs-csi-driver-trust-policy.json"
  3. 連接政策。 會 AWS 維護 AWS 受管政策,或者您可以建立自己的自訂政策。使用下列命令將 AWS 受管政策連接至角色。

    aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --role-name AmazonEKS_EBS_CSI_DriverRole
  4. 如果在 Amazon EBS 磁碟區上使用自訂 KMS 金鑰進行加密,請視需要自訂 IAM 角色。例如,請執行以下操作:

    1. 複製以下程式碼並貼到新 kms-key-for-encryption-on-ebs.json 檔案中。將 custom-key-arn 取代為自訂 KMS 金鑰 ARN

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    2. 建立政策。您可以將 KMS_Key_For_Encryption_On_EBS_Policy 變更為不同的名稱。但是,如果您這樣做,請務必在稍後的步驟中也進行變更。

      aws iam create-policy \ --policy-name KMS_Key_For_Encryption_On_EBS_Policy \ --policy-document file://kms-key-for-encryption-on-ebs.json
    3. 使用以下命令將 IAM 政策連接至角色。使用您的帳戶 ID 取代 111122223333

      aws iam attach-role-policy \ --policy-arn arn:aws: iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \ --role-name AmazonEKS_EBS_CSI_DriverRole

現在您已建立 Amazon EBS CSI 驅動程式 IAM 角色,您可以繼續下一節。當您使用此 IAM 角色部署附加元件時,它會建立並設定為使用名為 的服務帳戶ebs-csi-controller-sa。服務帳戶繫結至已指派必要Kubernetes許可Kubernetesclusterrole的 。

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

我們建議您透過 Amazon EKS 附加元件安裝 Amazon EBS CSI 驅動程式,以提高安全性並減少工作量。若要將 Amazon EKS 附加元件新增至叢集,請參閱 建立 Amazon EKS 附加元件。如需附加元件的詳細資訊,請參閱 Amazon EKS 附加元件

重要

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

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

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

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