Kubernetes Node的隔离与恢复

在硬件升级、硬件维护等情况下,我们需要将某些Node进行隔离,脱离Kubernetes集群的调度范围。Kubernetes提供了一种机制,即可以将Node纳入调度范围,也可以将Node脱离调度范围。

使用配置文件的方式

创建配置文件unschedule_node.yaml,在spec部分指定unschedulable为true:

apiVersion:  V1
kind:  Node
metadata:
    name:  kube-node1
    lables:
        kubernetes.io/hostname:  kubernetes-minion1
spec:
   unschedulable:  true

然后,通过 kubectl replace 命令完成对 Node 状态的修改:

kubectl replace -f unschedule_node.yaml
nodes kube-node1 replaced

查看 Node 的状态,可以观察到在Node的状态中增加了一项SchedulingDisabled:

kubectl get nodes
NAME         STATUS                     ROLES     AGE       VERSION
kube-node1   Ready,SchedulingDisabled   <none>    21d       v1.10.4
kube-node2   Ready                      <none>    21d       v1.10.4
kube-node3   Ready                      <none>    21d       v1.10.4

对于后续创建的pod,系统将不会再向该 Node 进行调度。

使用命令的方式

直接使用 kubectl patch命令完成:

kubectl patch node kube-node1 -p '{"spec":{"unschedulable":true}}'

需要注意的是,将某个 Node 脱离调度范围时,在其上运行的pod并不会自动停止,管理员需要手动停止在该 Node 上运行的 Pod。
同样,如果需要将某个 Node 重新纳入集群调度范围,则将 unschedulable 设置为 false,再次执行 kubectl replace 或 kubectl patch 命令就能恢复系统对改 Node 的调度。

kubectl的子命令cordon和uncordon也用于实现将Node进行隔离和恢复调度的操作。

例如,使用kubectl cordon对某个Node进行隔离调度操作。

kubectl cordon k8s-node1
node "kube-node1" cordoned

恢复

kubectl uncordon k8s-node1
node "kube-node1" uncordoned

图形化界面操作

这里采用的时kuboard界面,查看集群节点,选择一个节点进入,会看到“暂停调度”,

posted @   哈喽哈喽111111  阅读(562)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示