k8s:pod has unbound PersistentVolumeClaims问题及解决方案

 更新时间:2025年07月10日 09:16:57   作者:新是一切的根源  
部署redis-ha时,Pod因PVC未绑定报错,原因在于value.yaml中storageClassName为空,且未启用DefaultDefaultStorageClass,解决方法是手动指定PVC的StorageClassName为现有存储类,确保PV分配成功

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日志的操作方法

    本文给大家介绍Windows下安装并使用kubectl查看K8S日志的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友安康下吧
    2025-06-06
  • kubernetes k8s入门定义一个Pod

    kubernetes k8s入门定义一个Pod

    这篇文章主要为大家介绍了k8s入门定义一个Pod以及破底的定义内容详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多计步,早日升职加薪
    2022-03-03
  • Podman开机自启容器实现过程及与Docker对比

    Podman开机自启容器实现过程及与Docker对比

    这篇文章主要为大家介绍了Podman开机自启容器实现过程,通过示例代码的形式进行演绎过程,有需要的朋友可以参考下,希望可以有所帮助
    2021-09-09
  • k8s部署dashboard ui管理平台全过程

    k8s部署dashboard ui管理平台全过程

    Kubernetes仪表盘是一个用于管理和监控Kubernetes集群的Web界面,它是一个容器化应用,可以通过Kubernetes的API进行部署和管理,仪表盘提供了一个用户友好的界面,可以查看和管理集群中的资源,包括Pod、Deployment、Service等
    2026-01-01
  • Rancher部署配置开源Rainbond云原生应用管理平台

    Rancher部署配置开源Rainbond云原生应用管理平台

    这篇文章主要为大家介绍了Rancher部署配置开源Rainbond云原生应用管理平台,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • k8s进入容器实现方式

    k8s进入容器实现方式

    文章介绍了在Kubernetes(k8s)中进入容器的步骤,包括使用`kubectl get pod`命令获取容器名称,然后使用`kubectl exec -it <podname> /bin/bash`或`kubectl exec -it <podname> bash`命令进入容器,如果容器中没有`/bin/bash`,可以尝试使用`sh`
    2026-02-02
  • 2022最新青龙面板对接机器人的详细过程(傻妞对接onebot(oicq)协议实现机器人功能)

    2022最新青龙面板对接机器人的详细过程(傻妞对接onebot(oicq)协议实现机器人功能)

    这篇文章主要介绍了2022最新青龙面板对接机器人的详细过程(傻妞对接onebot(oicq)协议实现机器人功能),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • k8s pod获取ip地址实现方式

    k8s pod获取ip地址实现方式

    本文介绍了Kubernetes网络模型中各种网络组件的作用和交互方式,包括CRI、CNI接口,IPAM(IPAddressManagement),以及kubelet、cri、cni调用过程,Kubernetes通过这些组件确保每个Pod都有唯一的IP地址,并能够进行有效的通信
    2026-02-02
  • K8S 实用工具之合并多个kubeconfig实现详解

    K8S 实用工具之合并多个kubeconfig实现详解

    这篇文章主要为大家介绍了K8S 实用工具之合并多个kubeconfig实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Kubernetes Worker Node组件使用及说明

    Kubernetes Worker Node组件使用及说明

    这篇文章主要介绍了Kubernetes Worker Node组件使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2026-01-01

最新评论