给k8s中绑定pv并在容器中运行中使用的pvc扩容

今天写一个简单的排错,主要是对容器使用中的pv,通过修改pvc的方式实现自动扩容。

发现故障并定位

今天打开好久不用的Vmware中的k8s集群,通过Lens发现有Prometheus服务的liveness 探针一直报错,也无法通过浏览器打开Prometheus;但是容器本身扔在运行,经查看同一个容器中的其他端口和服务也是正常的。

于是第一部,先通过kubectl logs 查看相应容器的错误。发现了如下的level是ERROR的错误一条,看起来是空间不够了。

bash 复制代码
time=2025-04-07T17:14:28.790Z level=ERROR source=head.go:698 msg="Loading on-disk chunks failed" component=tsdb err="iterate on on-disk chunks: corruption in head chunk file /prometheus/chunks_head/000031: head chunk file doesn't include enough bytes to read the chunk header - required:131264, available:131072, file:31"

因为这个是个Stateful, 容器需要PV来存储TSDB的数据,那就看一下这个容器相关pv和pvc的情况。查到这个果然是PVC动态生成的PV。

到PV实际所在的服务器,通过df-h命令查看,发现果然100%占用了。

bash 复制代码
/dev/dm-2       2.0G  2.0G  1.3M 100% /var/lib/kubelet/pods/54dcd1ea-51a8-49e6-b2c6-ded191e5f9bc/volumes/kubernetes.io~csi/pvc-4476e1d1-b45c-4d81-b65a-82e15e610668/mount

思考方案并解决问题

接下来就简单了, 总体来说 只要给PVC扩容就可以了。但是是否PV和绑定PV的容器都支持动态扩容呢? 我从来没做过了,所有要先研究下看看。

经查,我使用的用来动态通过PVC生成PV的SC 存储类 topolvm-provisioner是支持扩容的。 那就可以修改PVC然后触发PV变更了。

bash 复制代码
# 命令格式 kubectl edit pvc $pvc-name -n $NS
root@master:/opt/k8sconfig# k edit pvc prometheus-prometheus-stack-kube-prom-prometheus-db-prometheus-prometheus-stack-kube-prom-prometheus-0 -n monitoring
persistentvolumeclaim/prometheus-prometheus-stack-kube-prom-prometheus-db-prometheus-prometheus-stack-kube-prom-prometheus-0 edited

修改好PVC后,同步检测发现PV的容量已经扩大了,而我没有任何操作;同时容器仍旧报错。

接下来,直接删除旧容器,k8s根据原有的声明中的容器数量,马上生成了一个新容器,并继续bunding旧有且已扩容过的PV,故障排除了。

总结

  1. 和处理其他任何IT故障一样,有问题先看日志
  2. 大部分通过PVC动态创建的PV支持扩容,扩容方式就是简单的修改PVC配置文件
  3. 必要时,需要通过删除运行中的旧容器来使扩容的PV重新和容器绑定。不要犹豫,删除容器对k8s来说,几乎是个无风险操作。
相关推荐
能不能别报错8 小时前
K8s学习笔记(十二) volume存储卷
笔记·学习·kubernetes
致宏Rex10 小时前
Docker 完整教程 | 从基础到实战 (1-2)
运维·docker·容器
爱码社长12 小时前
centos8安装docker【新】
运维·docker·容器
yuezhilangniao15 小时前
从对比eBPF和istio开始 ~ 了解eBPF
云原生·kubernetes·istio·ebpf
東雪蓮☆16 小时前
从安装到上手实战——Docker 基础命令全解析
运维·docker·容器
Gss77717 小时前
Docker 镜像知识总结
运维·docker·容器
梁正雄17 小时前
1、docker入门简介
运维·docker·容器
東雪蓮☆17 小时前
Docker 数据卷与存储机制(持久化与共享实战)
运维·docker·容器
红尘客栈218 小时前
保姆级 Docker 入门到进阶
运维·docker·容器
lingggggaaaa18 小时前
小迪安全v2023学习笔记(九十五讲)—— 云原生篇&Docker安全&权限环境检测&容器逃逸&特权模式&危险挂载
笔记·学习·安全·web安全·网络安全·docker·云原生