我们在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探测失败,重新启动并等待服务重新在线。
这只是一个示例。在您的情况下,检查当然可能是不同的。