困扰多年的 Kubernetes 健康检查问题终于解决了

我们有一个部署在 k8s 上的应用被一个健康检查问题困扰多年,每次发布时由于健康检查(readiness probe)失败,pod 要被重启很多次,快的话要等半小时到1小时 pod 才能启动成功,慢的话要等几小时甚至十几个小时,最近一次最夸张,pod 重启了2天才启动成功,重启了300多次。

NAME                             READY   STATUS    RESTARTS          AGE     IP
i-web-2.1.374-75d745d9f-8l4zm    1/2     Running   328 (84s ago)     35h     192.168.39.73

pod 重启是因为健康检查时出现 connection refused 错误

Liveness probe failed: Get "http://192.168.242.152:80/alive": dial tcp 192.168.242.152:80: connect: connection refused
Container i-web failed liveness probe, will be restarted
Readiness probe failed: Get "http://192.168.242.152:80/alive": dial tcp 192.168.242.152:80: connect: connection refused

昨天终于找到了原因,是 deployment 中 volumeMounts 挂载了 2 个 nas 路径引起的

volumeMounts
- name: nas
  mountPath: /app/logs
  subPath: logs/i/web/
- name: nas
  mountPath: /app/App_Data
  subPath: appdata/i/backup

2个 nas 挂载对应的是同一个 volume,PersistentVolume 使用的是阿里云文件存储 nas

volumes:
- name: nas
  persistentVolumeClaim:
    claimName: pvc-nas-production

去掉其中一个挂载,问题就解决了。

之前这 2 个挂载对应的是 2 个不同的阿里云 nas,后来排查 pod 重启问题时以为是同一个 pod 挂载 2 个不同 nas 引起的,于是改为使用同一个 nas volume 挂载2个路径,但问题依旧,于是就没有继续从 nas 角度排查问题,原来一个 pod 不仅不能同时挂载 2 个 nas,而且不能挂载同一个 nas 的 2 个 不同路径。

2月9日更新:后来又发现一个影响因素,所挂载的 nas 路径 appdata/i/backup 中有几十万文件夹,也会部分地引起各个问题,将挂载路径改为上一级 appdata/i/ 可以避开问题。

posted @ 2023-02-28 08:34  dudu  阅读(2781)  评论(2编辑  收藏  举报