You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s StatefulSet创建Pod时PV绑定失败问题求助

问题排查与修复建议

1. 修正PV节点亲和性的拼写错误

你的PV配置里,节点亲和性的标签key写错了:kubernets.io/hostname 多了一个e,正确的key是 kubernetes.io/hostname。这是导致PV无法匹配节点的核心原因。

修改PV的nodeAffinity部分:

nodeAffinity:
  required:
    nodeSelectorTerms:
      - matchExpressions:
          - key: kubernetes.io/hostname  # 修正拼写错误
            operator: In
            values:
              - docker-desktop

2. 修复PVC的API版本拼写错误

你的PVC YAML里piVersion是拼写错误,正确写法是apiVersion: v1,这个错误会导致PVC无法正常创建或匹配PV。

修正后的PVC配置:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mongo-pvc
spec:
  storageClassName: mongo-storage
  resources:
    requests:
      storage: 1Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce

3. 确认本地存储路径的存在与权限

你使用的是local类型PV,节点上的/mnt/disk/vol1路径必须真实存在,且Kubernetes进程对该路径有读写权限:

  • 进入docker-desktop节点:docker exec -it docker-desktop bash
  • 创建路径:mkdir -p /mnt/disk/vol1
  • 设置权限:chmod 777 /mnt/disk/vol1(测试环境临时使用,生产环境建议设置更严格的权限)

4. 重新应用配置并验证绑定状态

修正上述错误后,重新部署所有组件:

kubectl apply -f storageclass.yaml
kubectl apply -f pv.yaml
kubectl apply -f pvc.yaml
kubectl apply -f statefulset.yaml

执行kubectl get pvc检查PVC状态,若状态变为Bound,说明PV与PVC绑定成功,Pod应该能正常调度。

5. StatefulSet使用volumeClaimTemplate的正确姿势

如果要使用volumeClaimTemplate,需删除手动创建的PVC,同时StatefulSet的volumeMounts要直接引用模板名称,无需手动配置volumes:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo-statefulset
spec:
  selector:
    matchLabels:
      app: mongo-pod
  serviceName: mongo-clusterip-service
  replicas: 1
  volumeClaimTemplates:
    - metadata:
        name: mongo-vctemplate
      spec:
        storageClassName: mongo-storage
        accessModes: 
          - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi  
  template:
    metadata:
      labels:
        app: mongo-pod
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo-container
          image: mongo
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-vctemplate  # 引用volumeClaimTemplate的名称
              mountPath: /data/db

这种配置下,Kubernetes会自动为每个StatefulSet Pod创建对应的PVC,并匹配到可用的PV。


内容的提问来源于stack exchange,提问作者Vincenzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:27:31