温馨提示×

如何排查debian k8s错

小樊
51
2026-10-14 02:31:27
栏目: 智能运维

排查 Debian 上 Kubernetes(k8s)问题,通常可以按**“分层排查”的思路进行:从节点/系统 → 容器运行时 → k8s 组件 → 工作负载 → 网络/存储**。下面给你一套实用排查手册。


一、先确认基础环境(Debian 层面)

1. 系统状态

uname -a
cat /etc/os-release
free -h
df -h
top

2. 时间同步(非常重要)

k8s 对时间非常敏感:

timedatectl status
# 若不同步
apt install chrony -y
systemctl enable --now chrony

3. 防火墙 / iptables

Debian 常用 nftables 或 iptables:

iptables -L -n
systemctl status nftables

k8s 通常要求:

  • 关闭 firewalld(Debian 一般没有)
  • 放行 k8s 端口(6443、10250 等)

二、检查容器运行时(containerd / docker)

containerd(推荐)

systemctl status containerd
journalctl -u containerd -f

ctr images ls
crictl ps
crictl images

docker(旧方案)

systemctl status docker
docker ps -a

常见问题:

  • cgroup driver 不一致(systemd vs cgroupfs)
  • 镜像拉不下来

三、检查 k8s 核心组件

1. kubelet(最常出问题的组件)

systemctl status kubelet
journalctl -u kubelet -f

常见错误:

  • Failed to start ContainerManager
  • node not ready
  • PLEG is not healthy

2. 控制平面(master)

systemctl status kube-apiserver
systemctl status kube-controller-manager
systemctl status kube-scheduler

如使用 kubeadm:

docker ps | grep kube
# 或
crictl ps | grep kube

四、使用 kubectl 排查集群状态

1. 节点状态

kubectl get nodes
kubectl describe node <node-name>

2. Pod 状态

kubectl get pods -A
kubectl describe pod <pod-name> -n <ns>
kubectl logs <pod-name> -n <ns>
kubectl logs <pod-name> -p -n <ns>   # 上一次崩溃日志

3. 事件(非常重要)

kubectl get events -A --sort-by=.metadata.creationTimestamp

五、常见错误速查

❌ Node NotReady

排查顺序:

  1. kubelet 是否运行
  2. 容器运行时是否正常
  3. 网络插件(Calico / Flannel)是否就绪
  4. 资源是否耗尽(CPU / 内存 / 磁盘)

❌ Pod 一直 Pending

kubectl describe pod <pod>

常见原因:

  • 资源不足
  • 节点 selector / taint 不匹配
  • PVC 未绑定

❌ ImagePullBackOff

crictl pull <image>

检查:

  • 镜像地址是否正确
  • 私有仓库认证(Secret)
  • Debian 能否访问外网

❌ CrashLoopBackOff

kubectl logs <pod> --previous

常见:

  • 配置错误
  • 端口冲突
  • 依赖服务未启动

六、网络问题(Debian 特别要注意)

1. 网络插件状态

kubectl get pods -n kube-system

2. 路由 / 转发

cat /proc/sys/net/ipv4/ip_forward
sysctl net.bridge.bridge-nf-call-iptables

3. DNS 测试

kubectl run test --image=busybox -it --rm -- sh
nslookup kubernetes.default

七、kubeadm 初始化失败排查

journalctl -xe
kubeadm reset
# 清理后重来

八、建议的排查顺序(总结)

  1. systemctl status kubelet
  2. journalctl -u kubelet -f
  3. kubectl get nodes
  4. kubectl describe node
  5. kubectl get pods -A
  6. kubectl describe / logs
  7. 检查网络 & 存储

如果你愿意,可以把具体报错信息(例如 kubectl 输出、journalctl 日志、节点状态)发出来,我可以直接帮你定位是哪一层的问题。

0 踩