Kubernetes 的艰难之路 - 如何设置节点不可调度

Jas*_*ngh 3 kubernetes

我正在从头开始配置 Kubernetes 集群(原因)。它是虚拟机内部的本地设置,一切都很好,除了master节点被创建为可调度的。

我尝试master通过将必需的参数传递给 kubelet 二进制文件来为节点分配标签和适当的污点(不能解决问题):

--register-with-taints=node-role.kubernetes.io/master=:NoSchedule
--node-labels=master,node-role.kubernetes.io/master=""
Run Code Online (Sandbox Code Playgroud)

这是来自的输出kubectl describe <node>

Name:               myNodeName
Roles:              master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/hostname=myHostName
                    master=
                    node-role.kubernetes.io/master=
Annotations:        node.alpha.kubernetes.io/ttl=0
                    volumes.kubernetes.io/controller-managed-attach-detach=true
CreationTimestamp:  Tue, 03 Jul 2018 05:56:53 +0000
Taints:             node-role.kubernetes.io/master=true:NoSchedule
Unschedulable:      false
Run Code Online (Sandbox Code Playgroud)

如何将此节点设置为不可调度?文档并没有真正指定这一点(请随意指向文档的适当部分,以防我遗漏了某些内容)。

PS:上面提到的标签/污点在创建/注册节点之前就存在。

Nic*_*_Kh 8

污点让我们有可能标记一个节点,以防止调度程序将它用于某些带有NoSchedule参数的 Pod,并且它们具有 Kubernetes 调度程序在规划步骤中使用的特殊值。默认情况下,Pod 不能在带有污点的节点上生成,除非您添加tolerations它,这将允许调度程序在toleration配置中指定的带有污点的节点上创建 Pod ;因此,根据您的节点描述,您已成功将此节点注册为NoSchedule,这意味着不会在此节点上调度 Pod。

污点:node-role.kubernetes.io/master=true:NoSchedule

另外,您也可以使用kubectl cordon NODE命令来标记节点不可调度; 因此它将完全禁用节点的调度,因此 Kubernetes Scheduler 在规划工作负载的过程中将忽略它,它反映在您的节点配置中,例如:

不可安排:真的