如果我只使用CoreOS和fleet,我可以在单元文件中指定我希望某些服务不与其他服务运行在同一物理机器上(反亲和性)。这对于高可用性来说是必不可少的。但是看起来kubernetes还没有这个功能。
在我的特定用例中,我将需要运行几个elasticsearch机器集群,这些机器需要始终可用。如果出于任何原因,kubernetes决定在一台机器上为给定的ES集群调度我的所有elasticsearch节点容器(甚至在一台机器上调度大部分),而该机器死亡,那么我的elasticsearch集群也将随之死亡。这是不能允许发生的。
似乎有工作机会。我可以设置资源需求和机器规格,以便每台机器上只能安装一个elasticsearch实例。或者,我可能会以某种方式使用标签来指定某些elasticsearch容器应该在某些机器上使用。我还可以提供比需要多得多的机器和比需要多得多的ES节点,并假设kubernetes将它们分散得足够多,以合理地确定高可用性。
或者我应该换个角度思考这个问题?我必须自己编写调度程序吗?
看起来kubernetes有几种决定如何扩展容器的方法,这些方法正在积极开发中。
首先,当然,在任何机器上都必须有必要的资源,以便调度器考虑在那里调出一个吊舱。
之后,kubernetes通过复制控制器来扩展pods,试图将给定的复制控制器创建的不同实例保留在不同的节点上。
一般情况下我们部署的 Pod 是通过集群的自动调度策略来选择节点的,默认情况下调度器考虑的是资源足够,并且负载尽量平均,但是有的时候我们需要能够更加细粒度的去控制 Pod 的调度,比如我们内部的一些服务 gitlab 之类的也是跑在Kubernetes集群上的,我们就不希望对外的一些服务和内部的服务跑在同一个节点上了,害怕内部服务对外部的服务产生影响;但是有的时候我们的服务之间交流比较频繁,又希望
我们在一个3节点kubernetes集群上用3个pods运行我们的应用程序。当我们部署应用程序时,有时,pods被调度到同一个kubernetes节点。 我们希望我们的 Pod 以这样一种方式调度,即它将我们的 Pod 分布在节点上(同一应用程序的 2 个 Pod 不应该是同一个节点)。事实上,根据文档(https://kubernetes.io/docs/concepts/configurati
反亲和组是针对反亲和组中虚拟机的简单调度策略。 反亲和组是针对反亲和组中虚拟机的简单调度策略,根据反亲和组中的策略将属于反亲和组中新创建的虚拟机分布在不同宿主机上,从而实现业务的高可用。一般用于某个系统中要求系统中的各个节点部署在不同宿主机上的场景。 入口:在云管平台左侧菜单项中单击 “主机/主机/反亲和组” 菜单项,进入反亲和组页面。 创建反亲和组 该功能用于创建反亲和组。 说明 用户在管理后台
TL;DR 这个主题比较大,该开源项目也还在不断进行中,我单独做了一个 web 用来记录 spark on kubernetes 的研究和最新进展见: https://jimmysong.io/spark-on-k8s 注意:本文中的镜像仓库地址 harbor-001.jimmysong.io 为的镜像仓库地址为伪装地址,非本文中真正使用的镜像仓库,且该地址也不存在,请替换为您自己的镜像仓库。 我
k8s节点关联文档解释了如何通过首先用标签标记节点并使用nodeSelector选择节点来将pod部署到特定节点。 但是,我有一个用例,我在集群中有40-50个部署,我希望向集群添加一个新节点,并将该节点设置为专用于其中一个部署/吊舱,而不更改所有那些没有指定nodeSelector的部署 我唯一能想到的是污染节点,但如果我这样做了,没有一个豆荚会被调度到那里。 这里有没有一个更好的方法来实现这个
kube-scheduler是 kubernetes 系统的核心组件之一,主要负责整个集群资源的调度功能,根据特定的调度算法和策略,将 Pod 调度到最优的工作节点上面去,从而更加合理、更加充分的利用集群的资源,这也是我们选择使用 kubernetes 一个非常重要的理由。如果一门新的技术不能帮助企业节约成本、提供效率,我相信是很难推进的。 调度流程 默认情况下,kube-scheduler 提供