AWS-EKS-05--安装 Amazon EBS CSI 驱动程序
摘要
-
本文介绍在EKS集群中安装 Amazon EBS CSI 驱动程序过程
-
参考资料:
安装 Amazon EBS CSI 驱动程序
-
如果您计划将工作负载部署到使用 Amazon EBS 卷的集群,并且您创建了 1.23 或更高版本的集群,则在部署工作负载之前,您必须将 Amazon EBS CSI 驱动程序 安装到您的集群。
-
使用 eksctl 创建 Amazon EBS CSI 驱动程序 IAM 角色
1 | # 使用以下命令创建 IAM 角色并附加所需的 AWS 托管策略。此命令将部署 AWS CloudFormation 堆栈,该堆栈将创建 IAM 角色,并会将 IAM policy 附加到该堆栈。如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域,则将 arn:aws: 替换为 arn:aws-us-gov:。 |
-
将Amazon EBS CSI 驱动程序添加到集群
1 | # 运行以下命令。如果您的集群位于 AWS GovCloud(美国东部)或 AWS GovCloud(美国西部)AWS 区域,则将 arn:aws: 替换为 arn:aws-us-gov:。 |
-
检查 Amazon EBS CSI 驱动程序的当前版本,注意这里如果有可用更新,UPDATE AVAILABLE会显示,默认安装是最新版本
1 | $ eksctl get addon --name aws-ebs-csi-driver --cluster eks-lexing --profile eks-us-west-2 |
-
插件安装完成后可以查看已经安装的资源,Name中含有 ebs-csi
1 | ~ k get all -n kube-system -l app.kubernetes.io/component=csi-driver |
-
此时可以通过aws控制台对eks的Amazon EBS CSI 驱动程序进行管理,后续升级可以直接在控制台进行
-
查看Amazon EBS CSI 驱动程序的所有可用版本号
1 | $ aws eks describe-addon-versions --addon-name aws-ebs-csi-driver --profile eks-us-west-2 |
-
更新 Amazon EBS CSI 驱动程序 ,–force 表示强制更新
1 | # 查看是否有更新,可以看到UPDATE下有个可用更新版本 v1.20.0-eksbuild.1 |
-
删除 Amazon EBS CSI 驱动程序
1 | $ eksctl delete addon --cluster eks-lexing --profile eks-us-west-2 --name aws-ebs-csi-driver --preserve |
默认eks为我们创建好了一个sc:gp2
1 | # 默认的gp2配置yaml,其被设置为默认存储类 |
关于默认存储类的说明
- 在 AWS 的 Amazon EKS(Elastic Kubernetes Service)中,将一个 StorageClass(SC)设置为默认存储类具有以下作用:
- 自动分配: 当没有显式指定 StorageClass 的情况下,如果某个 Persistent Volume Claim(PVC)没有指定所需的 StorageClass,则默认会选择设置为默认存储类的 StorageClass 进行 PVC 的动态分配。
- 简化配置: 默认存储类可以简化 PVC 的配置,因为您不需要为每个 PVC 显式指定 StorageClass。只需创建 PVC,并且它将自动使用默认存储类进行分配。
- 默认设置: 默认存储类是集群级别的默认设置,适用于没有显式指定 StorageClass 的 PVC。这样可以确保在没有特定要求的情况下,PVC 可以使用预定义的默认存储类。
- 在 AWS EKS 中,只能有一个 StorageClass 被设置为默认存储类。这是因为默认存储类是集群范围的全局设置,它用于满足未显式指定 StorageClass 的 PVC 的需求。如果有多个 StorageClass 被设置为默认,会导致混乱和不确定性,因为 Kubernetes 将无法确定使用哪个默认存储类。
- 如果需要为不同的 PVC 使用不同的默认存储类,可以通过为每个 PVC 显式指定所需的 StorageClass 来实现,而不是依赖默认存储类。
- 总结来说,通过设置默认存储类,您可以简化 PVC 的配置并定义集群范围的默认设置。但是,在 AWS EKS 中,只能有一个默认存储类。
使用说明
-
创建StorageClass
1 | # 创建基于gp3的sc |
配置说明
- provisioner
1 | # provisioner 定义了用于动态分配 PV 的存储插件或存储后端。它指定了负责创建和管理 PV 的控制器。 |
- allowVolumeExpansion
1 | # allowVolumeExpansion 是一个布尔值参数,用于指定是否允许 PVC 的大小在运行时进行扩展。 |
-
volumeBindingMode
1 | # 在创建 StorageClass 时,可以指定 volumeBindingMode 来定义持久卷(Persistent Volume,PV)与 Persistent Volume Claim(PVC)之间的绑定行为。volumeBindingMode 可以具有以下几种选项: |
-
reclaimPolicy
1 | # 在 Kubernetes 中,reclaimPolicy 是指定持久卷(Persistent Volume,PV)的回收策略。reclaimPolicy 可以具有以下几种选项: |
-
创建PVC
1 | create-pvc.yaml |
配置说明
- accessModes
1 | # 在 Kubernetes 中,PVC 是用于声明性地请求持久化存储资源的对象。它定义了 Pod 对持久卷(Persistent Volume,PV)的访问要求。PVC 可以指定不同的 accessModes,以确定 Pod 如何访问与之绑定的 PV。以下是 PVC 可能的 accessModes: |
-
申请ebs资源
1 | # 可以创建一个pod绑定这个pvc就可以看到资源被申请了 |
一个deployment并挂载ebs的示例
1 | # deployment-volume.yaml |
讨论
-
这里注意一下,k8s-1.23版本创建时会成功,但是重启不成功,只会重新启动成功一个pod,另外两个pod会失败,提示pvc已经被一个pod关联了,但是1.25版就可以创建和重启时都可以成功,不确定是否和Amazon EBS CSI 版本有关系。
后记
-
这里要注意一个问题,如果pv被pvc绑定,此时是无法删除pv的,同理pvc被其它资源关联,也是不能被删除的,需要先删除对应的资源才可以。
-
EBS不能跨可用区,如果pod部署在不同的可用区,则不能使用ebs作为存储,此时可以使用EFS。