为什么kubernetes默认会用“ NoSchedule”污染主节点?

时间:2019-01-31 14:56:05

标签: kubernetes

几天前,我查看了为什么没有将任何Pod调度到主节点的原因,并发现了以下问题:Allow scheduling of pods on Kubernetes master?

它表明这是因为主节点受到“ NoSchedule”效果的污染,并给出了删除该污染的命令。

但是在我在集群上执行该命令之前,我想先了解为什么它在那里。

是否有主节点不应运行pod的原因?与之相关的最佳做法?

3 个答案:

答案 0 :(得分:3)

kubernetes的目的是容易地部署应用程序并根据需求缩放它们。吊舱是运行应用程序的基本实体,可以根据需求的高低分别进行增加和减少(水平吊舱自动标量)。

如果您正在查看大型应用程序(集群可以根据需求将其最多扩展到100个节点),则这些工作程序Pod需要特别在工作程序节点上运行。这些不断增加的Pod会给您的节点带来压力,一旦完成,您总是可以使用集群自动标量来增加集群中的工作节点。 假设您对主机进行了调度,那么高内存和CPU压力将使主机面临崩溃的风险。记住,您可以不使用自动缩放autoscalar主。这样,你把你的整个集群的风险。如果你有一个主那么你将无法如期任何事情,如果主坠毁。如果您有3个主节点,其中一个崩溃,则另外两个主节点必须承担额外的调度和管理工作程序节点负担,并增加自身的负担,从而增加失败的风险

此外,在较大的集群的情况下,你已经需要高资源的主节点只是为了管理你的工作节点。你不能把主节点上的额外负载运行的工作量,以及在这种情况下。请在有kubernetes看看设立大簇here

如果您有管理的工作量,你知道它不会增加超过一定水平。你可以让主调度。然而,对于生产群集,不建议在所有。

答案 1 :(得分:2)

主服务器的主要作用是集群管理。 k8的许多组件已经在master上运行。假设如果在master上调度的pod没有资源限制,并且pod消耗了所有资源(cpu或内存),则master以及整个集群都将受到威胁。

因此,在设计高可用性生产集群时,将至少创建3个master,3 etcd,3个infra节点,并且未在这些节点上调度应用程序容器。添加了单独的工作程序节点以分配工作负载。

答案 2 :(得分:0)

Master用于群集管理任务,不应用于运行工作负载。在开发和测试环境中,可以将Pod安排在主服务器上,但是在生产环境中,最好将其仅保留用于集群级管理活动。使用工作人员或节点安排工作量