K8S重启之后无法启动故障排查 与 修复
文章目录
- K8S重启过程分析报告
- 重启操作记录
- 1. 初始状态检查
- 2. 配置修复
- 3. 组件启动观察
- 第一轮启动 (15:08:00-15:08:30)
- 第二轮状态 (15:08:30-15:09:00)
- 关键问题分析
- 1. etcd连接问题
- 2. etcd异常退出
- 3. 网络插件依赖问题
- 完整故障流程
- 核心问题总结
- 主要故障点
- 影响范围
- 建议修复方案
K8S重启过程分析报告
重启操作记录
1. 初始状态检查
- 执行时间: 2025-11-07 15:07
- 检查静态Pod配置文件:
/etc/kubernetes/manifests/ - 发现etcd.yaml存在配置问题: 包含重复的readinessProbe配置
2. 配置修复
- 恢复etcd原始配置:
cp /etc/kubernetes/manifests/etcd.yaml.backup /etc/kubernetes/manifests/etcd.yaml - 修改startupProbe时间参数: initialDelaySeconds=10, periodSeconds=10
- 重启kubelet服务:
systemctl restart kubelet
3. 组件启动观察
第一轮启动 (15:08:00-15:08:30)
- etcd: ✅ 成功启动 (容器ID: 3a35af5e98b3f)
- kube-apiserver: ✅ 成功启动 (容器ID: ce533d077482f)
- kube-controller-manager: ✅ 成功启动
- kube-scheduler: ❌ 启动失败,后重新启动成功
第二轮状态 (15:08:30-15:09:00)
- etcd: ❌ 异常退出 (收到终止信号)
- kube-apiserver: ❌ 连接etcd失败,异常退出
- kube-controller-manager: ❌ CrashLoopBackOff
- kube-scheduler: ❌ 异常退出
关键问题分析
1. etcd连接问题
症状:
- API服务器日志显示:
connection error: desc = "transport: Error while dialing: dial tcp 127.0.0.1:2379: connect: connection refused" - 端口检查: 2379端口未监听,仅2381端口监听
根本原因:
- etcd配置文件中listen-client-urls设置为监听2379端口
- 但实际etcd容器启动后未监听2379端口
- 导致API服务器无法连接etcd存储
2. etcd异常退出
症状:
- etcd容器收到终止信号后正常关闭
- 日志显示:
received signal; shutting down
可能原因:
- kubelet健康检查失败导致Pod重启
- 系统资源不足或配置问题
3. 网络插件依赖问题
症状:
- kubelet日志显示Calico网络插件错误
- 错误:
dial tcp 10.96.0.1:443: connect: connection refused
根本原因:
- Calico尝试连接API服务器(10.96.0.1:443)失败
- 因为API服务器依赖etcd,而etcd未正常运行
- 形成循环依赖: API服务器需要etcd,网络插件需要API服务器
完整故障流程
1. 重启kubelet↓
2. etcd启动成功,但未监听2379端口↓
3. API服务器启动,尝试连接etcd:2379失败↓
4. API服务器异常退出↓
5. Controller Manager和Scheduler因API服务器不可用而失败↓
6. 网络插件(Calico)因无法连接API服务器而失败↓
7. kubelet因健康检查失败重启etcd↓
8. 所有核心组件进入CrashLoopBackOff状态↓
9. K8S集群完全不可用
核心问题总结
主要故障点
- etcd端口监听异常 - 配置监听2379端口但实际未监听
- 组件依赖链断裂 - etcd→API服务器→其他组件的依赖关系中断
- 网络插件循环依赖 - 网络需要API服务器,API服务器需要etcd存储
影响范围
- ✅ etcd: 可启动但无法提供客户端服务
- ❌ kube-apiserver: 无法连接etcd存储
- ❌ kube-controller-manager: 无法连接API服务器
- ❌ kube-scheduler: 无法连接API服务器
- ❌ 网络插件: 无法连接API服务器配置服务
- ❌ DNS服务: 依赖网络插件和API服务器
- ❌ 整个K8S集群: 完全不可用
建议修复方案
- 检查etcd配置和证书,确保2379端口正常监听
- 验证etcd数据目录权限和完整性
- 检查系统资源(内存、磁盘)是否充足
- 考虑重新初始化etcd集群数据
- 按顺序重启组件: etcd→API服务器→Controller Manager→Scheduler→网络插件
