You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS自建K8s集群中部署EBS-CSI实现PVC自动配置?

在AWS EC2自建K8s集群部署EBS CSI驱动

前提条件

  • Kubernetes集群版本 ≥ 1.20(EBS CSI驱动v1.0及以上版本要求)
  • 集群EC2节点需具备操作EBS卷的IAM权限
  • 可选:已安装Helm 3(用于更便捷的驱动安装)

1. 配置EC2节点IAM权限

自建集群无法使用EKS的IAM Roles for Service Accounts(IRSA),直接为集群所有EC2节点的实例角色附加以下IAM策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CreateVolume",
        "ec2:AttachVolume",
        "ec2:DeleteVolume",
        "ec2:DescribeVolumes",
        "ec2:DescribeInstances",
        "ec2:DetachVolume"
      ],
      "Resource": "*"
    }
  ]
}

建议将该策略命名为AmazonEBSCSIDriverPolicy,确保所有节点实例角色都关联此策略。

2. 安装EBS CSI驱动

方法一:Helm安装

  1. 添加EBS CSI Helm仓库:
helm repo add aws-ebs-csi-driver https://kubernetes-sigs.github.io/aws-ebs-csi-driver/
helm repo update
  1. 安装驱动(适配自建集群,禁用IRSA相关配置):
helm upgrade --install aws-ebs-csi-driver aws-ebs-csi-driver/aws-ebs-csi-driver \
  --namespace kube-system \
  --set controller.serviceAccount.create=false \
  --set controller.serviceAccount.name=ebs-csi-controller-sa \
  --set node.serviceAccount.create=false \
  --set node.serviceAccount.name=ebs-csi-node-sa

提示:如果集群未预创建对应ServiceAccount,可删除create=false和name参数,让Helm自动创建。

方法二:Kubectl直接部署

执行官方稳定版manifest:

kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

验证组件运行状态:

kubectl get pods -n kube-system -l app=ebs-csi-controller
kubectl get pods -n kube-system -l app=ebs-csi-node

确保所有Pod处于Running状态。

3. 验证EBS CSI功能

步骤1:创建StorageClass

如果集群没有默认的EBS存储类,创建以下StorageClass:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ebs-sc
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: gp3

执行kubectl apply -f storageclass.yaml,可将其设为默认存储类:

kubectl patch storageclass ebs-sc -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

步骤2:创建测试PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ebs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ebs-sc
  resources:
    requests:
      storage: 10Gi

执行kubectl apply -f pvc.yaml,等待PVC状态变为Bound。

步骤3:创建测试Pod并挂载PVC

apiVersion: v1
kind: Pod
metadata:
  name: test-ebs-pod
spec:
  containers:
  - name: nginx
    image: nginx:alpine
    volumeMounts:
    - name: ebs-volume
      mountPath: /data
  volumes:
  - name: ebs-volume
    persistentVolumeClaim:
      claimName: ebs-pvc

执行kubectl apply -f pod.yaml,待Pod启动后验证挂载:

kubectl exec test-ebs-pod -- df -h /data

若输出中显示EBS卷的挂载信息,说明配置成功。

注意事项

  • 确保EC2节点所在VPC有足够的EBS卷配额
  • 不同EC2实例类型支持的挂载EBS卷数量上限不同,需参考AWS官方文档
  • 若需使用加密EBS卷,需为实例角色添加kms:CreateGrant、kms:DescribeKey等相关权限

内容的提问来源于stack exchange,提问作者Bhargav Vekariya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:15:30