我如何创建策略以在除主节点之外的每个节点上运行容器,除非只有一个节点?

时间:2019-01-21 23:32:42

标签: kubernetes

Kubernetes Book 中,它表示在主节点上运行pod的形式很差。

根据此建议,我想创建一个策略,该策略在所有节点上运行一个pod,但如果有多个节点,则在主节点上除外。但是,为了简化测试并在单节点环境中工作,如果整个系统中只有一个节点,我还想在主节点上运行我的pod。

我一直在环顾四周,不知道该如何表达这项政策。我发现DaemonSets具有关联性和反关联性。我考虑过标记主节点并为该标签添加反亲和性。但是,我没有看到如何要求始终至少出现一个Pod(以确保事情适用于单节点环境)。如果我误会了什么,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:3)

怎么样呢?

  1. 在节点置备期间,为应运行作业的每个节点分配一个特定的标签。在单节点群集中,这将是主节点。在多节点环境中,它将是除主节点之外的每个节点。
  2. 创建一个可以容忍任何节点的守护程序
tolerations:
    - key: node-role.kubernetes.io/master
      effect: NoSchedule
  1. 如您链接的文档中所述,请使用.spec.template.spec.nodeSelector仅选择带有特殊标签的节点。 (node selector docs)。

如何为节点分配特殊标签可能是一个相当手动的过程,很大程度上取决于您实际部署集群的方式,但这是我要遵循的总体计划。

编辑:或者,我认为仅从单节点群集中删除主节点异味可能是最简单的。我相信默认情况下,像minikube这样的大多数简单发行版都会采用这种方式。