管理具有依赖性的多个豆荚的健康和健康



我们在K8S工作流程中有几个POD(作为服务/部署(彼此依赖,因此,如果一个人进入CrashLoopBackOff状态,那么所有这些服务都需要重新运输。

而不是必须手动执行此操作,而是有程序的处理方式?

当然,我们正在尝试弄清楚为什么所讨论的吊舱崩溃。

如果它们彼此紧密依赖,我会考虑这些选项a(将您的系统搜索以使失败和容忍更具弹性,如果豆荚是暂时的b(将所有零件作为单独的容器放入一个吊舱中,使原子设计更加明确

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

要做的第一件事是确保以正确的顺序启动豆荚。这可以使用类似的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探针。

接下来,您可能需要定义Livices探测,以定期执行卷发到同一服务

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

现在,如果这些服务中的任何一个失败 - 您的POD将使Livices探测失败,重新启动并等待服务重新在线。

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

最新更新