Kubernetes存活探针失败时,如何重启Pod内无健康端点的主容器?
实现方案:通过存活探针触发主容器重启
核心思路
借助具备健康端点的辅助容器的存活探针,通过exec执行命令重启主容器。关键前提是开启Pod的PID命名空间共享,让辅助容器能访问到主容器的进程。
具体配置步骤
开启Pod的PID共享
在Pod的spec字段中添加shareProcessNamespace: true,使Pod内所有容器共用同一个PID命名空间,这样辅助容器就能看到主容器的进程信息。配置辅助容器的存活探针
在辅助容器的存活探针里,先检测健康端点状态:如果检测成功则正常退出;如果失败,就执行命令终止主容器的进程,Kubernetes会自动重启主容器。
示例YAML配置
apiVersion: v1 kind: Pod metadata: name: multi-container-pod spec: shareProcessNamespace: true # 开启PID共享 containers: - name: main-container image: your-main-image:tag # 主容器无健康端点,无需配置探针 - name: health-check-container image: your-health-image:tag livenessProbe: exec: command: - /bin/sh - -c - | # 检测健康端点 if curl -f http://localhost:your-health-port/health-endpoint; then exit 0 else # 终止主容器进程(多数镜像的启动进程PID为1) kill 1 exit 1 fi initialDelaySeconds: 10 periodSeconds: 5
注意事项
- 进程PID定位:如果主容器的启动进程不是PID 1,需要调整
kill命令的目标PID。可以用pgrep <main-process-name>精准定位主容器进程,或者在辅助容器内执行ps aux查看进程列表。 - 权限与工具依赖:辅助容器需要具备执行
kill命令的权限,同时镜像要包含curl、kill、pgrep这类工具,推荐使用alpine这类自带基础工具的镜像。 - 重启逻辑:主容器进程被终止后,Kubernetes容器运行时会自动触发该容器的重启,满足需求。
内容的提问来源于stack exchange,提问作者Rohan
相关产品推荐
相关产品推荐

