【k8s】K8S中的cordon、uncordon和drain 冻结节点、驱离pod

这篇具有很好参考价值的文章主要介绍了【k8s】K8S中的cordon、uncordon和drain 冻结节点、驱离pod。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Kubernetes(K8s)中使用Kubectl 命令行工具管理 Kubernetes 集群。 kubectl 在 $HOME/.kube 目录中查找一个名为 config 的配置文件。 可以通过设置 KUBECONFIG 环境变量或设置 --kubeconfig 参数来指定其它 kubeconfig 文件。本文主要介绍Kubernetes(K8s)中kubectl cordon, drain, uncordon 常用命令。

1、Kubectl语法

kubectl cordon NODE
kubectl drain NODE
kubectl uncordon NODE

cordon, drain, uncordon:命令是正式release的1.2新加入的命令,三个命令需要配合使用可以实现节点的维护。

在1.2之前,由于没有相应的命令支持,如果要维护一个节点,只能stop该节点上的kubelet将该节点退出集群,是集群不在将新的pod调度到该节点上。如果该节点上本身就没有pod在运行,则不会对业务有任何影响。如果该节点上有pod正在运行,kubelet停止后,master会发现该节点不可达,而将该节点标记为notReady状态,不会将新的节点调度到该节点上。同时,会在其他节点上创建新的pod替换该节点上的pod。

如此虽能够保证集群的健壮性,但可能还有点问题,如果业务只有一个副本,而且该副本正好运行在被维护节点上的话,可能仍然会造成业务的短暂中断。

1.2中新加入的这3个命令可以保证维护节点时,平滑的将被维护节点上的业务迁移到其他节点上,保证业务不受影响。

如下是整个的节点维护的流程:

1)首先查看当前集群所有节点状态,例如共有四个节点都处于ready状态;

2)查看当前nginx两个副本分别运行在d-node1和k-node2两个节点上;

3)使用cordon命令将d-node1标记为不可调度;

4)再使用kubectl get nodes查看节点状态,发现d-node1虽然还处于Ready状态,但是同时还能被禁调度,代表新的pod将不会被调度到d-node1上。

5)再查看nginx状态,没有任何变化,两个副本仍运行在d-node1和k-node2上;

6)执行drain命令,将运行在d-node1上运行的pod平滑的赶到其他节点上;

可以不用驱离,也可以使用delete po 让其重生至其他节点

7)再查看nginx的状态发现,d-node1上的副本已经被迁移到k-node1上;此时就可以对d-node1进行一些节点维护的操作,如升级内核,升级Docker等;

8)节点维护完后,使用uncordon命令解锁d-node1,使其重新变得可调度;

9)检查节点状态,发现d-node1重新变回Ready状态。

K8S中的cordon、uncordon和drain https://www.jianshu.com/p/752be98e9077
例子:

k8s集群节点只扩容CPU和内存,扩容后的配置为CPU=xxxC,MEM=xxxG

Deployment副本数缩容

while read line;do kubectl scale -n live deploy $line --replicas=1;done < /root/xxx.txt

设置节点不可调度,逐台进行

kubectl cordon xxx-node-01
kubectl cordon xxx-node-02
kubectl cordon xxx-node-03

驱逐节点上的pod,逐台进行

kubectl drain xxx-node-01 --force --ignore-daemonsets
kubectl drain xxx-node-02 --force --ignore-daemonsets
kubectl drain xxx-node-03 --force --ignore-daemonsets

扩容完毕恢复节点可调度

kubectl uncordon xxx-node-01
kubectl uncordon xxx-node-02
kubectl uncordon xxx-node-03

服务恢复双副本

while read line;do kubectl scale -n live deploy $line --replicas=2;done < /root/xxx.txt

参考

K8S中的cordon、uncordon和drain文章来源地址https://www.toymoban.com/news/detail-842492.html

