帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
使用 Amazon EBS 存储 Kubernetes 卷
Amazon Elastic Block Store(Amazon EBS)容器存储接口(CSI)驱动程序可管理 Amazon EBS 卷(作为您创建的 Kubernetes 卷的存储)的生命周期。Amazon EBS CSI 驱动程序为以下类型的 Kubernetes 卷制作 Amazon EBS 卷:通用临时卷和持久性卷。
注意事项
要使用 Amazon EBS CSI 驱动程序的快照功能,必须在安装附加组件之前或之后安装外部快照程序。必须按以下顺序安装外部快照程序组件:
有关更多信息,请参阅 GitHub 上的 CSI 快照程序。
先决条件
-
现有集群。要查看所需的平台版本,请运行以下命令。
aws eks describe-addon-versions --addon-name aws-ebs-csi-driver
-
集群的现有 AWS Identity and Access Management IAM OpenID Connect (OIDC) 提供商。要确定您是否已经拥有一个或是否要创建一个,请参阅 为集群创建 IAM OIDC 提供商。
-
如果您使用的是集群范围内受限的 PodSecurityPolicy,请确保授予该附加组件足够的权限,以进行部署。有关每个附加组件 Pod 所需的权限,请参阅 GitHub 上的相关附加组件清单定义。
步骤 1:创建 IAM 角色
Amazon EBS CSI 插件需要 IAM 权限才能代表您调用 AWS API。如果您未完成这些步骤,则在尝试安装附加组件并运行 kubectl describe pvc
时,将会显示 failed to provision volume with
StorageClass
以及 could not create volume in EC2:
UnauthorizedOperation
错误。有关更多信息,请参阅 GitHub 上的设置驱动程序权限。
以下过程为您演示了如何创建 IAM 角色并向其附加 AWS 托管策略。您可以使用 eksctl
、AWS Management Console或 AWS CLI。
此过程中的具体步骤是为将驱动程序用作 Amazon EKS 附加组件而编写的。要将驱动程序用作自行管理的附加组件,需要遵循不同的步骤。有关更多信息,请参阅 GitHub 上的设置驱动程序权限。
- eksctl
-
使用 eksctl
创建 Amazon EBS CSI 插件 IAM 角色
-
创建 IAM 角色并附加到策略。AWS 维护 AWS 托管策略,或者您可创建自己的自定义策略。您可以使用以下命令创建 IAM 角色并将 AWS 托管策略附加到其上。将 my-cluster
替换为您的集群名称。此命令将部署 AWS CloudFormation 堆栈,该堆栈将创建 IAM 角色,并会将 IAM policy 附加到该堆栈。如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域,则将 arn:aws:
替换为 arn:aws-us-gov:
。
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
-
如果在 Amazon EBS 卷上使用自定义 KMS 密钥进行加密,请根据需要自定义 IAM 角色。例如,执行以下操作:
-
复制并在新的 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
"]
}
]
}
-
创建 策略。您可以将 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
-
使用以下命令将 IAM policy 附加到该角色。请将 111122223333
替换为您的账户 ID。如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域,则将 arn:aws:
替换为 arn:aws-us-gov:
。
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
-
使用 AWS Management Console 创建 Amazon EBS CSI 插件 IAM 角色
通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
-
在左侧导航窗格中,选择 Roles(角色)。
-
在 Roles(角色)页面上,选择 Create role(创建角色)。
-
在 Select trusted entity(选择受信任的实体)页面上,请执行以下操作:
在 Trusted entity type(受信任的实体类型)部分中,选择 Web identity(Web 身份)。
-
对于 Identity provider(身份提供商),为您的集群选择 OpenID Connect provider URL(提供商 URL)(如 Amazon EKS 中的 Overview(概述)下所示)。
-
对于 Audience (受众),请选择 sts.amazonaws.com
。
选择下一步。
-
在 Add permissions(添加权限)页面上,请执行以下操作:
-
在 Filter policies (筛选器策略) 框中,输入 AmazonEBSCSIDriverPolicy
。
-
选中搜索返回的 AmazonEBSCSIDriverPolicy
左侧的复选框。
选择下一步。
-
在 Name, review, and create(命名、查看和创建)页面中,请执行以下操作:
-
对于 Role name(角色名称),请为角色输入唯一名称,例如 AmazonEKS_EBS_CSI_DriverRole
。
在添加标签(可选)下,将标签作为键值对附加,以将元数据添加到角色。有关在 IAM 中使用标签的更多信息,请参阅《IAM 用户指南》 中的标记 IAM 资源。
-
选择 Create role(创建角色)。
创建角色后,在控制台中选择角色以将其打开进行编辑。
选择 Trust relationships(信任关系)选项卡,然后选择 Edit trust policy(编辑信任策略)。
-
该行看起来类似于以下行:
"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"
选择 Update policy(更新策略)以完成操作。
-
如果在 Amazon EBS 卷上使用自定义 KMS 密钥进行加密,请根据需要自定义 IAM 角色。例如,执行以下操作:
-
在左侧导航窗格中,选择 Policies(策略)。
-
在策略页面上,选择 Create a policy (创建策略)。
-
在创建策略页面上,选择 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
"]
}
]
}
-
选择下一步:标签。
-
在 Add tags (Optional)(添加标签(可选))页面上,选择 Next: Review(下一步:审核)。
-
对于 Name(名称),请为您的策略输入唯一的名称(例如 KMS_Key_For_Encryption_On_EBS_Policy
)。
-
选择创建策略。
-
在左侧导航窗格中,选择 Roles(角色)。
-
在控制台中选择 AmazonEKS_EBS_CSI_DriverRole
以打开它进行编辑。
-
从添加权限下拉列表中,选择附加策略。
-
在 Filter policies (筛选器策略) 框中,输入 KMS_Key_For_Encryption_On_EBS_Policy
。
-
选中搜索中返回的 KMS_Key_For_Encryption_On_EBS_Policy
左侧的复选框。
-
选择附加策略。
- AWS CLI
-
使用 AWS CLI 创建 Amazon EBS CSI 插件 IAM 角色
-
查看集群的 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
-
创建 IAM 角色并向其授予 AssumeRoleWithWebIdentity
操作。
-
将以下内容复制到名为 aws-ebs-csi-driver-trust-policy
.json
的文件中。请将 111122223333
替换为您的账户 ID。将 EXAMPLED539D4633E53DE1B71EXAMPLE
和 region-code
替换为在上一步中返回的值。如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域,则将 arn:aws:
替换为 arn:aws-us-gov:
。
{
"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"
}
}
}
]
}
-
创建角色。您可以将 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"
-
附加策略。AWS 维护 AWS 托管策略,或者您可创建自己的自定义策略。使用以下命令以将 AWS 托管策略附加到角色。如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域,则将 arn:aws:
替换为 arn:aws-us-gov:
。
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--role-name AmazonEKS_EBS_CSI_DriverRole
-
如果在 Amazon EBS 卷上使用自定义 KMS 密钥进行加密,请根据需要自定义 IAM 角色。例如,执行以下操作:
-
复制并在新的 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
"]
}
]
}
-
创建 策略。您可以将 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
-
使用以下命令将 IAM policy 附加到该角色。请将 111122223333
替换为您的账户 ID。如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域,则将 arn:aws:
替换为 arn:aws-us-gov:
。
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 权限的 Kubernetes clusterrole
。
第 2 步:获取 Amazon EBS CSI 驱动程序
我们建议您通过 Amazon EKS 附加组件来安装 Amazon EBS CSI 驱动程序,从而提高安全性并减少工作量。要将 Amazon EKS 附加组件添加到您的集群,请参阅 创建 Amazon EKS 附加组件。有关附加组件的更多信息,请参阅 Amazon EKS 附加组件。
如果要自行管理 Amazon EFS CSI 驱动程序的安装,请参阅 GitHub 上的 Installation。
第 3 步:部署示例应用程序
您可以部署各种示例应用程序并根据需要对其进行修改。有关更多信息,请参阅 GitHub 上的 Kubernetes Examples。