欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 给k8s中绑定pv并在容器中运行中使用的pvc扩容

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

2025/4/17 22:38:57 来源:https://blog.csdn.net/sinat_30893849/article/details/147056415  浏览:    关键词:给k8s中绑定pv并在容器中运行中使用的pvc扩容

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

发现故障并定位

今天打开好久不用的Vmware中的k8s集群,通过Lens发现有Prometheus服务的liveness 探针一直报错,也无法通过浏览器打开Prometheus;但是容器本身扔在运行,经查看同一个容器中的其他端口和服务也是正常的。
于是第一部,先通过kubectl logs 查看相应容器的错误。发现了如下的level是ERROR的错误一条,看起来是空间不够了。

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%占用了。

/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变更了。
在这里插入图片描述

# 命令格式 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来说,几乎是个无风险操作。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词