使用Helm在Kubernetes部署Elasticsearch遇PVC绑定失败求助
解决Elasticsearch Helm部署中PVC绑定失败的问题
问题描述
执行Helm部署命令:
helm install elasticsearch elastic/elasticsearch -n efk
遇到PVC绑定失败错误,核心提示:
no persistent volumes available for this claim and no storage class is set
完整日志如下:
LAST SEEN TYPE REASON OBJECT MESSAGE 18s (x2 over 18s) Normal NoPods PodDisruptionBudget/elasticsearch-master-pdb 未找到匹配的Pod 18s Normal SuccessfulCreate StatefulSet/elasticsearch-master 成功创建StatefulSet elasticsearch-master中的Claim elasticsearch-master-elasticsearch-master-2及Pod elasticsearch-master-2 18s Normal SuccessfulCreate StatefulSet/elasticsearch-master 成功创建StatefulSet elasticsearch-master中的Pod elasticsearch-master-1 18s Normal SuccessfulCreate StatefulSet/elasticsearch-master 成功创建StatefulSet elasticsearch-master中的Claim elasticsearch-master-elasticsearch-master-1及Pod elasticsearch-master-1 18s Normal SuccessfulCreate StatefulSet/elasticsearch-master 成功创建StatefulSet elasticsearch-master中的Pod elasticsearch-master-0 18s Normal SuccessfulCreate StatefulSet/elasticsearch-master 成功创建StatefulSet elasticsearch-master中的Claim elasticsearch-master-elasticsearch-master-0及Pod elasticsearch-master-0 18s Normal SuccessfulCreate StatefulSet/elasticsearch-master 成功创建StatefulSet elasticsearch-master中的Pod elasticsearch-master-2 18s Warning FailedScheduling Pod/elasticsearch-master-0 0/4节点可用:4个Pod存在未绑定的即时PersistentVolumeClaims。抢占:0/4节点可用:4个节点抢占无法助力调度。 18s Warning FailedScheduling Pod/elasticsearch-master-1 0/4节点可用:4个Pod存在未绑定的即时PersistentVolumeClaims。抢占:0/4节点可用:4个节点抢占无法助力调度。 18s Warning FailedScheduling Pod/elasticsearch-master-2 0/4节点可用:4个Pod存在未绑定的即时PersistentVolumeClaims。抢占:0/4节点可用:4个节点抢占无法助力调度。 16s Warning FailedScheduling Pod/elasticsearch-master-0 0/4节点可用:4个Pod存在未绑定的即时PersistentVolumeClaims。抢占:0/4节点可用:4个节点抢占无法助力调度。 16s Warning FailedScheduling Pod/elasticsearch-master-1 0/4节点可用:4个Pod存在未绑定的即时PersistentVolumeClaims。抢占:0/4节点可用:4个节点抢占无法助力调度。 8s (x2 over 18s) Normal FailedBinding PersistentVolumeClaim/elasticsearch-master-elasticsearch-master-0 no persistent volumes available for this claim and no storage class is set 8s (x2 over 18s) Normal FailedBinding PersistentVolumeClaim/elasticsearch-master-elasticsearch-master-2 no persistent volumes available for this claim and no storage class is set 8s (x2 over 18s) Normal FailedBinding PersistentVolumeClaim/elasticsearch-master-elasticsearch-master-1 no persistent volumes available for this claim and no storage class is set
解决方案
1. 使用动态存储类(推荐生产环境)
如果集群中已配置StorageClass,直接指定它让Kubernetes自动创建PV:
- 先查看可用的StorageClass:
kubectl get storageclasses.storage.k8s.io - 部署时通过
--set指定存储类:helm install elasticsearch elastic/elasticsearch -n efk --set persistence.storageClass=<你的StorageClass名称> - 若需自定义更多存储参数,可先导出Chart的values文件修改后部署:
编辑helm show values elastic/elasticsearch > values.yamlvalues.yaml中的persistence.storageClass字段,然后执行:helm install elasticsearch elastic/elasticsearch -n efk -f values.yaml
2. 创建静态PV绑定PVC
如果集群没有动态存储类,手动创建与PVC匹配的PV:
- 注意PV的存储容量、访问模式需与PVC一致(Elasticsearch默认PVC请求10Gi,访问模式
ReadWriteOnce)。 - 示例PV配置文件(需创建3个,对应3个节点的PVC):
apiVersion: v1 kind: PersistentVolume metadata: name: elasticsearch-pv-0 spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: # 测试环境用hostPath,生产环境请替换为NFS、Ceph等持久化存储 path: /data/elasticsearch-0 claimRef: namespace: efk name: elasticsearch-master-elasticsearch-master-0 - 创建PV:
重复上述步骤创建kubectl apply -f pv.yamlelasticsearch-pv-1、elasticsearch-pv-2,对应另外两个PVC。
3. 禁用持久化(仅测试环境)
如果只是快速测试,不需要保留数据,可直接禁用持久化:
helm install elasticsearch elastic/elasticsearch -n efk --set persistence.enabled=false
内容的提问来源于stack exchange,提问作者kernel
相关产品推荐
相关产品推荐

