给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来说,几乎是个无风险操作。
相关推荐
辉辉健身中3 小时前
docker和k8s的区别
docker·容器·kubernetes
Json_4 小时前
使用Docker部署ZLMediaKit流媒体服务器实现gb/t28181协议的设备
服务器·docker·容器
SRE工程师4 小时前
Docker的端口映射问题(庖丁解牛)
运维·docker·容器
Aurora-silas5 小时前
Docker 入门指南:从基础概念到常见命令及高级工具详解
运维·docker·容器
无聊的HZ5 小时前
docker常用命令有哪些
运维·docker·容器
●VON5 小时前
如何通过docker进行本地部署?
java·docker·容器
lovebugs6 小时前
Kubernetes 实战:Java 应用配置与多环境管理
后端·面试·kubernetes
鸠摩智首席音效师6 小时前
如何清除 Docker 容器的日志 ?
运维·docker·容器
邂逅星河浪漫10 小时前
Docker 详解+示例
linux·docker·容器·kafka