首页 > 解决方案 > 管理具有依赖关系的多个 pod 的健康状况

问题描述

我们的 k8s 工作流程中有几个 pod(作为服务/部署),它们相互依赖,因此如果一个进入某个CrashLoopBackOff状态,那么所有这些服务都需要重新部署。

不必手动执行此操作,是否有程序化方式来处理此问题?

当然,我们正试图找出问题中的 pod 崩溃的原因。

标签: error-handlingkubernetes

解决方案


首先要做的是确保以正确的顺序启动 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 将无法进行活性探测,重新启动并等待服务重新联机。

这只是一个示例。在您的情况下,检查当然可以不同。


推荐阅读