我有三个妖怪吊舱,每个吊舱中都包含一个hadoop资源管理器容器。三种之一是活动节点。另外两个是备用节点。 所以有两个问题:
答案 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)
请考虑以下内容:Deployments
,DaemonSets
和ReplicaSets
是用于管理一组统一对象的抽象。
在特定情况下,尽管您运行的是同一应用程序,但是您不能说这是一个统一的对象组,因为您有两种类型:活动和待机对象。
没有办法告诉Kubernetes如果将它们分组在应该是统一对象集的对象中,那是哪个。
与suggested by @wolmi一样,由于上述逻辑,将它们放在Deployment
中而不是DaemonSet中仍然会导致deployment strategies can't individually identify objects来控制它们何时更新的问题。
我的建议是,除了将node affinity
与Deployment
和{{3}}配合使用以确保高度可用的环境之外,还要将 active 和 standby 分开不同Deployments/Services
中的对象,并根据该方案制定滚动更新策略。
这将确保您首先更新 standby 节点,从而消除了先更新 active 节点的风险。