LinuxKubernetes节点管理教程_节点维护与故障排查

7次阅读

kubectl get nodes 可查看节点状态,Ready 表示健康,NotReady 说明 kubelet 未就绪或通信异常;需关注 AGE、VERSION、OS-IMAGE;进一步用 describe node、systemctl status kubelet、journalctl 排查;维护时先 cordon 再 drain,修复常见故障如网络不通、证书过期、磁盘耗尽、CRI 异常;建议启用 kubelet 指标、Node Problem Detector 及版本校验。

LinuxKubernetes 节点管理教程_节点维护与故障排查

查看节点状态与基本信息

节点是否正常运行,第一步要看 kubectl get nodes 的输出。状态为 Ready 表示节点已注册且健康,NotReady 则说明 kubelet 未就绪或通信异常。注意观察 AGE(上线时间)、VERSION(Kubernetes 版本)和 OS-IMAGE(操作系统 镜像),这些信息能快速定位版本不一致或系统老化问题。

进一步排查可用执行:

  • kubectl describe node :查看 Conditions(如 MemoryPressure、DiskPressure、PIDPressure)、Allocatable 资源、已调度 Pod 列表及最近事件
  • ssh 到节点后运行 systemctl status kubelet:确认 kubelet 进程是否活跃,日志中是否有 TLS 认证失败、cgroup 配置错误等关键报错
  • journalctl -u kubelet -n 100 –no-pager:获取最近 100 行 kubelet 日志,重点关注“failed to load”、“connection refused”、“certificate has expired”类提示

节点临时下线与安全驱逐

维护前需让节点停止接收新 Pod,并迁移已有工作负载。直接关闭 kubelet 或重启机器会导致 Pod 意外终止,应使用 cordon + drain 组合操作。

标准流程如下:

  • kubectl cordon :标记节点为不可调度,新 Pod 不会再被分配至此
  • kubectl drain –ignore-daemonsets –delete-emptydir-data:优雅驱逐所有可迁移 Pod(跳过 DaemonSet 管理的 Pod;若 Pod 使用 emptyDir,需加 –delete-emptydir-data 显式允许清理)
  • 等待 drain 完成后再执行系统更新、磁盘扩容或硬件更换等操作
  • 恢复时运行 kubectl uncordon 解除调度限制

常见节点故障场景与修复

节点长期处于 NotReady 或反复震荡,通常由以下几类原因引起:

  • 网络不通 :检查节点能否访问 API Server(curl -k https://:6443/healthz),确认 防火墙 是否放行 6443(API Server)、10250(kubelet metrics)、30000–32767(NodePort)端口
  • 证书过期:kubelet 使用的 client 证书默认有效期为 1 年。若报“x509: certificate has expired or is not yet valid”,需轮换证书 —— 可通过 kubeadm certs renew node(kubeadm 集群)或手动签发并重载 kubelet
  • 磁盘或 inodes 耗尽:运行 df -hdf -i,重点检查 /var/lib/kubelet 和容器运行时根目录(如 /var/lib/containerd)。清理镜像(crictl rmi –prune)或旧容器日志可释放空间
  • CRI 运行时异常 :确认 containerd 或 dockerd 是否运行(systemctl is-active containerd),检查其日志(journalctl -u containerd), 常见问题 包括插件未加载、沙箱镜像拉取失败

节点资源监控与长期健康保障

被动排障不如主动监控。建议在节点上部署基础可观测能力:

  • 启用 kubelet 的 –enable-server=true–read-only-port=10255(或更安全的 10250 + TLS),供 Prometheus 抓取指标
  • 配置 Node Problem Detector(NPD):监听系统日志(如 kernel oom-killer、disk full)并上报为 NodeCondition,便于 kubectl describe node 直观发现
  • 定期校验节点组件版本一致性:kubectl get nodes -o wide 对比 VERSION 列,避免因 minor 版本跳跃(如 v1.26 → v1.28)引发兼容性问题
  • 对关键节点启用 taints(如 node-role.kubernetes.io/control-plane:NoSchedule)防止误调度,同时为 worker 节点添加 label(如 env=prod)便于策略化管理
text=ZqhQzanResources