在K8S中,如何把某个worker节点设置为不可调度?

在Kubernetes中,如果你想要把一个worker节点设置为不可调度,意味着你不想让Kubernetes调度器在这个节点上调度新的Pod。这通常用于维护或升级节点,或者当节点遇到硬件故障或性能问题时,要将某个worker节点设置为不可调度。

方法1:使用kubectl cordon命令

kubectl cordon命令可以将节点标记为不可调度。这不会驱逐已经在节点上运行的Pod,只是阻止新的Pod被调度到这个节点上。

bash 复制代码
kubectl cordon <node-name>

案例

如果你有一个名为worker-node-1的节点,你可以运行以下命令:

bash 复制代码
kubectl cordon worker-node-1

运行此命令后,你可以使用kubectl get nodes来查看节点的状态,你会看到worker-node-1节点的状态变为SchedulingDisabled


方法2:修改节点标签

Kubernetes调度器依赖于节点标签来决定哪些Pod可以在哪些节点上运行。你可以通过给节点添加一个特殊的标签来阻止调度器在该节点上调度Pod。

首先,你需要找到节点的名称:

bash 复制代码
kubectl get nodes

案例

你可以使用kubectl label命令给这个节点添加一个标签,例如node.kubernetes.io/unschedulable=true

bash 复制代码
kubectl label nodes <node-name> node.kubernetes.io/unschedulabel=true

添加了这个标签后,调度器就不会在该节点上调度新的Pod了。


验证设置

要验证节点是否已成功设置为不可调度,你可以运行以下命令查看并检查节点的标签和状态。

bash 复制代码
kubectl get nodes

此时你会看到节点有一个node.kubernetes.io/unschedulable=true的标签,且状态列显示SchedulingDisabled


恢复节点调度

当你完成对节点的维护和升级,并希望再次让该节点可用于调度时,可采用以下命令或删除之前添加的标签来恢复节点的调度能力。

bash 复制代码
kubectl uncordon <node-name>

或删除添加的标签:

bash 复制代码
kubectl label nodes <node-name> node.kubernetes.io/unschedulabel-

综上所述:

实际操作过程中需要有足够的权限,通常需要是集群管理员或有相应权限的用户。

相关推荐
java_logo2 小时前
Docker 部署 NetBox:轻松搭建 IPAM / DCIM 网络资产管理平台
docker·容器·轩辕镜像·netbox部署·netbox部署方案·netbox部署文档·docker部署netbox
PC2005-cloud3 小时前
从零上手 openGauss:Docker 部署 + 全场景连接教程
运维·docker·容器
风曦Kisaki4 小时前
Kubernetes(K8s)笔记Day06: 持久化存储(emptyDir,hostPath,NFS),PV 和 PVC,StorageClass存储类
linux·运维·笔记·云原生·容器·kubernetes
Crazy________9 小时前
k8s部署若依微服务架构流程,v3.6.6
运维·云原生·容器·kubernetes·状态模式
阿里云云原生10 小时前
AI 创新实践论坛·上海站精彩回顾 & PPT 下载
云原生
阿里云云原生10 小时前
轮子还要自己造吗?SRE 团队视角:从“全栈自研”到“拥抱云原生可观测底座”的思考
云原生
生活爱好者!11 小时前
NAS还能用来开视频会议?docker一键部署MiroTalk SFU
运维·docker·容器
xiaoxiangsiyan11 小时前
GitLab CI/CD 自托管(EE 企业版)+ Kubernetes Runner 集群 + ArgoCD(GitOps 部署)
运维·网络·ci/cd·容器·kubernetes·gitlab·argocd
PC2005-cloud11 小时前
KubeSphere 安装到插件管理实战:本地 K8s 搭建可视化容器平台
云原生·容器·kubernetes
沉迷学习 日益消瘦13 小时前
19-集群升级与维护
kubernetes