我们的k8s工作流程中有几个pod(作为服务/部署)彼此依赖,因此,如果一个pod进入CrashLoopBackOff
状态,则所有这些服务都需要重新部署。
不是必须手动执行此操作,有没有编程的方式来处理此问题?
当然,我们正在尝试弄清为何该豆荚崩溃了。
答案 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将无法进行活动探测,重新启动并等待服务重新联机。
这只是一个示例。当然,您的支票可能会有所不同。