
Kubespray 如何启用 AWS EBS CSI Driver 并验证 StorageClass 与 PVC 动态供给【免费下载链接】kubesprayDeploy a Production Ready Kubernetes Cluster项目地址: https://gitcode.com/GitHub_Trending/ku/kubespray如果你的 Kubernetes 集群是用 Kubespray 部署在 AWS EC2 上的并且需要为 Pod 提供持久化存储就需要启用 AWS EBS CSI Driver。in-tree 的 AWS cloud provider 已经弃用并将在未来的 Kubernetes 版本中移除官方建议迁移到 CSI Driver。本文基于 Kubespray 仓库中的 AWS EBS CSI Driver 文档 和对应的 Role 实现讲清楚完整的操作路径修改两个 group_vars 配置项 → 运行cluster.yml部署 → 用三条kubectl检查确认 CSI Pod、StorageClass 和 PVC 动态供给都正常。适用环境集群节点是 AWS EC2 实例使用 Kubespray 部署 Kubernetes。前置条件给 EC2 实例配置 IAM 角色在改 Kubespray 变量之前先确认托管 Kubernetes 的 EC2 实例上已附加一个允许其发起 EBS 卷请求和挂载操作的 IAM 角色策略内容可参考 AWS EBS CSI Driver 项目的示例策略example-iam-policy.json。这一步无法在 Kubespray 内完成缺了它驱动 Pod 能跑起来但卷操作会因权限不足失败。配置方法修改两处 group_vars1. 在group_vars/all/aws.yml中启用驱动将aws_ebs_csi_enabled设为true。参考样例文件 inventory/sample/group_vars/all/aws.yml其中这些选项默认是被注释的# aws_ebs_csi_enabled: true # aws_ebs_csi_enable_volume_scheduling: true # aws_ebs_csi_enable_volume_snapshot: false # aws_ebs_csi_enable_volume_resizing: false # aws_ebs_csi_controller_replicas: 1 # aws_ebs_csi_plugin_image_tag: latest取消注释aws_ebs_csi_enabled并设为true是必做项其余按需要调整。各选项的 Role 默认值定义在 roles/kubernetes-apps/csi_driver/aws_ebs/defaults/main.yml变量默认值用途aws_ebs_csi_enabled未定义需显式开启启用 EBS CSI 驱动部署aws_ebs_csi_enable_volume_schedulingtrue启用卷调度aws_ebs_csi_enable_volume_snapshotfalse启用卷快照功能aws_ebs_csi_enable_volume_resizingfalse启用卷扩容功能aws_ebs_csi_controller_replicas1CSI 控制器副本数aws_ebs_csi_plugin_image_taglatest插件镜像 tag该文件还提供了一个可选注解aws_ebs_csi_annotations示例为iam.amazonaws.com/role指向你的 EBS role ARN注释说明它在使用 kube2iam 做角色假设时有用。2. 在group_vars/k8s_cluster/k8s_cluster.yml中开启 StorageClass如果你希望随集群一起部署 EBS StorageClass需要把persistent_volumes_enabled设为truepersistent_volumes_enabled: true开启后Kubespray 会应用 roles/kubernetes-apps/persistent_volumes/aws-ebs-csi/templates/aws-ebs-csi-storage-class.yml.j2生成名为ebs-sc的 StorageClassprovisioner 为ebs.csi.aws.comvolumeBindingMode为WaitForFirstConsumer默认参数是fstype: xfs、type: gp2。可选的可用区限制如果你要限制卷只供给到特定 AZ在persistent_volumes/aws-ebs-csi变量中设restrict_az_provisioning: true并配置aws_ebs_availability_zones样例列表值为eu-west-3c需替换成你的 AZ。文档注明该功能要求aws_ebs_csi_enable_volume_scheduling为true启用后模板会向 StorageClass 添加allowedTopologies。执行步骤运行 cluster.yml配置完成后运行 Kubespray 的cluster.ymlplaybookKubernetes 就会带着 EBS CSI Driver 部署到 EC2 上。Kubespray 内部的部署逻辑roles/kubernetes-apps/csi_driver/aws_ebs/tasks/main.yml是在第一个控制面节点上生成驱动、控制器 RBAC、控制器和节点四个清单文件再依次apply到集群。验证 StorageClass 与 PVC 动态供给1. 检查 ebs-csi Pod 是否运行kubectl -n kube-system get pods | grep ebs预期看到控制器和节点两个组件处于Running状态。以下是源文档给出的示例输出ebs-csi-controller-85d86bccc5-8gtq5 4/4 Running 4 40s ebs-csi-node-n4b99 3/3 Running 3 40s2. 检查 StorageClass如果开启了persistent_volumes_enabledkubectl get storageclass文档示例输出NAME PROVISIONER AGE ebs-sc ebs.csi.aws.com 45sebs-sc对应的 provisioner 应为ebs.csi.aws.com。3. 用 PVC 和示例 Pod 验证动态供给把下面的清单保存为ebs-pod.yml并应用--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ebs-claim spec: accessModes: - ReadWriteOnce storageClassName: ebs-sc resources: requests: storage: 1Gi --- apiVersion: v1 kind: Pod metadata: name: app spec: containers: - name: app image: centos command: [/bin/sh] args: [-c, while true; do echo $(date -u) /data/out.txt; sleep 5; done] volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: ebs-claimkubectl apply -f ebs-pod.ymlPVC 应完成动态供给并进入Bound状态检查命令kubectl get pvc文档示例输出NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ebs-claim Bound pvc-0034cb9e-1ddd-4b3f-bb9e-0b5edbf5194c 1Gi RWO ebs-sc 50s其中pvc-...的卷名是文档示例值实际值每次都会不同判定标准是STATUS为Bound、STORAGECLASS为ebs-sc。等 Pod 进入Running后确认卷已挂载kubectl exec -it app -- df -h | grep data文档示例输出/dev/nvme1n1 1014M 34M 981M 4% /data同样注意这是文档示例设备名和容量数值以实际环境为准能看到/data对应的块设备挂载即说明 EBS 卷已成功挂载到 Pod。限制与边界本文路径只适用于 AWS EC2 上的集群StorageClass 默认卷类型为gp2、文件系统为xfs由模板固定如需其他类型需要调整模板变量。由于 StorageClass 的volumeBindingMode是WaitForFirstConsumerPVC 会等到有 Pod 绑定后才触发实际供给这是kubectl get pvc中短暂的Pending状态属正常现象的上下文。源文档中的4/4、3/3等容器就绪数只是示例输出不同版本组件数量可能有差异以 Pod 整体Running为判断依据。更多驱动细节参数、快照、扩容可参考仓库文档 docs/CSI/aws-ebs-csi.md 末尾指向的上游 AWS EBS Driver 项目说明。【免费下载链接】kubesprayDeploy a Production Ready Kubernetes Cluster项目地址: https://gitcode.com/GitHub_Trending/ku/kubespray创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考