k8s:pod has unbound PersistentVolumeClaims问题及解决方案
1. 背景
使用helm chart 部署redis-ha的时候 pod报错
pod has unbound PersistentVolumeClaims

2. 原因分析
查看了 redis-ha的 charts文件,发现value.yaml 中的storageClassName 取数为空,当storageClassName为空的时候如果没有指定 DefaultStorageClass ,那么是不会分配 pv给 claim的。
3. 说明一下DefaultStorageClass
PVC和PV的绑定是通过StorageClassName进行的。然而如果定义PVC时没有指定StorageClassName呢?
这取决与admission插件是否开启了DefaultDefaultStorageClass功能:
- 如果DefaultDefaultStorageClass功能开启,那么此PVC的StorageClassName就会被指定为DefaultStorageClass。DefaultStorageClass从何处而来呢?原来在定义StorageClass时,可以在Annotation中添加一个键值对:storageclass.kubernetes.io/is-default-class: true,那么此StorageClass就变成默认的StorageClass了。
- 如果DefaultDefaultStorageClass功能没有开启,那么没有指定StorageClassName的PVC只能被绑定到同样没有指定StorageClassName的PV。
- 查看了我们环境中的storageclass 定义,发现没有开启DefaultDefaultStorageClass功能。
4. 解决办法
修改chart 文件中的pvc 取值, 让storageClass=现有的storageclass name
创建storageClass(依据class.yaml 和 deployment.yaml )

[kubeadm@server1 dpv]$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE managed-nfs-storage westos/nfs Delete Immediate false 42m [kubeadm@server1 dpv]$
修改value.yaml

过一会儿再次查看pod状态 ,已经running
[kubeadm@server1 ~]$ kubectl get pod -n redis NAME READY STATUS RESTARTS AGE redis-ha-server-0 2/2 Running 0 22m redis-ha-server-1 2/2 Running 0 8m48s
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Windows下安装并使用kubectl查看K8S日志的操作方法
本文给大家介绍Windows下安装并使用kubectl查看K8S日志的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友安康下吧2025-06-06
kubernetes之statefulset搭建MySQL集群
这篇文章主要为大家介绍了kubernetes之statefulset搭建MySQL集群示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-04-04


最新评论