在Kubernetes中有没有办法控制Demonset的滚动更新方式?

时间:2019-07-15 09:53:41

标签: kubernetes

我有三个妖怪吊舱,每个吊舱中都包含一个hadoop资源管理器容器。三种之一是活动节点。另外两个是备用节点。 所以有两个问题:

  1. 有没有办法让kubernetes知道hadoop资源管理器 Pod内是活动节点还是备用节点?
  2. 我想控制滚动更新方式来首先更新备用节点,最后更新活动节点以减少次数 更改活动节点可能会导致风险。

2 个答案:

答案 0 :(得分:0)

我认为这不是最好的方法,完全理解您使用Daemonset可以确保Hadoop在每个节点的HA环境中存在,但是您可以通过使用部署和相似性参数来实现相同的方案,具体而言pod affinity,则可以确保每个K8S节点仅存在一个Hadoop节点。

有了这个新方法,您可以使用复制控制器来控制滚动更新,以及文档中的一些资源:

https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity https://kubernetes.io/docs/tasks/run-application/rolling-update-replication-controller/

答案 1 :(得分:0)

请考虑以下内容:DeploymentsDaemonSetsReplicaSets是用于管理一组统一对象的抽象。

在特定情况下,尽管您运行的是同一应用程序,但是您不能说这是一个统一的对象组,因为您有两种类型:活动待机对象。

没有办法告诉Kubernetes如果将它们分组在应该是统一对象集的对象中,那是哪个。

suggested by @wolmi一样,由于上述逻辑,将它们放在Deployment中而不是DaemonSet中仍然会导致deployment strategies can't individually identify objects来控制它们何时更新的问题。

我的建议是,除了将node affinityDeployment和{{3}}配合使用以确保高度可用的环境之外,还要将 active standby 分开不同Deployments/Services中的对象,并根据该方案制定滚动更新策略。

这将确保您首先更新 standby 节点,从而消除了先更新 active 节点的风险。