name: k8s-debug description: Kubernetes 调试模式。用于处理 Pod 崩溃、CrashLoopBackOff、OOMKilled、ImagePullBackOff、调度失败、部署问题。
Kubernetes 调试专长
黄金规则:事件先于日志
当调试 Kubernetes 问题时,始终先检查事件:
get_pod_events- 显示调度、拉取、启动、探针、OOM- 然后
get_pod_logs- 应用程序级错误
事件比日志更快地解释大多数崩溃/调度问题。
典型调查流程
1. list_pods → 获取命名空间中 Pod 健康的概述
2. get_pod_events → 理解 Pod 状态的原因
3. get_pod_logs → 仅当事件未解释问题时使用
4. get_pod_resources → 用于性能/资源问题
5. describe_deployment → 检查部署状态和条件
常见问题模式
CrashLoopBackOff
首先检查:get_pod_events
| 事件原因 | 可能原因 | 下一步行动 |
|---|---|---|
| OOMKilled | 内存限制太低或内存泄漏 | 检查 get_pod_resources,增加限制 |
| Error | 应用程序崩溃 | 检查 get_pod_logs 获取堆栈跟踪 |
| BackOff | 重复失败 | 检查日志以查找启动错误 |
检查清单:
- [ ] 内存限制与实际使用情况
- [ ] 最近的部署变更(
get_deployment_history) - [ ] 缺少配置/秘密
- [ ] 依赖故障(数据库、外部服务)
OOMKilled
首先检查:get_pod_events(确认 OOMKilled)
然后:get_pod_resources(比较使用情况与限制)
常见原因:
- 为工作负载设置的内存限制过低
- 内存泄漏(使用情况随时间增加)
- 突发流量高峰导致内存压力
- 大量请求负载缓存在内存中
ImagePullBackOff
首先检查:get_pod_events
常见原因:
- 错误的镜像名称或标签
- 私有镜像仓库没有 imagePullSecrets
- 镜像仓库的速率限制
- 网络问题访问镜像仓库
Pending Pods
首先检查:get_pod_events
查找:
FailedScheduling- 资源不足Unschedulable- 节点亲和性/污点- 无匹配节点用于 nodeSelector
Readiness/Liveness Probe Failures
首先检查:describe_pod(显示探针配置)
然后:get_pod_events(探针失败事件)
然后:get_pod_logs(为什么端点不响应)
Evicted Pods
首先检查:get_pod_events
原因:
- 节点资源压力(磁盘、内存)
- 优先级抢占
- 基于污点的驱逐
部署问题
Stuck Rollout
describe_deployment → 检查副本(期望 vs 就绪 vs 可用)
get_deployment_history → 比较当前与之前的修订版本
get_pod_events → 对于新 ReplicaSet 中的 Pod
常见原因:
- 新 Pod 失败(CrashLoopBackOff)
- Readiness 探针失败
- 资源限制阻止调度
Rollback Decision
使用 get_deployment_history 查看之前的工作版本。
错误分类
不可重试(立即停止)
- 401 未授权 - 无效凭据
- 403 禁止 - 无权限
- 404 未找到 - 资源不存在
- “config_required”: true - 集成未配置
可重试(可能重试一次)
- 429 请求过多
- 500/502/503/504 服务器错误
- 超时
- 连接被拒绝
资源调查模式
对于内存/CPU 问题:
1. get_pod_resources → 查看分配 vs 使用情况
2. describe_pod → 查看完整的容器规格
3. get_cloudwatch_metrics/query_datadog_metrics → 历史使用情况
4. detect_anomalies on historical data → 查找问题开始时间