K8S故障处理指南:临时设置节点为不可调度

这篇具有很好参考价值的文章主要介绍了K8S故障处理指南:临时设置节点为不可调度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Kubernetes中,节点驱逐是一种管理和维护集群的重要操作,允许节点在维护、升级或者发生故障时从集群中移除,等到节点修复后,再重新承担pod调度功能。本文将介绍节点驱逐的基本概念、使用场景、解除驱逐的步骤以及注意事项。

1.K8s节点驱逐

节点驱逐是指将节点上运行的Pod迁移到其他可用节点上,并暂时从集群中移除目标节点。这个操作通常在节点维护、系统升级、硬件故障或者其他需要暂时离线节点的场景下使用。

2.使用场景

节点维护

在进行节点维护时,需要将节点暂时移除,确保Pod能够在其他节点上继续运行。有一点要注意,在节点驱逐前,要保持集群中服务多副本,否则驱逐过程中可能会导致业务不可用

节点升级

当需要对节点进行Kubernetes版本升级或者操作系统升级时,可以使用节点驱逐来确保服务的可用性。

硬件故障或维修

当节点发生硬件故障或需要维修时,可以通过节点驱逐操作将节点下的Pod迁移到其他健康的节点上。

3.命令说明

cordon : 停止调度【不可调度,临时从K8S集群隔离】

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

drain :驱逐节点【设置不可调度,然后排干节点pod】

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

总结:两个命令的区别在于,cordon命令执行后,新的pod创建不会调度过来,老的pod不受影响,drain执行会额外清除节点上的pod

4.操作步骤

K8S集群,其中一个node节点发生故障,状态为notready

[root@k8s ~]# kubectl  get node
NAME           STATUS     ROLES         AGE    VERSION
10.10.12.10   Ready      master,node   172d   v1.20.6
10.10.12.26   Ready      master,node   172d   v1.20.6
10.10.12.27   Ready      master,node   172d   v1.20.6
10.10.12.15   Ready      node          170d   v1.20.6
10.10.12.11   NotReady   node          60d    v1.20.6

故障节点标记为不可调度

kubectl cordon #此处name为节点ip
使用 kubectl cordon 命令可以将节点标记为不可调度,防止新的Pod被调度到该节点上

[root@k8s ~]# kubectl  get node
NAME           STATUS     ROLES         AGE    VERSION
10.10.12.10   Ready      master,node   172d   v1.20.6
10.10.12.26   Ready      master,node   172d   v1.20.6
10.10.12.27   Ready      master,node   172d   v1.20.6
10.10.12.15   Ready      node          170d   v1.20.6
10.10.12.11   NotReady,SchedulingDisabled   node     60d    v1.20.6

使用 kubectl get nodes 命令可以查看节点的状态,看到节点状态已经为SchedulingDisabled,新的pod将不会调度此节点

驱逐故障节点已经运行的业务容器

kubectl drain <node-name> drain <node-name> --ignore-daemonsets
kubectl drain 命令会触发节点驱逐操作,将节点上的Pod迁移到其他节点上。

参数说明:

–delete-emptydir-data:强制驱逐节点上绑定了本地存储的Pod,例如coredns。

–ignore-daemonsets:忽略节点上的守护进程集Pod,通常为DaemonSet类型的Pod,例如flannel

查看节点驱逐状态

5.解除驱逐

当处理完节点问题,重新恢复为ready状态后,需要将节点恢复可调度状态

取消节点驱逐

[root@k8s ~]# kubectl uncordon  10.10.12.11
node/10.10.12.11 uncordoned
[root@k8s ~]# 
[root@k8s ~]# kubectl  get node
NAME           STATUS     ROLES         AGE    VERSION
10.10.12.10   Ready      master,node   172d   v1.20.6
10.10.12.26   Ready      master,node   172d   v1.20.6
10.10.12.27   Ready      master,node   172d   v1.20.6
10.10.12.15   Ready      node          170d   v1.20.6
10.10.12.11   Ready      node          60d    v1.20.6

使用 kubectl uncordon 命令可以取消节点的不可调度状态,允许新的Pod再次被调度到该节点上

  1. 注意事项
  • DaemonSet

在进行节点驱逐时,需要注意DaemonSet中的Pod,确保它们不会被驱逐,以维持集群的关键服务。

  • 确保Pod能够重新调度
    在节点驱逐前,确保集群中有足够的可用资源,以便Pod能够顺利地重新调度到其他节点上。

  • 确认服务的高可用性
    在进行节点驱逐时,要确保相关服务具备高可用性,以防止驱逐操作引起的业务中断,所有服务的多副本还是很有必要的。

