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

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.lryc.cn/news/462363.html

相关文章:

  • 【航天宏图旗下的PIE engine】
  • Python酷库之旅-第三方库Pandas(157)
  • 【原创】java+springboot+mysql校园表白墙网站设计与实现
  • CSS学习(Grid布局和flex布局比较)
  • RTThread-Nano学习二-RT-Thread启动流程
  • 排查sshfs挂载失败的问题
  • 【002】基于Spring Boot+Unipp的古诗词学习小程序【原创】
  • PageHelper循环依赖问题
  • k8s部署Kafka集群超详细讲解
  • 【数据采集工具】Sqoop从入门到面试学习总结
  • Matlab绘图总结(进阶)
  • QExcel 保存数据 (QtXlsxWriter库 编译)
  • k8s ETCD数据备份与恢复
  • 【C语言】循环嵌套:乘法表
  • 基于Java微信小程序的水果销售系统详细设计和实现(源码+lw+部署文档+讲解等)
  • 从0开始深度学习(11)——多层感知机
  • SQL语句查询
  • OSI参考模型与TCP/IP模型
  • 深度学习-26-基于PyTorch的多层感知机DNN
  • 华为杯”第十三届中国研究生数学建模竞赛-B题:具有遗传性疾病和性状的遗传位点分析(附MATLAB代码实现)
  • 滚雪球学Redis[8.2讲]:Redis的未来发展趋势:从云服务到AI与物联网的前沿探索
  • 针对考研的C语言学习(二叉树专题层次遍历---广度优先遍历)
  • spring揭秘31-spring任务调度01-spring集成Quartz及JDKTimer定时器
  • Kafka之资源容量评估
  • 深度学习神经网络的7大分类
  • 【DNF mysql8.0安装】DNF安装MySQL服务器教程
  • 决策树与随机森林在分类问题中的应用
  • Dmitri Shuralyov的全职开源之旅
  • 基于LSTM-Transformer混合模型实现股票价格多变量时序预测(PyTorch版)
  • 创建TaskPool任务组