K8s PersistentVolume持久化存储配置后Deployment部署报错咨询
问题排查结果
配置错误及修正方案:
第一处核心错误:Deployment字段拼写错误
volumes字段下的persistentVolumeClain为错误拼写,正确字段名为persistentVolumeClaim(缺少字母m),这是配置直接加载失败的核心原因。
修正后的对应配置段:- name: task-pv-storage persistentVolumeClaim: claimName: task-pv-claim第二处错误:PV的hostPath路径不符合规范
当前PV配置中hostPath填写的是相对路径kpi-mon/configurations,K8s要求hostPath必须为节点上的绝对路径,需要修改为以/开头的完整路径,例如/data/kpi-mon/configurations。同时需要提前在PV要调度到的节点上创建对应目录,配置合适的读写权限,避免启动时报目录不存在或权限不足错误。第三处不规范配置:挂载路径使用相对路径
Deployment的volumeMounts中mountPath: "kpi-mon/configurations"同样使用了相对路径,容器内工作目录发生变更时会导致存储挂载位置不符合预期,建议修改为容器内的绝对路径,例如/opt/kpi-mon/configurations。第四处潜在风险:本地PV缺少节点亲和性配置
你使用的是hostPath类型的本地PV,多节点集群场景下如果未配置nodeAffinity指定PV所属节点,Pod可能被调度到没有对应hostPath目录的节点,导致PVC绑定失败、Pod启动异常。单节点集群可忽略该问题,多节点集群需要在PV的spec字段下补充节点亲和性配置,示例如下:spec: # 保留原有PV配置 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - 你的目标节点主机名
验证步骤
所有配置修改完成后重新apply,先创建PV和PVC,执行kubectl get pvc确认PVC处于Bound状态后再发布Deployment即可。
内容的提问来源于stack exchange,提问作者Dan Shmirer

