给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来说,几乎是个无风险操作。
相关推荐
江畔柳前堤1 天前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
heimeiyingwang1 天前
【架构实战】Kubernetes调度器深度剖析:从Pod调度到自定义调度器
java·架构·kubernetes
阿里云云原生1 天前
五层监控与运维数字孪生:畅捷通如何打造应对亿级数据的全栈可观测体系?
云原生
阿里云云原生1 天前
从“救火”到“体检”:基于 STAROps 与 SysOM 的主机智能巡检闭环实战
云原生
上海安当技术1 天前
统一身份认证平台怎么落地?11 个异构业务系统接入 ASP 的完整实施路径
数据库·servlet·架构·kubernetes·jenkins
阿里云云原生1 天前
国内首批,阿里云 STAROps 通过《智能原生软件工程》系列标准认证
云原生
yj_xqj2 天前
Docker 基础应用与介绍
运维·docker·容器
AOwhisky2 天前
Docker 深度集成 WasmEdge:容器与 Wasm 的边界正在消失
docker·容器·wasm
码上上班2 天前
JumpServer 企业完整实操手册
容器
运维大师2 天前
【K8S 运维实战】32-GitOps实践ArgoCD
运维·kubernetes·argocd