協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
搭配 Amazon EFS CSI 驅動程式使用 Amazon S3 檔案系統儲存 EFS
S3 檔案是一種共用檔案系統,可直接將任何 AWS 運算與 Amazon S3 中的資料連線。它可讓您以具有完整檔案系統語意和低延遲效能的檔案形式,快速直接存取所有 S3 資料,而不會讓您的資料離開 S3。這表示以檔案為基礎的應用程式、客服人員和團隊可以使用他們已經依賴的工具,以檔案系統的形式存取和使用 S3 資料。Amazon EFS 容器儲存介面 (CSI) 驅動程式
考量事項
-
Amazon EFS CSI 驅動程式與以 Windows 為基礎的容器映像不相容。
-
EKS Fargate 不支援 S3 檔案。
-
Amazon EFS CSI 驅動程式與 Amazon EKS 混合節點不相容。
-
Amazon EFS CSI 驅動程式中的 Amazon S3 檔案支援從 3.0.0
版開始。 EFS
先決條件
-
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) 版本
1.27.1602.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-configure-quickstart.html#cli-configure-quickstart-config在 AWS CloudShell 中安裝的 AWS CLI 版本也可能是最新版本後面的幾個版本。若要更新它,請參閱《CloudShell AWS 使用者指南》中的將 CLI 安裝到您的主目錄。 AWS CloudShell -
kubectl命令列工具安裝在您的裝置或 AWS CloudShell 上。版本可以與您的叢集 Kubernetes 版本相同,或是為最多比該版本更舊一版或更新一版的次要版本。例如,如果您的叢集版本為1.29,則可以搭配使用kubectl1.28、1.29或1.30版。若要安裝或升級kubectl,請參閱 設定 kubectl 和 eksctl。
步驟 1:建立 IAM 角色
Amazon EFS CSI 驅動程式需要 IAM 許可才能與檔案系統互動。EFS CSI 驅動程式使用兩個具有不同 IAM 角色的服務帳戶:
-
efs-csi-controller-sa— 供控制器使用,需要AmazonS3FilesCSIDriverPolicy。 -
efs-csi-node-sa— 由節點協助程式集使用, 需要:-
AmazonS3ReadOnlyAccess— 啟用直接從 S3 儲存貯體進行串流讀取,以提高輸送量。 -
AmazonElasticFileSystemsUtils— 可將 efs-utils 日誌發佈至 Amazon CloudWatch,以便查看掛載操作並更輕鬆地進行故障診斷。
-
注意
如果您想要同時使用 Amazon S3 檔案系統和 Amazon EFS 儲存,您必須同時將 AmazonS3FilesCSIDriverPolicy和 AmazonEFSCSIDriverPolicy受管政策連接到控制器角色。如需 Amazon EFS 儲存體的詳細資訊,請參閱 透過 Amazon EFS 使用彈性檔案系統儲存。
若要實作此程序,您可使用下列其中一個工具:
注意
本程序中的特定步驟是針對將驅動程式用作 Amazon EKS 附加元件而編寫。如需有關自我管理安裝的詳細資訊,請參閱 GitHub 上的設定驅動程式許可
eksctl
如果使用 Pod 身分識別
執行下列命令,以建立與 的 IAM 角色和 Pod 身分關聯eksctl。將 my-cluster 取代為您的值。
export cluster_name=my-cluster # Create the controller role eksctl create podidentityassociation \ --service-account-name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_ControllerRole \ --permission-policy-arns arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy # Create the node role eksctl create podidentityassociation \ --service-account-name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_NodeRole \ --permission-policy-arns arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess,arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils
如果為服務帳戶使用 IAM 角色
執行下列命令以使用 建立 IAM 角色eksctl。將 my-cluster 取代為您的叢集名稱,並將 region-code 取代為您的 AWS 區域代碼。
export cluster_name=my-cluster export region_code=region-code # Create the controller role export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole eksctl create iamserviceaccount \ --name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $controller_role_name \ --attach-policy-arn arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --approve \ --region $region_code # Create the node role export node_role_name=AmazonEKS_EFS_CSI_NodeRole eksctl create iamserviceaccount \ --name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $node_role_name \ --attach-policy-arn arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess \ --attach-policy-arn arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils \ --approve \ --region $region_code
AWS 管理主控台
執行下列操作以使用 建立 IAM 角色 AWS 管理主控台。
-
前往 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 (篩選政策) 方塊中,輸入
AmazonS3FilesCSIDriverPolicy。 -
選取搜尋中傳回的政策左側的核取方塊。
-
選擇下一步。
-
-
在 Name, review, and create (命名、檢閱和建立) 頁面上,執行以下作業:
-
針對 Role name (角色名稱),為您的角色輸入唯一名稱 (例如
AmazonEKS_EFS_CSI_ControllerRole)。 -
藉由連接標籤做為鍵值對,在新增標籤 (選用) 下將中繼資料新增至角色。如需有關在 IAM 中使用標籤的詳細資訊,請參閱《IAM 使用者指南》中的標記 IAM 資源。
-
選擇建立角色。
-
-
建立角色之後:
-
如果使用 EKS Pod 身分識別:
-
開啟 Amazon EKS 主控台
。 -
在左側導覽窗格中,選取叢集,然後選取您要為其設定 EKS Pod 身分識別關聯之叢集的名稱。
-
選擇存取索引標籤。
-
在 Pod 身分識別關聯中,選擇建立。
-
選擇 IAM 角色下拉式清單,然後選取新建立的角色。
-
選擇 Kubernetes 命名空間欄位,並輸入
kube-system。 -
選擇 Kubernetes 服務帳戶欄位,並輸入
efs-csi-controller-sa。 -
選擇建立。
-
如需建立 Pod 身分識別關聯的詳細資訊,請參閱 建立 Pod Identity 關聯AWS (主控台)。
-
重複上述步驟,為節點服務帳戶建立第二個角色。在新增許可頁面上,
AmazonElasticFileSystemsUtils改為連接AmazonS3ReadOnlyAccess和 。然後,為 Kubernetes 服務帳戶欄位建立與efs-csi-node-sa的 Pod Identity 關聯。
-
-
如果為服務帳戶使用 IAM 角色:
-
選擇角色以開啟進行編輯。
-
選擇 Trust Relationships (信任關係) 標籤,然後選擇 Edit Trust Relationship (編輯信任政策)。
-
查找與下列行相似的行:
"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-controller-sa", -
選擇 Update policy (更新政策) 以完成操作。
-
重複上述步驟,為節點服務帳戶建立第二個角色。在新增許可頁面上,
AmazonElasticFileSystemsUtils改為連接AmazonS3ReadOnlyAccess和 。在信任政策中,使用efs-csi-node-sa做為:sub條件值。
-
-
AWS CLI
執行下列命令,使用 CLI 建立 IAM AWS 角色。
如果使用 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。export cluster_name=my-cluster export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_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/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name -
使用相同的信任政策建立節點 IAM 角色。
export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_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/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name -
執行下列命令來建立 Pod Identity 關聯。使用您的帳戶 ID 取代
<111122223333>。aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$controller_role_name --namespace kube-system --service-account efs-csi-controller-sa aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$node_role_name --namespace kube-system --service-account efs-csi-node-sa
-
如需建立 Pod 身分識別關聯的詳細資訊,請參閱 建立 Pod Identity 關聯AWS (主控台)。
如果為服務帳戶使用 IAM 角色
-
檢視叢集的 OIDC 提供商 URL。使用您的叢集名稱取代
my-cluster。export cluster_name=my-cluster aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text範例輸出如下。
https://oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>如果來自命令的輸出是
None,則請檢閱先決條件。 -
建立控制器服務帳戶的 IAM 角色。
-
將下列內容複製到名為
controller-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": { "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:efs-csi-controller-sa" } } } ] } -
建立角色。
export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_role_name \ --assume-role-policy-document file://"controller-trust-policy.json"
-
-
將所需的 AWS 受管政策連接至控制器角色。
aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name -
建立節點服務帳戶的 IAM 角色。
-
將下列內容複製到名為
node-trust-policy.json的檔案。使用您的帳戶 ID 取代<111122223333>。將<EXAMPLED539D4633E53DE1B71EXAMPLE>和 取代<region-code>為步驟 1 中傳回的值。{ "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>:sub": "system:serviceaccount:kube-system:efs-csi-node-sa", "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com" } } } ] } -
建立角色。
export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"node-trust-policy.json"
-
-
將所需的 AWS 受管政策連接至節點角色。
aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws: iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name
注意
AmazonS3ReadOnlyAccess 政策會授予所有 S3 儲存貯體的讀取存取權。若要限制對特定儲存貯體的存取,您可以將其分離,並以標籤型內嵌政策取代。如需詳細資訊,請參閱 GitHub 上的 Amazon EFS CSI 驅動程式 IAM 政策文件
步驟 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 S3 檔案系統
若要建立 Amazon S3 檔案系統,請參閱在 GitHub 上為 Amazon EKS 建立 Amazon S3 檔案系統
步驟 4:部署範例應用程式
您可以部署各種範例應用程式,再視需要進行修改。如需詳細資訊,請參閱 GitHub 上的範例