Oamc

K8s 常见故障排查 · 修改记录

这是 cloud/k8s-troubleshoot.md 的每次改动内容,按时间从新到旧。其他文章一起提交的部分不会出现在这里。

#1 2026-10-18 +72 −0 docs: 新增存储/中间件/自动化/云与K8s/证书/流程 6 个分类和 16 篇文章 e4d2cd0
 new file mode 100644
 @@ -0,0 +1,72 @@
+---
+tags: [Kubernetes, 排障, Pod]
+order: 30
+---
+
+# K8s 常见故障排查
+
+## 场景
+
+Pod 起不来、一直重启、服务访问不到。K8s 的报错都藏在 `describe` 和 `events` 里。
+
+## 前置条件
+
+- 有 kubectl 权限
+- 知道出问题的 namespace 和 Pod 名
+
+## 配置
+
+```bash
+# 先看整体
+kubectl get pods -A | grep -v Running
+kubectl get events -A --sort-by=.lastTimestamp | tail -20
+
+# 定位到某个 Pod
+kubectl describe pod <pod> -n <ns>
+kubectl logs <pod> -n <ns> --tail=100
+kubectl logs <pod> -n <ns> --previous      # 上一次崩溃的日志
+```
+
+按状态对号入座:
+
+| 状态 | 常见原因 |
+| --- | --- |
+| `ImagePullBackOff` | 镜像名/tag 错、私有仓库没配 Secret |
+| `CrashLoopBackOff` | 应用启动就退出,看 `--previous` 日志 |
+| `Pending` | 资源不足、节点亲和性、PVC 没绑定 |
+| `OOMKilled` | 内存 limit 太小 |
+| `Evicted` | 节点磁盘或内存压力 |
+| `CreateContainerConfigError` | ConfigMap/Secret 缺失 |
+
+```bash
+# 资源
+kubectl top pod -n <ns>
+kubectl describe node <node> | grep -A5 Allocated
+
+# 存储
+kubectl get pvc -n <ns>
+```
+
+## 验证
+
+```bash
+kubectl get pod <pod> -n <ns> -o wide
+kubectl exec -it <pod> -n <ns> -- sh
+kubectl port-forward <pod> 8080:8080 -n <ns>
+```
+
+## 回滚
+
+```bash
+kubectl rollout undo deployment/<name> -n <ns>
+kubectl rollout status deployment/<name> -n <ns>
+```
+
+## 坑
+
+- **只看 `get pods` 不看 events**,会漏掉调度失败的原因。
+- `CrashLoopBackOff` 的当前日志可能是空的,要看 `--previous`。
+- 镜像 tag 用 `latest`,节点上缓存旧镜像,改了也不生效。
+- PVC 一直 `Pending`,多半是 StorageClass 没配或容量不够。
+- 探针(liveness)设得太激进,应用还没启动就被重启,越重启越起不来。
+- 节点 `NotReady` 先看 kubelet 日志和磁盘,不一定是网络问题。