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

k8s节点维护的细节

k8s节点维护的细节

Kubernetes(k8s)节点维护是保障集群稳定运行的重要工作,涉及节点升级、故障排查、资源优化等多个方面。维护步骤和操作命令:

一、节点维护前的准备工作

1. 查看集群状态
kubectl get nodes  # 查看所有节点状态
kubectl get pods --all-namespaces  # 查看所有Pod分布
kubectl top nodes  # 查看节点资源使用情况
2. 确定维护节点
NODE_NAME="node-1"  # 替换为实际节点名称
3. 备份重要数据
# 备份etcd数据(针对控制平面节点)
ETCD_POD=$(kubectl get pods -n kube-system | grep etcd | awk '{print $1}')
kubectl exec -n kube-system $ETCD_POD -- sh -c "ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /backup/etcd-snapshot.db"

二、节点维护操作流程

1. 标记节点为不可调度
kubectl cordon $NODE_NAME  # 阻止新Pod调度到该节点
2. 排空节点上的 Pod(优雅下线)
kubectl drain $NODE_NAME --ignore-daemonsets --delete-emptydir-data --grace-period=30
  • --ignore-daemonsets:忽略 DaemonSet 创建的 Pod(通常无法迁移)

  • --delete-emptydir-data:删除 EmptyDir 卷数据

  • --grace-period=30:设置 Pod 终止宽限期(秒)

3. 执行节点维护(示例:系统升级)
# 登录节点
ssh user@$NODE_NAME# 更新系统软件包(Ubuntu/Debian)
sudo apt update && sudo apt upgrade -y# 更新系统软件包(CentOS/RHEL)
sudo yum update -y# 重启节点(如果需要)
sudo reboot
4. 验证节点状态
# 等待节点重启完成
kubectl get nodes  # 检查节点是否回到Ready状态# 检查节点组件
kubectl describe node $NODE_NAME | grep -A 5 Conditions

三、节点维护后的恢复操作

1. 标记节点为可调度
kubectl uncordon $NODE_NAME  # 允许新Pod调度到该节点
2. 验证 Pod 重新调度
kubectl get pods --all-namespaces -o wide | grep $NODE_NAME  # 确认有新Pod调度到该节点

四、高级维护场景

1. 节点升级(kubelet、kubeadm、kubectl)
# 1. 标记节点不可调度并排空
kubectl cordon $NODE_NAME
kubectl drain $NODE_NAME --ignore-daemonsets# 2. 在节点上升级kubeadm
sudo apt-get update && sudo apt-get install -y kubeadm=1.25.0-00  # 替换为目标版本# 3. 执行升级计划
sudo kubeadm upgrade plan# 4. 应用升级
sudo kubeadm upgrade apply v1.25.0  # 替换为目标版本# 5. 升级kubelet和kubectl
sudo apt-get update && sudo apt-get install -y kubelet=1.25.0-00 kubectl=1.25.0-00# 6. 重启kubelet
sudo systemctl restart kubelet# 7. 标记节点可调度
kubectl uncordon $NODE_NAME
2. 替换故障节点
# 1. 标记故障节点不可调度并排空
kubectl cordon $NODE_NAME
kubectl drain $NODE_NAME --ignore-daemonsets# 2. 从集群中删除节点
kubectl delete node $NODE_NAME# 3. 物理/虚拟机关闭故障节点# 4. 准备新节点并加入集群
kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

五、故障排查与监控

1. 查看节点事件
kubectl describe node $NODE_NAME
2. 查看 kubelet 日志
# 对于systemd管理的节点
journalctl -u kubelet -f# 对于containerd/runc容器运行时
crictl logs <container-id>  # 获取容器ID:crictl ps
3. 检查节点组件状态
kubectl get componentstatuses  # 查看控制平面组件状态

六、自动化维护工具

1. 使用 kube-bench 进行安全检查
docker run --rm -v /etc/kubernetes:/etc/kubernetes -v /var/lib/kubelet:/var/lib/kubelet -v /var/run/docker.sock:/var/run/docker.sock aquasec/kube-bench:latest master
2. 使用 kured 自动重启节点
# 部署kured(Kubernetes Reboot Daemon)
kubectl apply -f https://github.com/weaveworks/kured/releases/download/1.12.0/kured-1.12.0-dockerhub.yaml

七、维护注意事项

  1. 分批维护:避免同时维护多个节点,尤其是控制平面节点
  2. 预留资源:确保集群有足够的资源容纳被排空的 Pod
  3. 生产环境演练:在测试环境先验证维护流程
  4. 紧急回滚:准备好升级失败的回滚方案

相关文章:

  • 带你搞懂@Valid和@Validated的区别
  • 线代第三章向量第一节:n维向量及其运算
  • Electron + Vite + Vue 项目中的 IPC 通信三层封装实践
  • 解决RAGFlow部署中镜像源拉取的问题
  • vi实时查看日志
  • 专题讨论3:基于图的基本原理实现走迷宫问题
  • WPF中资源(Resource)与嵌入的资源(Embedded Resource)的区别及使用场景详解
  • 2025.05.01【Barplot】柱状图的多样性绘制
  • TinyEngine 2.5版本正式发布:多选交互优化升级,页面预览支持热更新,性能持续跃升!
  • 1.1 结构体与类对象在List中使用区别
  • iOS:重新定义移动交互,引领智能生活新潮流
  • vue3与springboot交互-前后分离【验证element-ui输入的内容】
  • Axure设计数字乡村可视化大屏:从布局到交互的实战经验分享
  • 解决leetcode第3539题.魔法序列的数组乘积之和
  • 通过子接口(Sub-Interface)实现三层接口与二层 VLAN 接口的通信
  • PKDV5351高压差分探头在充电桩安全测试中的应用
  • GraphQL 接口设计
  • Linux架构篇、第五章_06Jenkins 触发器全面解析与实战指南
  • 机器学习教程简介:从基础概念到实践应用的全面指南
  • DeepSeek 赋能数字孪生:重构虚实共生的智能未来图景
  • 两名游客刻划八达岭长城,被拘5日罚200元
  • 重庆城市轨道交通拟听证调价:公布两套票价方案,正征求意见
  • 上海小学生暑(寒)托班会增设开办期数、延长办班时间吗?团市委回应
  • 首次带人形机器人走科技节红毯,傅利叶顾捷:没太多包袱,很多事都能从零开始
  • 中欧互动中的合作与分歧:务实需求将克服泛安全化的“政治钟摆”
  • 一涉嫌开设赌场的网上在逃人员在山东威海落网