到了这里,关于【k8s】K8S中的cordon、uncordon和drain 冻结节点、驱离pod的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s中的deployment

            Deployment是k8s中用来管理发布的控制器,在开发的过程中使用非常频繁,本篇文章主要介绍deployment相关的使用和原理。 声明式API 最终一致性 水平触发 资源对象 。。。 定义一组pod的期望数量,controller会维持Pod的数量和期望的一致(其实deployment是通过管理rs的状态来

    2024年02月16日
    浏览(33)
  • k8s中的容器

    容器的状态 Running(运行中) :容器正在运行并且正常工作。 Waiting(等待中) :容器正在等待某些条件满足,例如等待其他容器就绪、等待网络连接等。 Terminated(已终止) :容器已经完成工作并终止。这可能是正常的完成,也可能是出现错误导致终止。 容器的重启策略

    2024年02月09日
    浏览(36)
  • k8s中的基础概念

    硬件:         1、节点(Node):类似于手机、平板、电脑         2、集群(Cluster):多个节点组合到一起         3、持久卷(Persistent Volumes):类似于插入到集群中的外部硬盘 软件:         1、容器(Container)         2、Pod:k8s的基本计算单元。Kubernetes不直接运行

    2024年01月22日
    浏览(35)
  • docker在k8s容器中的作用,以及docker的底层原理,以及k8s的常用命令

        Docker的设计思想就是创建软件程序可移植性的轻量级容器,让其可以在任何安装了Docker的机器上,不用关心底层操作系统,就可以运行开发程序,就像集装箱一样使用。 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们

    2024年04月27日
    浏览(57)
  • K8s中的PV的介绍

    PV 的生命周期  PV 生命周期总共四个阶段 : Available(可用) —— 可用状态,尚未被 PVC 绑定。 Bound(已绑定 )—— 绑定状态,已经与某个 PVC 绑定。 Released(已释放) —— 与之绑定的 PVC 已经被删除,但资源尚未被集群回收。 Failed(失败 )—— 当删除 PVC 清理资源,自动

    2024年02月08日
    浏览(33)
  • 【kubernetes】k8s中的选主机制

    1 为什么需要leader-election? 在集群中存在某种业务场景,一批相同功能的进程同时运行,但是同一时刻,只能有一个工作,只有当正在工作的进程异常时,才会由另一个进程进行接管。这种业务逻辑通常用于实现一主多从。 如果有人认为,传统应用需要部署多个通常是为了容

    2024年02月07日
    浏览(46)
  • 如何检测k8s集群中的 CrashLoopBackOff

    CrashLoopBackOff 是一种 Kubernetes 状态,表示 Pod 中发生的重启循环:Pod 中的容器已启动,但一遍又一遍的崩溃然后又重新启动。 Kubernetes 将在重新启动之间等待越来越长的 BackOff 时间,以便您有机会修复错误。因此,CrashLoopBackOff 本身并不是一个错误,而是表明发生了一个错误,

    2024年02月10日
    浏览(50)
  • 如何监控容器或K8s中的OpenSearch

    当前 OpenSearch 使用的越来越多, 但是 OpenSearch 生态还不尽完善. 针对如下情况: 监控容器化或运行在 K8s 中的 OpenSearch 我查了下, 官方还没有提供完备的方案. 这里如何监控 K8s 中的 OpenSearch, 包括安装 exporter 插件、采集、展示全环节。 OpenSearch 是一款开源的分布式搜索引擎(从

    2024年04月10日
    浏览(47)
  • Service 在 K8s 中的四种类型

    CSDN话题挑战赛第2期 参赛话题:万家争鸣的云计算修罗场 ClusterIP模式 clusterIP 主要在每个 node 节点使用 iptables,将发向 clusterIP 对应端口的数据,转发到 kube-proxy 中。然后 kube-proxy 自己内部实现有负载均衡的方法,并可以查询到这个 service 下对应 pod 的地址和端口,进而把数据

    2024年02月14日
    浏览(41)
  • k8s 中的无头服务 (Headless Services)

            有时候我们不需要负载均衡,以及单独的 Service IP。 遇到这种情况,可以通过指定 Cluster IP(spec.clusterIP)的值为 \\\"None\\\" 来创建无头服务。通过无头服务的标签选择器(Label Selector)可以将后端的 Pod 列表返回给调用的客户端。         对于无头服务,不会为其分

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包