我正在考虑在 CoreOS 集群上部署 Kubernetes,但我认为我遇到了某种交易破坏者。
如果我只使用 CoreOS 和fleet,我可以在单元文件中指定我希望某些服务不与其他服务在同一物理机器上运行(反关联)。这对于高可用性来说是必不可少的。但是看起来 kubernetes 还没有这个功能。
在我的特定用例中,我将需要运行一些需要始终可用的弹性搜索机器集群。如果出于任何原因,kubernetes 决定将给定 ES 集群的所有 elasticsearch 节点容器安排在单台机器上(或者甚至大部分在单台机器上),并且该机器挂掉了,那么我的 elasticsearch 集群将随之挂掉. 不能允许这样的事情发生。
似乎可以有变通办法。我可以设置资源要求和机器规格,以便每台机器上只能安装一个 elasticsearch 实例。或者我可能会以某种方式使用标签来指定某些弹性搜索容器应该在某些机器上运行。我还可以提供比必要更多的机器,以及比必要更多的 ES 节点,并假设 kubernetes 将它们分散到足以合理确定高可用性的程度。
但这一切似乎都很尴尬。从资源管理的角度来看,只需指定所需的硬件和反关联性,并让调度程序从那里进行优化,这要优雅得多。
那么 Kubernetes 是否以某种我找不到的方式支持反亲和性?或者有人知道它是否会很快吗?
或者我应该以另一种方式思考这个问题?我必须编写自己的调度程序吗?