本地K8s集群部署Vault用于证书管理遇Pod/PV Pending问题
问题:Vault StatefulSet Pod 持续处于 Pending 状态
按照HashiCorp的Vault+Kubernetes证书管理教程部署后,vault-0 Pod一直处于Pending状态,对应的data-vault-0 PersistentVolumeClaim(PVC)也无法绑定到PersistentVolume(PV)。
Pod 状态信息
NAME READY STATUS RESTARTS AGE vault-0 0/1 Pending 0 12m
Pod 事件详情
LAST SEEN TYPE REASON OBJECT MESSAGE 50m (x5 over 65m) Warning FailedScheduling Pod/vault-0 0/2 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling. 49m (x2 over 65m) Normal SuccessfulCreate StatefulSet/vault create Pod vault-0 in StatefulSet vault successful 45m (x82 over 65m) Normal FailedBinding PersistentVolumeClaim/data-vault-0 no persistent volumes available for this claim and no storage class is set 44m (x2 over 49m) Warning FailedScheduling Pod/vault-0 0/2 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling. 44m Normal Killing Pod/vault-agent-injector-66f45b5fd5-nmhtx Stopping container sidecar-injector 29m Warning FailedScheduling Pod/vault-0 0/2 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling. 26m Normal SuccessfulDelete StatefulSet/vault delete Pod vault-0 in StatefulSet vault successful 23m (x24 over 29m) Normal FailedBinding PersistentVolumeClaim/data-vault-0 no persistent volumes available for this claim and no storage class is set 23m (x2 over 29m) Normal SuccessfulCreate StatefulSet/vault create Claim data-vault-0 Pod vault-0 in StatefulSet vault success 23m (x2 over 29m) Normal SuccessfulCreate StatefulSet/vault create Pod vault-0 in StatefulSet vault successful 2m48s (x82 over 23m) Normal FailedBinding PersistentVolumeClaim/data-vault-0 no persistent volumes available for this claim and no storage class is set 2m36s (x5 over 23m) Warning FailedScheduling Pod/vault-0 0/2 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling.
解决方案
事件日志明确指出核心问题:no persistent volumes available for this claim and no storage class is set(PVC未指定存储类,且集群无可用PV自动绑定),按以下步骤解决:
1. 检查集群存储类
执行命令查看当前集群的存储类:
kubectl get storageclasses
记录可用存储类的名称(如云厂商的gp2、standard,或本地集群的自定义存储类)。
2. 为Vault PVC指定存储类
方式一:修改StatefulSet的PVC模板
编辑Vault StatefulSet:
kubectl edit statefulset vault
找到spec.volumeClaimTemplates节点,添加storageClassName字段:
volumeClaimTemplates: - metadata: name: data spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "你的存储类名称" resources: requests: storage: 10Gi
保存退出后,StatefulSet会自动重建PVC和Pod。
方式二:直接修改已存在的PVC
若不想重建StatefulSet,直接编辑data-vault-0 PVC:
kubectl edit pvc data-vault-0
添加storageClassName字段:
spec: storageClassName: "你的存储类名称" accessModes: - ReadWriteOnce resources: requests: storage: 10Gi
3. 无可用存储类时创建存储类
如果集群没有任何存储类,需根据环境创建对应存储类:
- 测试集群(如Minikube):可创建
hostPath存储类 - 云厂商集群:参考云服务商文档创建存储类(如AWS EBS、Azure Disk)
示例:创建hostPath存储类(仅用于测试)
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer
保存为storageclass.yaml后执行:
kubectl apply -f storageclass.yaml
再按步骤2为PVC指定该存储类。
4. 验证状态
执行以下命令查看PVC和Pod状态,当PVC变为Bound后,Pod会自动调度:
kubectl get pvc data-vault-0 kubectl get pod vault-0
内容的提问来源于stack exchange,提问作者Delyan
相关产品推荐
相关产品推荐

