Kubernetes集群节点管理与维护踩坑记录
最近在负责公司K8s集群的日常维护工作时,遇到了一系列节点管理相关的问题,特此记录分享。
问题背景
我们使用 Rancher 管理的 K8s 集群,近期频繁出现节点状态异常的问题。通过 kubectl get nodes 发现部分节点处于 NotReady 状态。
踩坑过程
第一步:排查节点状态
# 查看节点详细信息
kubectl describe nodes <node-name>
# 检查节点资源使用情况
kubectl top nodes
第二步:检查节点组件状态
通过 kubectl get componentstatuses 发现 kubelet 状态异常。进一步检查发现是由于节点磁盘空间不足导致的。
第三步:自动化清理脚本实现
为了解决这个问题,我编写了以下自动清理脚本:
# cleanup-node.sh
#!/bin/bash
NODE_NAME=$(hostname)
# 清理docker镜像
sudo docker image prune -af
# 清理未使用的容器
sudo docker container prune -f
# 清理k8s相关日志文件
find /var/log/pods -name "*.log" -mtime +7 -delete
# 清理临时文件
find /tmp -type f -mtime +1 -delete
CI/CD集成方案
为了将节点维护自动化,我们将其集成到CI/CD流水线中:
# .gitlab-ci.yml
stages:
- node-maintenance
node-cleanup:
stage: node-maintenance
script:
- ssh $NODE_USER@$NODE_IP "bash -s" < cleanup-node.sh
only:
- schedules
最终解决方案
通过配置节点污点和容忍,结合Prometheus监控告警,实现了节点的自动维护。同时在部署流水线中增加了节点健康检查步骤。
总结
K8s集群节点管理需要从自动化、监控、维护三个维度考虑,避免手动干预导致的延迟和错误。

讨论