我的Consul在我的集群中运行,每个节点都运行一个consul-agent作为DaemonSet。我还有其他与Consul交互的DaemonSets,因此需要运行一个consul-agent才能与Consul服务器进行通信。
我的问题是,如果我的DaemonSet在consul-agent之前启动,那么应用程序将会出错,因为它无法连接到Consul并随后重新启动。
我也注意到其他DaemonSets存在同样的问题,例如Weave,因为它需要kube-proxy和kube-dns。如果首先启动Weave,它将不断重启,直到kube服务准备就绪。
我知道我可以在我的应用程序中添加重试逻辑,但我想知道是否可以指定DaemonSets的安排顺序?
答案 0 :(得分:1)
Kubernetes本身并没有提供一种方法来实现pods / deploymentments / services之间的特定依赖关系(例如,“仅当服务B可用时才启动pod A”或“pod B之后启动pod A”)。
当前的方法(基于我在研究这个时发现的)似乎是重试逻辑或初始容器。引用docs:
它们在任何应用容器启动之前运行完成,而应用容器并行运行,因此Init容器提供了一种简单的方法来阻止或延迟应用容器的启动,直到满足一组前置条件。
这意味着您可以向应用程序添加重试逻辑(我建议这可能会在不同的情况下帮助您,例如短暂的服务中断)我们可以使用通过Kubernetes服务轮询健康端点的init容器直到得到令人满意的回应为止。
答案 1 :(得分:1)
重试逻辑优于启动依赖性排序,因为它处理初始启动情况和从启动后中断恢复