单节点Minikube中StatefulSet第二个副本Pending问题排查求助
问题原因分析
你遇到的第二个StatefulSet副本Pending的核心原因是静态PV数量不足,且本地存储PV无法被多个PVC复用,具体细节如下:
1. 静态存储供给下PV数量不匹配
你的StorageClass使用kubernetes.io/no-provisioner,属于静态存储供给,Kubernetes不会自动为PVC创建PV,必须手动提前准备足够的PV资源:
- 你只创建了1个名为
mongodb-pv的PV - StatefulSet设置了
replicas: 2,其volumeClaimTemplates会为每个副本自动创建1个PVC(分别是mongo-data-mongodb-0和mongo-data-mongodb-1) - 第一个PVC已经绑定了唯一的PV,第二个PVC找不到可用的PV进行绑定,导致调度失败
2. 本地PV的特性限制
即使你把现有PV的容量调大,也无法解决问题:
- PV的
accessModes是ReadWriteOnce,意味着一个PV只能被单个节点上的单个Pod挂载 - 本地存储的
hostPath是节点上的固定路径,多个Pod挂载同一路径会导致数据冲突,Kubernetes也不允许这种绑定
解决建议
- 手动创建第二个PV:为第二个副本准备独立的PV,注意修改
metadata.name和spec.hostPath.path(比如/data/mongodb-1),保持storageClassName: local-storage,容量满足5Gi请求apiVersion: v1 kind: PersistentVolume metadata: name: mongodb-pv-1 namespace: app spec: persistentVolumeReclaimPolicy: Delete storageClassName: local-storage capacity: storage: 5Gi accessModes: - ReadWriteOnce hostPath: path: /data/mongodb-1 - 如果你需要动态创建本地PV,可以考虑使用
local-path-provisioner替代no-provisioner,它能自动为PVC在节点上创建独立的本地目录
注意:单节点Minikube运行MongoDB副本集本身有风险,因为所有副本都在同一个节点上,无法实现真正的高可用,仅适合测试场景。
内容的提问来源于stack exchange,提问作者psowa001
相关产品推荐
相关产品推荐

