Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Error handling 管理具有依赖关系的多个POD的健康和幸福感_Error Handling_Kubernetes - Fatal编程技术网

Error handling 管理具有依赖关系的多个POD的健康和幸福感

Error handling 管理具有依赖关系的多个POD的健康和幸福感,error-handling,kubernetes,Error Handling,Kubernetes,在k8s工作流中,我们有几个相互依赖的POD(作为服务/部署),因此,如果一个POD进入CrashLoopBackOff状态,那么所有这些服务都需要重新部署 有没有一种程序化的方法来处理这个问题,而不必手动执行 当然,我们正在试图弄清楚为什么问题中的荚果正在崩溃。 < P>如果它们之间的关系如此紧密,我会考虑这些选择。 a) 如果pod暂时不可用,重新构建您的系统,使其具有更强的故障恢复能力和容忍能力 b) 将所有部件作为单独的容器放入一个吊舱中,使原子设计更加明确 如果这些不符合您的需要,您可

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

有没有一种程序化的方法来处理这个问题,而不必手动执行


当然,我们正在试图弄清楚为什么问题中的荚果正在崩溃。

< P>如果它们之间的关系如此紧密,我会考虑这些选择。 a) 如果pod暂时不可用,重新构建您的系统,使其具有更强的故障恢复能力和容忍能力 b) 将所有部件作为单独的容器放入一个吊舱中,使原子设计更加明确


如果这些不符合您的需要,您可以使用Kubernetes API创建一个程序,自动重新启动所有依赖部件的任务。有多种语言的客户端库,集成非常容易。下一步是定制资源定义(CRD),这样您就可以使用Kubernetes API的扩展来管理自己的系统。

首先要做的是确保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将无法启动liveness probe,重新启动并等待服务重新联机


这只是一个例子。在您的情况下,支票当然可以不同。

谢谢。我想到一个问题:如果我有一个具有多个副本的守护程序或部署,那么所有实例都必须关闭才能使liveness probe失败吗?我喜欢将多个容器添加到一个pod中的想法。我一直在研究在一个pod中部署多个容器的各种设计模式。我的用例要求有三个容器:两个容器需要是服务/部署(主机名需要用于在工作流中通信),第三个容器是启动使用部署的服务处理数据的流程的客户端。你认为侧车模式对客户有意义吗?如果是这样,我将如何在旋转侧车之前旋转我的两个容器作为
部署
规范?如果没有,那么您有什么建议?如果部署新版本/重新启动应用程序,为什么需要重新启动所有内容?kubernetes服务对象提供了稳定的主机名和稳定的ip地址,因此您可以重新启动底层应用程序,而依赖的应用程序只需在发生故障后重新连接即可。我并不意味着需要重新启动kubelet。所述应用程序有两个相关服务,在发生故障时需要重新部署,以便它们能够彼此同步。需要重新启动客户端,以便重新连接到应用程序并在发生故障时继续处理。问题是如何自动重新启动失败的容器进程而不再次失败。我假设使用@vasily angapov概述的liveness探测器可以重新启动处于良好状态的所有容器,而无需重新部署所有POD。