k8s设置某台机器不调度

在 Kubernetes 中,你可以通过给节点打上 NoScheduleNoExecute 污点 (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=nodevalue=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 集群中的节点调度行为,根据需要将特定节点标记为不可调度。

posted @ 2024-08-13 10:49  jasmine456  阅读(76)  评论(0编辑  收藏  举报