帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
Amazon EKS 自动模式中的 StorageClass
定义了应用程序请求持久性存储时如何自动预置 Amazon EBS 卷。本页介绍如何创建和配置可与 Amazon EKS 自动模式配合使用的 StorageClass
,从而预置 EBS 卷。
通过配置 StorageClass
,您可以指定 EBS 卷的默认设置,包括卷类型、加密、IOPS 和其他存储参数。您还可以将 StorageClass
配置为使用 AWS KMS 密钥进行加密管理。
EKS 自动模式不会为您创建 StorageClass
。您必须创建引用 ebs.csi.eks.amazonaws.com
的 StorageClass
,才能使用 EKS 自动模式的存储功能。
首先创建一个名为 storage-class.yaml
的文件:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: auto-ebs-sc
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: ebs.csi.eks.amazonaws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp3
encrypted: "true"
然后将存储类应用于到集群。
kubectl apply -f storage-class.yaml
关键组件:
-
provisioner: ebs.csi.eks.amazonaws.com
– 使用 EKS 自动模式 -
volumeBindingMode: WaitForFirstConsumer
– 将卷的创建延迟到容器组需要时 -
type: gp3
– 指定 EBS 卷类型 -
encrypted: "true"
– EBS 将对使用该StorageClass
创建的所有卷进行加密。EBS 将使用默认的aws/ebs
密钥别名。有关更多信息,请参阅《Amazon EBS 用户指南》中的 How Amazon EBS encryption works。该值是可选的,但建议使用。 -
storageclass.kubernetes.io/is-default-class: "true"
– 默认情况下 Kubernetes 将使用此存储类,除非您在持久性卷声明中指定了其他卷类。该值为可选项。如果要从其他存储控制器迁移,请谨慎设置此值。
使用自主管理型 KMS 密钥加密 EBS 卷
要使用自主管理型 KMS 密钥加密由 EKS 自动模式自动预置的 EBS 卷,您需要完成以下操作:
-
创建自主管理型 KMS 密钥。
-
有关更多信息,请参阅《KMS 用户指南》中的 Create a symmetric encryption KMS key 或 How Amazon Elastic Block Store (Amazon EBS) uses KMS。
-
-
创建一个允许访问该 KMS 密钥的新策略。
-
使用以下 IAM 策略示例来创建策略。插入新的自主管理型 KMS 密钥的 ARN。有关更多信息,请参阅《AWS IAM 用户指南》中的创建角色并附加策略(控制台)。
-
-
将此策略附加到 EKS 集群角色。
-
使用 AWS 控制台查找 EKS 集群角色的 ARN。角色信息将在概述部分中显示。有关更多信息,请参阅 Amazon EKS 集群 IAM 角色。
-
-
更新
StorageClass
以在parameters.kmsKeyId
字段中引用该 KMS 密钥 ID。
自主管理型 KMS IAM 策略示例
更新以下策略中的以下值:
-
<account-id>
– AWS 账户 ID,例如111122223333
-
<aws-region>
– 集群所在的 AWS 区域,例如us-west-2
{
"Version": "2012-10-17",
"Id": "key-auto-policy-3",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account-id>:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:CreateGrant",
"kms:DescribeKey"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:CallerAccount": "<account-id>",
"kms:ViaService": "ec2.<aws-region>.amazonaws.com"
}
}
}
]
}
自主管理型 KMS StorageClass
示例
parameters:
type: gp3
encrypted: "true"
kmsKeyId: <custom-key-arn>
StorageClass
参数参考
有关 Kubernetes StorageClass
资源的一般信息,请参阅 Kubernetes 文档中的存储类
StorageClass
资源的 parameters
部分特定于 AWS。请使用下表来查看可用的选项。
参数 | 值 | 默认值 | 描述 |
---|---|---|---|
"csi.storage.k8s.io/fstype" |
xfs、ext2、ext3、ext4 |
ext4 |
将在创建卷时进行格式化的文件系统类型。此参数区分大小写! |
"type" |
io1、io2、gp2、gp3、sc1、st1、标准、sbp1、sbg1 |
gp3 |
EBS 卷类型。 |
"iopsPerGB" |
每 GiB 每秒 I/O 读写操作次数。可以为 IO1、IO2 和 GP3 卷指定。 |
||
"allowAutoIOPSPerGBIncrease" |
true,false |
false |
如果为 |
"iops" |
每秒 I/O 读写操作次数。可以为 IO1、IO2 和 GP3 卷指定。 |
||
"throughput" |
125 |
吞吐量以 MiB/s 为单位。仅在指定 gp3 卷类型时有效。 |
|
"encrypted" |
true,false |
false |
是否应对卷进行加密。有效值为“true”或“false”。 |
"blockExpress" |
true,false |
false |
允许创建 io2 Block Express 卷。 |
"kmsKeyId" |
加密卷时要使用的密钥的完整 ARN。如果未指定,AWS 将使用该卷所在区域的默认 KMS 密钥。这将是一个自动生成的密钥,名为 |
||
"blockSize" |
格式化底层文件系统时要使用的块大小。仅支持 linux 节点和文件系统类型 |
||
"inodeSize" |
格式化底层文件系统时要使用的索引节点大小。仅支持 linux 节点和文件系统类型 |
||
"bytesPerInode" |
格式化底层文件系统时要使用的 |
||
"numberOfInodes" |
格式化底层文件系统时要使用的 |
||
"ext4BigAlloc" |
true,false |
false |
通过启用 |
"ext4ClusterSize" |
启用 |
有关更多信息,请参阅 GitHub 上的 AWS EBS CSI Driver
注意事项
EKS 自动模式的块存储功能与 EBS CSI 驱动程序不同。
-
静态预置
-
要将外部创建的 EBS 卷与 EKS 自动模式结合使用,需要手动添加键为
eks:eks-cluster-name
,值为集群名称的 AWS 标签。
-
-
节点启动污点
-
在存储容量准备就绪之前,不能使用节点启动污点功能来阻止容器组调度
-
-
动态预置卷上的自定义标签
-
不能使用 extra-tag CLI 标志在动态预置 EBS 卷上配置自定义标签
-
可以使用
StorageClass
标记功能来添加自定义标签。EKS 自动模式将为关联的 AWS 资源添加标签。您需要更新自定义标签的集群 IAM 角色。有关更多信息,请参阅 EKS 自动模式资源的自定义 AWS 标签。
-
-
EBS 详细性能指标
-
您无法访问 Prometheus 指标来了解 EBS 的详细性能
-
安装 CSI 快照控制器附加组件
EKS 自动模式与 CSI 快照控制器 Amazon EKS 附加组件兼容。
AWS 建议将此附加组件配置为在内置的 system
节点池上运行。
有关更多信息,请参阅:
在系统节点池中安装快照控制器
-
在 AWS 控制台中打开 EKS 集群
-
在附加组件选项卡中,选择获取更多附加组件
-
选择 CSI 快照控制器,然后选择下一步
-
在配置选定附加组件的设置页面上,选择可选配置设置以查看附加组件配置架构
-
插入以下 yaml 以将快照控制器关联到
system
节点池。快照控制器包含对CriticalAddonsOnly
污点的容忍度。{ "nodeSelector": { "karpenter.sh/nodepool": "system" } }
-
选择下一步
-
-
检查附加组件配置,然后选择创建