通过依赖关系管理多个Pod的健康状况

时间:2019-05-05 16:16:02

标签: error-handling kubernetes

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

不是必须手动执行此操作,有没有编程的方式来处理此问题?

当然,我们正在尝试弄清为何该豆荚崩溃了。

2 个答案:

答案 0 :(得分:1)

如果这些彼此之间非常紧密地依赖,我会考虑这些选项 a)如果吊舱暂时不可用,请重新设计系统,以更灵活地应对故障并容忍 b)将所有零件作为单独的容器放入一个容器中,使原子设计更加明确

如果这些都不满足您的需求,则可以使用Kubernetes API创建一个程序,该程序可以自动执行重新启动所有相关零件的任务。有用于多种语言的客户端库,集成非常容易。下一步将是自定义资源定义(CRD),以便您可以使用Kubernetes API的扩展名来管理自己的系统。

答案 1 :(得分:1)

首先要做的是确保按正确的顺序启动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

  spec:
    livenessProbe:
      exec:
        command:
        - /bin/sh
        - -c
        - curl http://config-srv/actuator/health &&
          curl http://registry-srv/actuator/health &&
          curl http://rabbitmq:15672

现在,如果其中任何一项服务失败-您的pod将无法进行活动探测,重新启动并等待服务重新联机。

这只是一个示例。当然,您的支票可能会有所不同。