error-handling - 管理具有依赖关系的多个 pod 的健康状况
问题描述
我们的 k8s 工作流程中有几个 pod(作为服务/部署),它们相互依赖,因此如果一个进入某个CrashLoopBackOff
状态,那么所有这些服务都需要重新部署。
不必手动执行此操作,是否有程序化方式来处理此问题?
当然,我们正试图找出问题中的 pod 崩溃的原因。
解决方案
首先要做的是确保以正确的顺序启动 pod。这可以使用 initContainers 来完成,如下所示:
spec:
initContainers:
- name: waitfor
image: jwilder/dockerize
args:
- -wait
- "http://config-srv/actuator/health"
- -wait
- "http://registry-srv/actuator/health"
- -wait
- "http://rabbitmq:15672"
- -timeout
- 600s
在列表中的所有服务都响应 HTTP 探测之前,您的 pod 不会启动。
接下来,您可能想要定义定期执行 curl 到相同服务的 liveness 探针
spec:
livenessProbe:
exec:
command:
- /bin/sh
- -c
- curl http://config-srv/actuator/health &&
curl http://registry-srv/actuator/health &&
curl http://rabbitmq:15672
现在,如果这些服务中的任何一个发生故障 - 您的 pod 将无法进行活性探测,重新启动并等待服务重新联机。
这只是一个示例。在您的情况下,检查当然可以不同。