在 Kubernetes 中,你可以通过给节点打上 NoSchedule
或 NoExecute
污点 (taint) 来阻止新的 Pod 调度到该节点上。以下是如何设置某台机器不调度的具体步骤:
1. 查看节点列表
首先,查看当前的节点列表,确定你想要设置为不可调度的节点的名称:
kubectl get nodes
2. 给节点打污点 (Taint)
使用 kubectl taint nodes
命令给节点添加 NoSchedule
污点,这样 Kubernetes 就不会再向该节点调度新的 Pod 了:
kubectl taint nodes <node-name> key=value:NoSchedule
<node-name>
:你要设置为不可调度的节点名称。key=value
:这是污点的键值对,可以自定义。常见的设置是key=node
和value=unschedulable
,例如:kubectl taint nodes <node-name> node=unschedulable:NoSchedule
NoSchedule
:这是污点效果,表示 Kubernetes 将不再向该节点调度新的 Pod。
3. 验证污点
你可以通过以下命令检查污点是否已经成功应用:
kubectl describe node <node-name>
在输出中,你应该能看到类似以下的污点信息:
Taints:
node=unschedulable:NoSchedule
4. 移除污点
如果你想要移除该节点的污点并允许调度新的 Pod,可以使用以下命令:
kubectl taint nodes <node-name> key=value:NoSchedule-
例如:
kubectl taint nodes <node-name> node=unschedulable:NoSchedule-
5. 使用 kubectl cordon
(另一种方法)
另一种方法是使用 kubectl cordon
命令,这将标记节点为不可调度状态,但不会移除已经在节点上的 Pod:
kubectl cordon <node-name>
使用 kubectl uncordon
可以重新使节点可调度:
kubectl uncordon <node-name>
6. 使用 kubectl drain
(可选)
如果你需要同时驱逐已经在节点上的 Pod,并阻止新的 Pod 调度,可以使用 kubectl drain
命令:
kubectl drain <node-name> --ignore-daemonsets --delete-local-data
这个命令会安全地将所有可驱逐的 Pod 迁移到其他节点,然后标记该节点为不可调度。
注意:kubectl drain
通常用于维护节点,确保服务不中断。
通过这些方法,你可以有效地控制 Kubernetes 集群中的节点调度行为,根据需要将特定节点标记为不可调度。
标签:kubectl,某台,调度,NoSchedule,污点,Pod,k8s,节点 From: https://www.cnblogs.com/jasmine456/p/18356428