【发布时间】:2019-01-09 18:47:54
【问题描述】:
我想在任何节点上运行应用程序。每个节点应始终至少有一个实例,但允许更多实例,主要是在更新期间以防止该 pod(和节点)停机。
Kubernetes 部署更新通常通过启动一个新的 pod 来工作,一旦它可用,旧的就会终止。这是完美的,但在我的情况下,我需要一个 DaemonSet 来始终在所有节点上启动一个特定的应用程序。然而,当更新这个 DaemonSet 时,Kubernetes 会一个一个地杀死一个 pod(即逐个节点)然后然后启动一个新的 pod,这意味着在更新期间的任何给定时间,该 pod 都可能没有运行在一个节点上。
与部署相比,似乎 DaemonSet 是正确的方法,但在更新 DaemonSet 时我找不到任何方法来防止停机。有没有办法做到这一点?我还考虑过使用 Deployments 并手动更新副本数量和 antiPodAffinity,以便每个节点只部署一个 pod,但这有点 hacky。
【问题讨论】:
-
这被搁置了 (github.com/kubernetes/kubernetes/pull/51161)。所以这是不可能的。
-
另一种方法是蓝绿部署。运行旧的和新的守护程序集,然后一旦您满意不会发生回滚,您可以删除旧的守护程序集。作为不利因素,您会暂时将足迹翻倍。
标签: kubernetes