Rancher生产环境share-mnt(rancher-agent)组件丢失问题分析与解决报告
myluzh 发布于 阅读:41 Kubernetes
0x01 故障概述
故障时间:2025年10月27日
报告人:鲁籽杭
影响范围:生产环境Kubernetes集群管理功能
故障等级:P1(关键业务影响)
故障现象
-
Jenkins Pipeline在执行镜像Tag更新时失败
-
kubectl命令无法连接生产环境集群master节点(172.30.82.214)
-
Rancher UI间歇性不可访问
0x02 故障诊断与处理
2.1 初步排查
-
Rancher服务检查:
docker ps -a | grep rancher/rancher # 96fabd336823 rancher/rancher:v2.5.12 "entrypoint.sh" 3 years ago Up 26 minutes 0.0.0.0:8081->80/tcp, :::8081->80/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp rancher docker logs 96fabd336823 docker restart 96fabd336823 -
Kubernetes核心组件检查:
逐个检查kube-apiserver,etcd,kube-proxy,kubelet,kube-scheduler,kube-controller-manager
- 修复了某些核心组件依赖的某些镜像拉取失败问题
- 确认各组件状态恢复正常
2.2 深入分析
通过对比测试环境,发现关键差异,缺少share-mnt容器。
# 生产环境缺失关键容器
docker ps -a | grep rancher-agent # 无结果
# 但镜像存在
docker images | grep rancher-agent
2.3 关键问题定位
缺失组件:share-mnt容器(rancher/rancher-agent:v2.5.12)
2.4 恢复步骤
由于master节点每天都有备份,从备份中创建了一台机器,然后查看发现share-mnt是存在的。
-
从备份中恢复容器配置:
pip3 install runlike runlike -p share-mnt -
重建容器:
docker run \ --name=share-mnt \ --hostname=iZbp12bkuvg20e1j3y9gtxZ \ --volume /etc/kubernetes:/etc/kubernetes \ --volume /var/run:/var/run \ --network=host \ --privileged \ --workdir=/var/lib/rancher \ --restart=always \ --label='io.rancher.rke.container.name=share-mnt' \ --runtime=runc \ --detach=true \ rancher/rancher-agent:v2.5.12 \ --no-register \ --only-write-certs \ --node-name iZbp12bkuvg20e1j3y9gtxZ \ --server https://172.30.82.214:8443 \ --token t6zsbb7lxjvbtc6qzrt7zcvwmrnzb22c25b4ztkgxk5fmsdfrclnzf \ '--ca-checksum 8e673c71b7bd25e515e81d5f83d545d2b17035f0acaf2d260005f9fc36502d54' -
证书问题处理:
- 观察到证书不匹配问题
- 执行证书强制轮换
3. 根因分析
直接原因
share-mnt容器异常停止后被清理脚本删除
根本原因
-
清理脚本设计缺陷:
docker container prune -f # 未排除关键系统容器 -
缺乏关键容器保护机制
4. 改进措施
立即措施
-
修改清理脚本,添加关键容器保护:
docker container prune -f --filter "label!=io.rancher.rke.container.name=share-mnt" -
为关键系统容器添加监控告警
长期改进
- 建立关键组件清单和保护机制
- 完善容器生命周期管理策略
- 加强变更前的备份验证流程
5. 经验总结
本次故障凸显了生产环境自动化清理脚本的风险。作为DevOps实践的重要启示:
- 自动化不等于无脑化:所有自动化操作必须考虑边界条件
- 关键组件需要特殊保护:系统核心组件应有不同于普通应用容器的管理策略
- 备份验证的重要性:定期验证备份的完整性和可用性
建议团队对所有生产环境自动化脚本进行全面的安全审查,建立关键组件白名单机制,避免类似问题再次发生。