協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
透過 Amazon EFS 使用彈性檔案系統儲存
Amazon Elastic File System (Amazon EFS) 提供無伺服器、完全彈性的檔案儲存功能,讓您無需佈建或管理儲存容量和效能,即可分享檔案資料。Amazon EFS 容器儲存介面 (CSI) 驅動程式
考量事項
-
Amazon EFS CSI 驅動程式與以 Windows 為基礎的容器映像不相容。
-
您不能將動態持續性磁碟區佈建
與 Fargate 節點搭配使用,但可以使用靜態佈建 。 -
動態佈建
需要 1.2 或更新版本的驅動程序。您可以在任何支援的 Amazon EKS 叢集版本上,使用版本 1.1驅動程式靜態佈建持續性磁碟區 (請參閱 Amazon EKS 支援的版本)。 -
此驅動程式的 1.3.2
或更新版本支援 Arm64 架構,包括基於 Amazon EC2 Graviton 的執行個體。 -
此驅動程式的 1.4.2
版或更新版本皆支援使用 FIPS 掛載檔案系統。 -
記下 Amazon EFS 的資源配額。例如,每個 Amazon EFS 檔案系統都有建立 1000 個存取點的配額。如需詳細資訊,請參閱無法變更的 Amazon EFS 資源配額。
-
從 2.0.0
版開始,此驅動程式會從使用 stunnel切換至efs-proxy以進行 TLS 連線。當使用efs-proxy時,它將開啟的執行緒數量等於其執行節點的核心數加一。 -
Amazon EFS CSI 驅動程式與 Amazon EKS 混合節點不相容。
先決條件
-
Amazon EFS CSI 驅動程式需要 AWS Identity and Access Management (IAM) 許可。
-
AWS 建議使用 EKS Pod 身分識別。如需詳細資訊,請參閱 設定 EKS Pod 身分識別的概觀。
-
如需有關服務帳戶的 IAM 角色,以及為叢集設定 IAM OpenID Connect (OIDC) 供應商的資訊,請參閱 為您的叢集建立 IAM OIDC 身分提供者。
-
-
已在裝置或 AWS CloudShell 上安裝和設定 AWS 命令列介面 (AWS CLI) 版本
2.12.3或更新版本,或是版本1.27.160或更新版本。若要檢查您目前的版本,請使用aws --version | cut -d / -f2 | cut -d ' ' -f1。如yum、apt-get或適用於 macOS 的 Homebrew 等套件管理工具通常比最新版本的 AWS CLI 落後數個版本之多。若要安裝最新版本,請參閱《AWS 命令列介面使用者指南》中的安裝與使用 aws configure 的快速組態。AWS CloudShell 中安裝的 AWS CLI 版本也可能比最新版本落後數個版本。若要更新,請參閱《AWS CloudShell 使用者指南》中的安裝 AWS CLI 至您的主目錄。 -
已在裝置或 AWS CloudShell 上安裝
kubectl命令列工具。版本可以與您的叢集 Kubernetes 版本相同,或是為最多比該版本更舊一版或更新一版的次要版本。例如,如果您的叢集版本為1.29,則可以搭配使用kubectl1.28、1.29或1.30版。若要安裝或升級kubectl,請參閱 設定 kubectl 和 eksctl。
注意
在 Fargate 上執行的 Pod 會自動掛載 Amazon EFS 檔案系統,而無需執行手動驅動程式安裝步驟。
步驟 1:建立 IAM 角色
Amazon EFS CSI 驅動程式需要 IAM 許可才能與檔案系統互動。建立 IAM 角色,並將所需的 AWS 受管政策連接到該角色。若要實作此程序,您可使用下列其中一個工具:
注意
本程序中的特定步驟是針對將驅動程式用作 Amazon EKS 附加元件而編寫。如需有關自我管理安裝的詳細資訊,請參閱 GitHub 上的設定驅動程式許可
eksctl
如果使用 Pod 身分識別
執行以下命令以使用 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 角色
執行以下命令以使用 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 管理主控台
執行以下命令以使用 AWS 管理主控台 建立 IAM 角色。
-
前往 https://console.aws.amazon.com/iam/
開啟 IAM 主控台。 -
在左側導覽窗格中,選擇 Roles (角色)。
-
在 Roles (角色) 頁面上,選擇 Create role (建立角色)。
-
在 Select trusted entity (選取信任的實體) 頁面上,執行以下作業:
-
如果使用 EKS Pod 身分識別:
-
在可信實體類型區段中,選擇 AWS 服務。
-
在服務或使用案例下拉式清單中,選擇 EKS。
-
在使用案例區段中,選擇 EKS - Pod 身分識別。
-
選擇下一步。
-
-
如果為服務帳戶使用 IAM 角色:
-
在 Trusted entity type (信任的實體類型) 區段中,選擇 Web identity (Web 身分)。
-
對於 Identity provider (身分提供者),為您的叢集選擇 OpenID Connect provider URL (OpenID Connect 供應商 URL)(如 Amazon EKS Overview (概觀) 下所示)。
-
針對 Audience (對象),選擇
sts.amazonaws.com。 -
選擇下一步。
-
-
-
在 Add permissions (新增許可) 頁面上,執行以下作業:
-
在 Filter policies (篩選政策) 方塊中,輸入
AmazonEFSCSIDriverPolicy。 -
勾選在搜尋中傳回的
AmazonEFSCSIDriverPolicy左側的核取方塊。 -
選擇下一步。
-
-
在 Name, review, and create (命名、檢閱和建立) 頁面上,執行以下作業:
-
針對 Role name (角色名稱),為您的角色輸入唯一名稱 (例如
AmazonEKS_EFS_CSI_DriverRole)。 -
藉由連接標籤做為鍵值對,在新增標籤 (選用) 下將中繼資料新增至角色。如需有關在 IAM 中使用標籤的詳細資訊,請參閱《IAM 使用者指南》中的標記 IAM 資源。
-
選擇建立角色。
-
-
建立角色之後:
-
如果使用 EKS Pod 身分識別:
-
開啟 Amazon EKS 主控台
。 -
在左側導覽窗格中,選取叢集,然後選取您要為其設定 EKS Pod 身分識別關聯之叢集的名稱。
-
選擇存取索引標籤。
-
在 Pod 身分識別關聯中,選擇建立。
-
選擇 IAM 角色下拉式清單,然後選取新建立的角色。
-
選擇 Kubernetes 命名空間欄位,並輸入
kube-system。 -
選擇 Kubernetes 服務帳戶欄位,並輸入
efs-csi-controller-sa。 -
選擇建立。
-
如需建立 Pod 身分識別關聯的詳細資訊,請參閱 建立 Pod 身分識別關聯 (AWS 主控台)。
-
-
如果為服務帳戶使用 IAM 角色:
-
選擇角色以開啟進行編輯。
-
選擇 Trust Relationships (信任關係) 標籤,然後選擇 Edit Trust Relationship (編輯信任政策)。
-
查找與下列行相似的行:
"oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com"在前一行上方加入下列行。使用叢集所在的 AWS 區域取代
<region-code>。將<EXAMPLED539D4633E53DE1B71EXAMPLE>取代為叢集的 OIDC 提供商 ID。"oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-*", -
將
Condition運算子從"StringEquals"修改為"StringLike"。 -
選擇 Update policy (更新政策) 以完成操作。
-
-
AWS CLI
執行以下命令以使用 AWS CLI 建立 IAM 角色。
如果使用 Pod 身分識別
-
建立將
AssumeRole和TagSession動作授予pods.eks.amazonaws.com服務的 IAM 角色。-
將下列內容複製到名為
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" ] } ] } -
建立角色。使用您的叢集名稱取代
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"
-
-
使用下列命令,將所需的 AWS 受管政策連接至角色。
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --role-name $role_name -
執行下列命令以建立 Pod 身分識別關聯。將
arn:aws:iam::<111122223333>:role/my-role取代為先前步驟中建立的角色。aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/my-role --namespace kube-system --service-account efs-csi-controller-sa -
如需建立 Pod 身分識別關聯的詳細資訊,請參閱 建立 Pod 身分識別關聯 (AWS 主控台)。
如果為服務帳戶使用 IAM 角色
-
檢視叢集的 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,則請檢閱先決條件。 -
建立授予
AssumeRoleWithWebIdentity動作許可的 IAM 角色。-
將下列內容複製到名為
aws-efs-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.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:sub": "system:serviceaccount:kube-system:efs-csi-*", "oidc.eks.region-code.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com" } } } ] } -
建立角色。
aws iam create-role \ --role-name $role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy.json"
-
-
使用下列命令,將所需的 AWS 受管政策連接至角色。
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \ --role-name $role_name
步驟 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 EFS 檔案系統
如需建立 Amazon EFS 檔案系統,請參閱 GitHub 上的為 Amazon EKS 建立 Amazon EFS 檔案系統
步驟 4:部署範例應用程式
您可以部署各種範例應用程式,再視需要進行修改。如需詳細資訊,請參閱 GitHub 上的範例