当前位置: 首页 > article >正文

k8s Node节点维护

Kubernetes (K8s) 中对 Node 节点的维护是保证集群健康和性能的重要部分。Node 节点通常是 Kubernetes 工作负载的运行环境,负责运行 Pods。当需要对节点进行维护(如升级、修复问题、调整配置等)时,可能需要将该节点标记为不可用并迁移其上的工作负载。

常见的 Node 节点维护任务:

  1. 标记节点不可调度(Cordon):防止新 Pod 被调度到该节点上。
  2. 驱逐节点上的 Pod(Drain):将节点上现有的 Pod 驱逐到其他节点,以便安全维护节点。
  3. 标记节点为可调度(Uncordon):在维护完成后,重新允许将新 Pod 调度到该节点。
  4. 节点升级:对节点的操作系统、容器运行时或 Kubernetes 版本进行升级。
  5. 监控节点健康:监控节点的健康状况,并在必要时执行恢复或替换操作。

维护步骤:

1. 标记节点不可调度(Cordon)

cordon 操作会将节点标记为不可调度状态,使新 Pod 不会被调度到该节点上。这不会影响已经在该节点上运行的 Pod。

kubectl cordon <node-name>

示例:

kubectl cordon node-1

输出:

node/node-1 cordoned
2. 驱逐节点上的 Pod(Drain)

drain 操作会驱逐节点上所有非系统关键的 Pod,并将它们迁移到集群中的其他节点。这个步骤是为了确保节点上的工作负载可以安全地迁移,以便对该节点进行维护。

kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
  • --ignore-daemonsets:忽略 DaemonSet 运行的 Pod,因为 DaemonSet 通常是与节点绑定的(如监控和日志收集服务)。
  • --delete-emptydir-data:如果 Pod 使用了 emptyDir 存储卷,会删除相应的数据。

示例:

kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data

输出:

node/node-1 drained

注意:drain 会中断节点上的应用程序,因此在生产环境中,建议你做好相应的准备,比如提前创建好新的副本,确保不会造成服务中断。

3. 进行节点维护(如升级或修复问题)

此时,节点上的工作负载已经被迁移,可以安全地进行维护操作。例如:

  • 升级操作系统或 Kubernetes 版本。
  • 升级容器运行时(如 Docker 或 containerd)。
  • 修复硬件或网络问题。
4. 恢复节点并允许调度(Uncordon)

在维护完成后,使用 uncordon 命令恢复节点的调度功能,使新 Pods 能够调度到该节点上。

kubectl uncordon <node-name>

示例:

kubectl uncordon node-1

输出:

node/node-1 uncordoned
5. 检查节点状态

恢复节点后,检查节点的状态确保其正常工作:

kubectl get nodes

输出:

NAME     STATUS   ROLES    AGE    VERSION
node-1   Ready    <none>   35d    v1.23.0

节点状态应该显示为 Ready,这表明节点已经恢复正常并可以接收新的工作负载。

其他维护操作:

1. 标记节点为不可用(Maintenance Mode)

如果你需要长期维护节点或从集群中移除节点,可以使用标签或污点将节点标记为不可用。

  • 添加污点:
kubectl taint nodes <node-name> key=value:NoSchedule
  • 移除污点:
kubectl taint nodes <node-name> key-
2. 查看节点详细信息

查看节点的详细状态和配置,可以帮助了解当前节点的健康情况和资源使用情况:

kubectl describe node <node-name>
3. 节点自动恢复(Node Self-Healing)

Kubernetes 通过节点控制器和 kubelet 监控节点的状态,如果节点出现问题(如脱机或不可访问),控制器会自动将节点标记为 NotReady 并将 Pods 调度到其他节点。这种自动恢复能力保证了集群的高可用性。

维护节点时的最佳实践:

  1. 提前通知:在生产环境中进行节点维护时,提前通知团队和用户,以防止服务中断引发的问题。
  2. 使用滚动更新:如果需要升级多个节点,使用滚动更新方式逐个升级节点,确保集群中的工作负载始终有足够的资源可用。
  3. 监控节点健康:在进行维护之前,确保节点的健康状况正常,维护完成后,通过监控工具(如 Prometheus、Grafana)持续跟踪节点的运行情况。

通过合理使用 cordondrainuncordon 操作,你可以安全、有效地进行 Kubernetes 集群节点的维护,并确保不会对集群中的应用程序造成大的影响。

问答题

题目:Node节点维护
配置环境kubectl config use-context ek8s

将名为ek8s-node-0的node节点设置为不可用,并重新调度该node上所有运行的pods。

官方参考地址:Kubectl Reference Docs
帮助命令: kubectl drain --help

解答:
1.切换答题环境
kubectl config use-context ek8s

2.设置节点不可调度
kubectl cordon ek8s-node-0

3.驱除k8s-node-1节点上Pod
kubectl drain ek8s-node-0 --ignore-daemonsets --delete-emptydir-data --force

不需要其余步骤


http://www.kler.cn/a/349981.html

相关文章:

  • 软考信安26~大数据安全需求分析与安全保护工程
  • 【前端】Hexo 建站指南
  • 算法随笔_19: 数组中的最长山脉
  • 日期问题--模板
  • 联想电脑怎么用u盘装系统_联想电脑用u盘装win10系统教程
  • OpenEuler学习笔记(四):OpenEuler与CentOS的区别在那里?
  • 什么是大数据治理?大数据治理未来趋势是什么?
  • FFmpeg的简单使用【Windows】--- 指定视频的时长
  • Nacos微服务配置管理和拉取
  • NCP1342 | 65W氮化镓快充电源主控芯片,准谐振反激控制器
  • Nginx中的并发限制之limit_req和limit_conn和limit_rate 详解
  • threejs-光线投射实现3d场景交互事件
  • ORB-SLAM2之OpenCV reshape函数
  • 基于Spring Boot+vue技术的导游系统设计与实现
  • 10-μA低功耗30-ppm/°C 漂移电压基准-ZCC3325替代REF33XX
  • AI开发-三方库-Hugging Face-Pipelines
  • Dirmap:一款高级Web目录文件扫描工具
  • 【Linux】Linux进程基础
  • pdf文件怎样一张纸打印四页
  • 多模态大语言模型(MLLM)-InstructBlip深度解读
  • 【自动驾驶汽车通讯协议】GMSL通信技术以及加串器(Serializer)解串器(Deserializer)介绍
  • 中小型医院网站:Spring Boot框架详解
  • kali chrome 安装 hackbar
  • 16年408计算机网络
  • 【动手学深度学习】6.5 汇聚层(个人向笔记)
  • 阿里云数据库导出 | 数据管理(兼容数据库备份)