在Kubernetes中的节点上只允许一个类型的pod

时间:2016-01-08 03:08:12

标签: kubernetes google-kubernetes-engine

如何在Kubernetes中的节点上只允许一个类型的pod。守护进程集并不适合这个用例。

例如 - 限制在节点上仅安排一个Elasticsearch pod,以防止在节点出现故障时丢失数据。

可以通过仔细规划pod的CPU /内存资源和集群的机器类型来实现。

还有其他方法吗?

3 个答案:

答案 0 :(得分:1)

如果为pod分配一个每个节点最多只能满足一次的约束,则调度程序只能为每个节点放置一个pod。这种约束的一个很好的例子是主机端口(调度程序不会尝试将两个需要相同主机端口的pod放到同一节点上,因为第二个将永远无法运行)。

另见How to require one pod per minion/kublet when configuring a replication controller?

答案 1 :(得分:1)

我在kubernetes / GCE集群上运行MC作业,对我来说M:N调度很重要,因为在M个作业中,我希望每个节点有一个作业/ pod用于运行N个节点(M> ;> N)。

对我来说,解决方案是在pod JSON文件中设置显式CPU限制

"resources": {
    "limits": {
        "cpu": "700m"
    }
}

我没有复制控制器,只有纯批处理式集群。 节点N的数量通常为100-200-300,M约为10K-20K

答案 2 :(得分:0)

每个节点创建一个elasticsearch部署是一个选项吗?如果是,我发现最简单的方法是使用nodeSelector和Always restart策略。您可以匹配不同的标签,这里我只使用Azure AvailabilitySet的区域。例如。像这样

spec: containers: ... nodeSelector: failure-domain.beta.kubernetes.io/zone: "2" ... restartPolicy: Always