通过良好的节点管理和调度策略,Kubernetes能够有效地应对节点维护、升级和故障情况。节点驱逐操作是集群维护的重要组成部分,合理使用并遵循最佳实践,能够确保业务的连续性和可靠性。

公众号:运维之美 不定期更新领取IT学习资料 关注一波!

最近,我们建立了一个技术交流微信群。有兴趣的同学可以加入和我们一起交流技术,在 「运维之美」 公众号直接回复 「加群」 邀请你入群,加群:947473916。文章来源地址https://www.toymoban.com/news/detail-847122.html

到了这里,关于K8S故障处理指南:临时设置节点为不可调度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 设置k8s中节点node的ROLES值,K8S集群怎么修改node1的集群ROLES

    其实这个Roles就是一个标签,执行以下命令给node1 和 node2 打上worker标签 k8s-node1 打上标签为worker1 k8s-node2 打上标签为worker2

    2024年02月02日
    浏览(36)
  • K8S临时小结

    k8s是什么?能解决什么问题? k8s是容器管理平台,一套复杂的开源系统 如何更好的维护pod,k8s第二大要素(pod控制器) k8s的很多对容器(pod)管理的高级特性,都是基于控制器而来 为什么要学习k8s? 引入k8s是为了更好的维护容器化部署业务,跨机器的容器、容器化业务需

    2024年02月21日
    浏览(30)
  • (详细步骤+各项报错处理)windows11 安装Docker和部署K8S单节点(minikube)

    (1)win11系统(win10应该也可以,但没试过) (2)保证cpu虚拟化开启 (3)主机要留有一定的内存 满足以上即可安装docker desktop版本 (1)获取Docker Desktop并安装Download For Windows(使用了WSL2技术,直接可以在windows上运行,不需要额外的虚拟化环境) (2)开始安装,按照安装向

    2024年02月03日
    浏览(32)
  • 【K8S系列】深入解析k8s网络之—网络故障

    你只管努力,其他交给时间,时间会证明一切。 文章标记颜色说明: 黄色 :重要标题 红色 :用来标记结论 绿色 :用来标记一级论点 蓝色 :用来标记二级论点 Kubernetes (k8s) 是一个容器编排平台,允许在容器中运行应用程序和服务。今天学习一下k8s网络故障相关的的内容

    2024年02月08日
    浏览(29)
  • K8S故障排查

    故障现象:部署pod时,报错没发调度到节点。 排查步骤: 1、查看集群的状态 2、查看k8s组件的状态-kubelet,kube-apiservice 3、查看docker的Cgroup driver和k8s的Cgroup driver类型,发现docker是cgroup,k8s是systemd,问题点找到了。

    2024年02月15日
    浏览(38)
  • 【K8S】docker和K8S(kubernetes)理解?docker是什么?K8S架构、Master节点 Node节点 K8S架构图

    一、docker的问世         在LXC(Linux container)Linux容器虚拟技术出现之前,业界网红是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。 虚拟机是什么?         虚拟机其实就是 在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。

    2024年03月26日
    浏览(49)
  • k8s 查看加入主节点命令 k8s重新查看加入节点命令 k8s输入删除,重新查看加入命令 kuberadm查看加入节点命令

    1. 使用kuberadm 安装成功后,clear清除了屏幕数据,加入命令无法查看,使用如下, 重新查看node如何加入主节点命令 :  2. 画圈的全部是,都复制 ,在node节点 输入命令即可如下:    输入命令后的结果:  3. 总结: 安装成功后,先复制下 加入主节点的命令

    2024年02月11日
    浏览(47)
  • K8S临时存储-本地存储-PV和PVC的使用-动态存储(StorageClass)

    容器中的文件在磁盘上是临时存放的,当容器崩溃或停止时容器上面的数据未保存, 因此在容器生命周期内创建或修改的所有文件都将丢失。 在崩溃期间,kubelet 会以干净的状态重新启动容器。 当多个容器在一个 Pod 中运行并且需要共享文件时,会出现另一个问题,跨所有容

    2024年04月16日
    浏览(38)
  • K8S容器的一则故障记录

       kubelet 、pod持久化 metrics/vlalphal容器 kube-controller、apiserver     XXX反馈说某某业务服务异常,无法启动,需要进行协助排查。经常会接到这样一个需求,一开始无法清楚知道具体什么问题,需要跟一线运维人员详细做沟通,了解故障问题的细节。     根据一线运维人

    2024年02月02日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包