1

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

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

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

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

4

2 回答 2

2

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

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

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

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

于 2018-05-20T15:31:49.017 回答
2

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

于 2018-05-20T16:29:59.643 回答