【问题标题】:wait for other deployments to start running before other can be created?等待其他部署开始运行,然后才能创建其他部署?
【发布时间】:2018-10-23 18:44:21
【问题描述】:

我正在使用 REST API 创建部署/服务。我发送 POST 请求,其中包含在 Openshift 上创建应用程序的 JSON 对象。在我调用所有 API 之后,这些对象会被实例化。

我有 2 个部署依赖于 mongodb 部署,但是这个 mongodb 需要更长的时间才能开始运行,而依赖于 mongodb 的两个部署开始运行得更早。这会破坏 2 个部署中的代码,因为 mongodb 连接失败(因为它尚未启动)。

可能有两种方法可以解决这个问题。

  1. 我在创建 mongodb 部署并递归调用 API 以检查其状态是否正在运行后进行了延迟。

  2. 就像我们在 docker-compose 中进行更改一样,使用密钥 depends-on 告诉 docker-compose 应该先启动所有依赖项,然后启动依赖容器。

有什么方法可以在 openshift 中实现吗?

【问题讨论】:

    标签: mongodb docker kubernetes docker-compose openshift


    【解决方案1】:

    Alex 指出了 Kubernetes 的正确做法。但是,如果您仍然想直接依赖其他 pod phase,您可以使用我构建的这个 pod-dependency-init-container。这将在启动您的 pod 之前检查是否有任何具有给定 labels 的 pod 正在运行。

    【讨论】:

      【解决方案2】:

      不要为依赖处理实现复杂的逻辑,而是使用 Kubernetes 的健康检查机制。如果您的应用程序启动并且没有看到 Mongo DB,让它崩溃。 Kubernetes 将不断重启它,直到 Mongo DB 上线,并且您的应用程序变得健康并可以正常运行。 Kubernetes 不会向尚未健康的实例发送流量。

      文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/

      【讨论】:

        【解决方案3】:

        就像我们在 docker-compose 中进行更改一样,使用密钥 depends-on 告诉 docker-compose 应该先启动所有依赖项,然后启动依赖容器。

        • 您可能想查看 Init Containers 以获取依赖容器。它们在容器实际启动之前运行完成。以下摘录摘自可能适用于您的问题的用例的参考文档(如下所示):

          • 它们在任何应用容器启动之前运行完成,而应用容器并行运行,因此初始化容器提供了一种简单的方法来阻止或延迟应用容器的启动,直到满足某些先决条件。

            示例

            以下是有关如何使用 Init Containers 的一些想法:

            • 等待使用 shell 命令创建服务,例如:

              for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
              
            • 使用以下命令从向下 API 向远程服务器注册此 Pod:

              curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d ‘instance=$()&ip=$()’
              
            • 等待一段时间,然后使用 sleep 60 之类的命令启动应用容器。

        • 参考文档:
          https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-16
          • 1970-01-01
          • 2016-10-15
          • 2020-10-28
          • 1970-01-01
          相关资源
          最近更新 更多