k3s|如何将k8s集群的node节点设置不可调度或删除node节点?

k3s是由 Rancher 公司开发的轻量级Kubernetes,是经CNCF一致性认证的Kubernetes发行版,专为物联网及边缘计算设计。

由于运行 K3s 所需的资源相对较少,所以 K3s 也适用于开发和测试场景。

停止调度的命令

使k8s集群的某个 node 停止被调度的命令有三个,分别是 cordon、drain 和 delete。执行该命令后,后期创建的 pod 不会继续被调度到该节点上。

(1) cordon : 停止调度(不可调度,临时从K8S集群隔离)

该命令操作,只会将node标识为SchedulingDisabled不可调度状态。影响最小,只会将node标识为SchedulingDisabled不可调度状态。之后K8S再创建的pod资源,不会被调度到该节点。原有的 pod 不受影响,仍正常对外提供服务。

(2)drain 驱逐节点(先不可调度,然后排干)

该命令操作,会先驱逐 Node 上的 pod 资源到其他节点重新创建。接着,将节点调为 SchedulingDisabled 不可调度状态。

(3) delete 删除节点

该操作会先驱逐Node节点上的pod资源到其他节点重新创建,然后node节点删除,master失去对其控制,该节点从k8s集群删除。如果要恢复该节点,只能重新将该节点加入到K8S集群中。

下边演示一下具体操作步骤:

以下操作均在 master 节点 vm-2-debian 机器上执行:

  1. 查看本机环境(vm-2-debian):
root@vm-2-debian:~# k3s -v
k3s version v1.24.6+k3s1 (a8e0c66d)
go version go1.18.6 root@vm-2-debian:~# kubectl version root@vm-2-debian:~# ping wang1234.net
PING wang1234.net (43.152.198.184) 56(84) bytes of data.
64 bytes from 43.152.198.184 (43.152.198.184): icmp_seq=1 ttl=43 time=292 ms
^C
--- wang1234.net ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 291.578/291.578/291.578/0.000 ms
  1. 确认节点信息

kubectl get nodes

kubectl get node -o wide

kubectl get po

kubectl get pod

kubectl get pods

root@vm-2-debian:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vm-2-debian Ready control-plane,master 2d10h v1.24.6+k3s1
vm-14-debian Ready <none> 2d10h v1.24.6+k3s1 root@vm-2-debian:~# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-6fb79bc456-df9rm 1/1 Running 0 34h 10.42.0.27 vm-2-debian <none> <none>
nginx-6fb79bc456-2c9f9 1/1 Running 0 34h 10.42.0.28 vm-2-debian <none> <none>
nginx-6fb79bc456-ltr85 1/1 Running 0 3s 10.42.1.23 vm-14-debian <none> <none>

可以看到有2个节点,3个pod,其中vm-2-debian节点有2个pod,vm-14-debian节点有1个pod。

  1. 使用 cordon 命令设置为不可调度

kubectl cordon vm-14-debian

root@vm-2-debian:~# kubectl cordon vm-14-debian
node/vm-14-debian cordoned root@vm-2-debian:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vm-2-debian Ready control-plane,master 2d10h v1.24.6+k3s1
vm-14-debian Ready,SchedulingDisabled <none> 2d10h v1.24.6+k3s1 root@vm-2-debian:~# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-6fb79bc456-df9rm 1/1 Running 0 34h 10.42.0.27 vm-2-debian <none> <none>
nginx-6fb79bc456-2c9f9 1/1 Running 0 34h 10.42.0.28 vm-2-debian <none> <none>
nginx-6fb79bc456-ltr85 1/1 Running 0 5m44s 10.42.1.23 vm-14-debian <none> <none>

可以看到 vm-14-debian 节点状态变成了 “SchedulingDisabled” (按计划不可用),原有的 pod 依然有效。

如果想要取消不可调度,恢复到集群,可以使用 uncordon 命令:

kubectl uncordon vm-14-debian

root@vm-2-debian:~# kubectl uncordon vm-14-debian
node/vm-14-debian uncordoned
  1. 驱逐已经运行的业务容器

kubectl drain --ignore-daemonsets --delete-emptydir-data vm-14-debian

root@vm-2-debian:~# kubectl drain --ignore-daemonsets --delete-emptydir-data vm-14-debian
node/vm-14-debian already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/svclb-traefik-6760453c-gglvj
evicting pod default/nginx-6fb79bc456-ltr85
pod/nginx-6fb79bc456-ltr85 evicted

查看 node 与 pod 状态:

root@vm-2-debian:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vm-2-debian Ready control-plane,master 2d11h v1.24.6+k3s1
vm-14-debian Ready,SchedulingDisabled <none> 2d10h v1.24.6+k3s1 root@vm-2-debian:~# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-6fb79bc456-df9rm 1/1 Running 0 34h 10.42.0.27 vm-2-debian <none> <none>
nginx-6fb79bc456-2c9f9 1/1 Running 0 34h 10.42.0.28 vm-2-debian <none> <none>
nginx-6fb79bc456-ft8xd 1/1 Running 0 5m44s 10.42.0.30 vm-2-debian <none> <none>

可以看到在主节点 vm-2-debian 节点上重新启动了一个 pod,而已被驱逐的节点 vm-14-debian 上的 pod 已不存在了。

  1. 删除node 节点

kubectl delete node vm-14-debian

