能否为Bitnami/etcd配置自定义AWS EFS类型PV/PVC?
问题原因及解决步骤
核心问题
你的配置存在两个关键错误,导致PVC无法匹配到EFS类型的PV:
- PV标签不匹配:你用
name作为selector的匹配键,但PV的metadata.name是资源名称,并非标签字段,PVC的selector无法通过这个字段匹配到目标PV。 - 存储类配置冲突:你的PV指定了
storageClassName: "gp3"(这是AWS EBS的存储类),而PVC配置storageClass: ""时,会自动绑定集群默认存储类(大概率是EBS的gp3),因此会调用EBS的CSI驱动创建存储。
解决步骤
1. 修正EFS PV的配置
更新PV配置,添加用于匹配的标签,并修正存储类设置(建议设为空,避免和EBS存储类混淆):
--- apiVersion: v1 kind: PersistentVolume metadata: name: some-test-pv labels: pv-name: some-test-pv # 添加专属标签,供PVC selector匹配 spec: capacity: storage: 1Gi volumeMode: Filesystem accessModes: - ReadWriteOnce # EFS也支持ReadWriteMany,单节点etcd用RWO即可 storageClassName: "" # 设为空,标记为无存储类PV persistentVolumeReclaimPolicy: Retain csi: driver: efs.csi.aws.com volumeHandle: fs-[ID which I got from AWS console]
应用更新:
kubectl apply -f your-pv-file.yaml
2. 修正Helm values.yaml的PVC配置
调整selector匹配PV的标签,同时保持存储类配置一致:
persistence: enabled: true storageClass: "" # 和PV的storageClassName保持一致 annotations: {} accessModes: - ReadWriteOnce size: 1Gi selector: matchLabels: # 用matchLabels匹配PV的标签,更简洁直接 pv-name: some-test-pv
3. 重新部署etcd Helm chart
执行Helm命令重新安装或升级:
helm upgrade --install etcd bitnami/etcd -f your-values.yaml
额外说明
- EFS本身支持
ReadWriteMany访问模式,如果你的etcd是多节点集群,建议将PV和PVC的accessModes改为ReadWriteMany,更契合EFS的共享存储特性。 - 若需要使用EFS专属存储类,可提前创建:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: efs-sc provisioner: efs.csi.aws.com parameters: provisioningMode: efs-ap fileSystemId: fs-[你的EFS ID] directoryPerms: "700" mountOptions: - tls
创建完成后,将PV和PVC的storageClassName都设为efs-sc即可。
内容的提问来源于stack exchange,提问作者prosto.vint
相关产品推荐
相关产品推荐

