我正在从头开始配置一个 Kubernetes 集群(原因(。它是 VM 内部的本地设置,一切都很好,除了master
节点被创建为可调度的。
我尝试通过将所需的参数传递给 kubelet 二进制文件来将master
标签和适当的污点分配给节点(不能解决问题(:
--register-with-taints=node-role.kubernetes.io/master=:NoSchedule
--node-labels=master,node-role.kubernetes.io/master=""
以下是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
如何将此节点设置为不可调度?文档并没有真正指定这一点(请随时定向到文档的适当部分,以防我错过了什么(。
PS:上面提到的标签/污点在创建/注册节点之前就存在了。
污点让我们有可能标记一个节点,以防止调度程序将其用于某些具有NoSchedule
参数的 Pod,并且它们具有 Kubernetes 调度程序在规划步骤中使用的特殊值。默认情况下,Pod 无法在具有污点的节点上生成,直到您将添加tolerations
这将允许调度程序在具有toleration
配置中指定的污点的节点上创建 Pod;因此,根据您的节点描述,您已成功将此节点注册为NoSchedule
,这意味着不会在此节点上调度 Pod。
污点:node-role.kubernetes.io/master=true:NoSchedule
或者,您可以使用kubectl cordon NODE
命令将节点标记为不可调度;因此它将完全禁用节点的调度,因此 Kubernetes Scheduler 在规划工作负载的过程中会忽略它,它会反映在你的节点配置中,如下所示:
不可调度:真