【问题标题】:Kubernetes - waiting on Oracle DB containerKubernetes - 等待 Oracle DB 容器
【发布时间】:2022-03-01 17:26:04
【问题描述】:

为一个基本问题道歉。我有一个简单的 Kubernetes 部署,其中我有 3 个容器(每个容器都在自己的 pod 中)部署到 Kubernetes 集群。

RESTapi 容器依赖于 OracleDB 容器的启动。但是,OracleDB 容器需要一段时间才能启动,到那时,RESTapi 容器由于无法连接而重新启动了多次,并最终处于Backoff 状态。

有没有更优雅的解决方案?

我还注意到,当 RESTapi 容器进入 Backoff 状态时,它会停止重试?

【问题讨论】:

    标签: kubernetes containers


    【解决方案1】:

    这是为提高可见性而发布的社区 wiki 答案。随意扩展它。

    在这种情况下,最好的方法是改进您的“RESTapi”应用程序,以提供更可靠和容错的服务,使其无论如何都能重新连接到数据库。

    来自Kubernetes production best practices

    当应用程序启动时,它不应该因为依赖项而崩溃,例如 数据库还没有准备好。

    相反,应用应不断重试连接到数据库,直到 成功了。

    Kubernetes 期望应用程序组件可以在任何 顺序。

    在其他情况下,您可以使用Init Containers 的解决方案。

    您可以查看此question on stackoverflow,这只是所描述案例中有关 Init Containers 实际使用的众多其他内容之一。

    【讨论】:

      【解决方案2】:

      实现此目的的一种优雅方法是结合使用 Kubernetes Init Containersk8s-wait-for 脚本。

      基本上,您要做的是为您的 RESTapi 配置一个使用 k8s-wait-for 的 Init 容器。您配置 k8s-wait-for 以等待特定 pod 处于给定状态,在这种情况下,您可以提供 OracleDB pod 并等待它处于 Ready 状态。

      结果是 RESTapi 的部署将暂停,直到 OracleDB 准备就绪。这应该可以缓解不断重启的情况。

      https://github.com/groundnuty/k8s-wait-for

      【讨论】:

        猜你喜欢
        • 2016-06-06
        • 2022-01-14
        • 1970-01-01
        • 2019-03-02
        • 1970-01-01
        • 2021-01-12
        • 2021-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多