root@vm-2-debian:~# kubectl delete node vm-14-debian
node "vm-14-debian" deleted root@vm-2-debian:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vm-2-debian Ready control-plane,master 2d11h v1.24.6+k3s1

删除后,再次查看,只有 vm-2-debian 一个节点了。

参考链接

https://wang123.net/a/1582208859487895552

https://www.cnblogs.com/John-2011/p/14984900.html

https://cloud.tencent.com/developer/article/1796315

Thanks for reading.

k3s|如何将k8s集群的node节点设置不可调度或删除node节点?的更多相关文章

  1. k8s集群-node节点设置不可调度或者删除node节点

    在master 执行1, 不可调度 kubectl cordon k8s-node- kubectl uncordon k8s-node- #取消 2,驱逐已经运行的业务容器 kubectl drai ...

  2. 搭建K8S集群

    一.前言 我们将现有的虚拟机称之为Node1,用作主节点.为了减少工作量,在Node1安装Kubernetes后,我们利用VirtualBox的虚拟机复制功能,复制出两个完全一样的虚拟机作为工作节点. ...

  3. Centos 安装k8s 集群(单master开发环境)

    本教程是在VM中搭建K8s 所以第一步骤先配置虚拟机的ip 和上网情况详细参考https://www.cnblogs.com/chongyao/p/9209527.html 开始搭建K8s集群 两台机 ...

  4. jenkins流水线部署springboot应用到k8s集群(k3s+jenkins+gitee+maven+docker)(2)

    前言:上篇已介绍了jenkins在k3s环境部署,本篇继续上篇讲述流水线构建部署流程 1.从gitlab上拉取代码步骤 在jenkins中,新建一个凭证:Manage Jenkins -> Ma ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  6. K8s集群部署(三)------ Node节点部署

    之前的docker和etcd已经部署好了,现在node节点要部署二个服务:kubelet.kube-proxy. 部署kubelet(Master 节点操作) 1.二进制包准备 [root@k8s-m ...

  7. Node节点如何加入K8S集群

    k8s集群中,有时候发现有些节点状态为 NotReady,如何修复为Ready状态呢? [root@k8s-master~]# kubectl get nodes NAME STATUS ROLES ...

  8. 仅需60秒,使用k3s创建一个多节点K8S集群!

    作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...

  9. 在node节点部署kubectl管理k8s集群

    感谢!原文链接:https://blog.csdn.net/sinat_35930259/article/details/79994078 kubectl是k8s的客户端程序,也是k8s的命令行工具, ...

  10. 二进制部署1.23.4版本k8s集群-6-部署Node节点服务

    本例中Master节点和Node节点部署在同一台主机上. 1 部署kubelet 1.1 集群规划 主机名 角色 IP CFZX55-21.host.com kubelet 10.211.55.21 ...

随机推荐

  1. .NET6使用NLog向文件、数据库写数据

    1.Nuget 引入 NLog NLog.Web.AspNetCore NLog.Database(写入数据库使用) 2.创建nlog.config 注意数据库连接字符串需要配置TrustServer ...

  2. 避免用Apache Beanutils进行属性的copy。why?让我们一起一探究竟

    在实际的项目开发中,对象间赋值普遍存在,随着双十一.秒杀等电商过程愈加复杂,数据量也在不断攀升,效率问题,浮出水面. 问:如果是你来写对象间赋值的代码,你会怎么做? 答:想都不用想,直接代码走起来,g ...

  3. P8855 [POI2002]商务旅行

    简要题意 给出一个 \(N\) 个节点的树和一个长度为 \(M\) 的序列 \(S\).你需要从 \(1\) 出发,依次经过 \(S\) 中的所有点,求至少需要经过的边数. \(1 \le N \le ...

  4. 【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image

    问题描述 使用Github Action,通过 Azure/functions-container-action@v1 插件来完成 yaml 文件的配置,并成功部署Function Image 的过程 ...

  5. 移动端微信小程序开发学习报错记录--toast.js:41 未找到 van-toast 节点,请确认 selector 及 context 是否正确

    这个问题仔细检查了一下代码引入,是没有问题的, 根本原因是在页面上忘了加<van-toast id="van-toast" /> 具体引入代码如下: app.json ...

  6. Docker快速部署Nacos

    前置 机器配置不能太低 ( 2c2g的轻量服务器直接崩掉了) Docker https://www.docker.com/ 开始安装 mysql 使用docker安装mysql (推荐8.0) 可以不 ...

  7. Docker+nginx部署前后端分离项目

    1.下载Docker和Docker-Compose 1.安装Docker 记一次踩坑:误装podman-docker 问题概述:Centos8去下载Docker时,默认装的是podman-docker ...

  8. 单细胞转录组实战01: CellRanger7定量

    安装CellRanger cd ~/APP wget -O cellranger-7.1.0.tar.xz "https://cf.10xgenomics.com/releases/cell ...

  9. KingbaseES数据库备份初始化错误处理

    KingbaseES使用sys_backup.sh脚本init初始化配置文件常见错误处理: sys_backup.sh脚本按照如下顺序寻找初始化配置文件: [kingbase@postgres ~]$ ...

  10. 2.3.pages.json文件的页面配置与全局配置

    新建页面 # pages uni-app 通过 pages 节点配置应用由哪些页面组成,pages 节点接收一个数组,数组每个项都是一个对象,其属性值如下: 属性 类型 默认值 描述 path Str ...