k8s: pod has unbound PersistentVolumeClaims问题解决

1. 背景

使用helm chart 部署redis-ha的时候 pod报错 pod has unbound PersistentVolumeClaims

k8s: pod has unbound PersistentVolumeClaims问题解决_第1张图片

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 )

k8s: pod has unbound PersistentVolumeClaims问题解决_第2张图片

[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

k8s: pod has unbound PersistentVolumeClaims问题解决_第3张图片

过一会儿再次查看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

你可能感兴趣的:(linux企业实战)