【问题标题】:Specify scheduling order of a Kubernetes DaemonSet指定 Kubernetes DaemonSet 的调度顺序
【发布时间】:2018-05-20 12:50:56
【问题描述】:

我的集群中运行着 Consul,每个节点都运行一个 consul-agent 作为 DaemonSet。我还有其他与 Consul 交互的 DaemonSet,因此需要运行 consul-agent 才能与 Consul 服务器通信。

我的问题是,如果我的 DaemonSet 在 consul-agent 之前启动,应用程序将会出错,因为它无法连接到 Consul 并随后重新启动。

我也注意到其他 DaemonSet 存在同样的问题,例如 Weave,因为它需要 kube-proxy 和 kube-dns。如果 Weave 先启动,它会不断重启,直到 kube 服务准备好。

我知道我可以向我的应用程序添加重试逻辑,但我想知道是否可以指定 DaemonSet 的调度顺序?

【问题讨论】:

    标签: kubernetes scheduler daemonset


    【解决方案1】:

    Kubernetes 本身并没有提供一种方法来处理 pod/部署/服务之间的特定依赖关系(例如“仅当服务 B 可用时启动 pod A”或“在 pod B 之后启动 pod A”)。

    正确的方法(基于我在研究时发现的)似乎是重试逻辑或初始化容器。引用docs

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

    这意味着您可以向您的应用程序添加重试逻辑(我建议您这样做,因为它可能会在不同的情况下(例如短暂的服务中断)为您提供帮助)我们可以使用通过 Kubernetes 服务轮询健康端点的 init 容器直到得到满意的回应为止。

    【讨论】:

      【解决方案2】:

      重试逻辑优先于启动依赖排序,因为它处理初始启动情况和启动后中断恢复

      【讨论】:

        猜你喜欢
        • 2018-03-18
        • 2020-05-17
        • 2018-07-07
        • 2015-02-26
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多