Kubernetes Cassandra Pod调度失败:Pending状态问题求助
解决Cassandra StatefulSet Pod Pending(PVC无绑定PV)问题
排查与修复步骤
1. 确认存储类fast的有效性
首先检查集群中是否存在状态正常的fast存储类:
kubectl get storageclasses.storage.k8s.io
- 若输出中无
fast存储类,需手动创建:
执行创建命令:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast provisioner: k8s.io/minikube-hostpath reclaimPolicy: Retain volumeBindingMode: Immediatekubectl apply -f storageclass.yaml - 若
fast存储类存在但状态不为Available,检查provisioner配置是否为k8s.io/minikube-hostpath,或重启minikube集群尝试恢复。
2. 检查PVC的存储请求与集群能力
查看目标PVC的详细信息:
kubectl describe pvc cassandra-data-cassandra-0
重点关注Resources.Requests.Storage字段:
- 若请求的存储容量超过minikube节点剩余磁盘空间,调整StatefulSet中
volumeClaimTemplates的storage值为合理范围(如10Gi以内),重新部署。
3. 验证minikube hostpath存储目录权限
minikube的k8s.io/minikube-hostpath provisioner默认使用/tmp/hostpath-provisioner目录存储PV数据,需确保kubelet有读写权限:
minikube ssh sudo chmod 777 /tmp/hostpath-provisioner exit
4. 修正StatefulSet的存储配置
- 若保留
storageClassName配置:确保volumeClaimTemplates中指定的storageClassName: "fast"与集群中存在的存储类名称完全一致。 - 若注释
storageClassName:必须确保集群存在默认存储类(执行kubectl get sc查看带有(default)标记的存储类)。若无默认存储类,给fast存储类添加默认标记:kubectl patch storageclass fast -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
5. 彻底清理残留资源后重新部署
删除所有相关残留资源:
kubectl delete statefulset cassandra kubectl delete pvc cassandra-data-cassandra-0 kubectl delete pv --selector app=cassandra
重新部署Headless Service和StatefulSet。
内容的提问来源于stack exchange,提问作者Raphael10
相关产品推荐
相关产品推荐

