温馨提示×

如何排查Debian k8s部署故障

小樊
57
2026-07-06 09:20:36
栏目: 智能运维

排查 Debian 上 Kubernetes(k8s)部署故障,建议分层、由下至上进行。下面是一套实战型排查思路 + 常用命令,适用于 kubeadm 部署 的集群(最常见)。


一、基础环境检查(最常见问题来源)

1️⃣ 系统基础状态

# 系统版本
cat /etc/os-release

# 内核版本(建议 ≥ 4.15)
uname -r

# 时间同步(非常重要)
timedatectl status

✅ 时间不同步会导致证书、etcd、调度异常


2️⃣ 网络检查

# 防火墙(Debian 默认是 nftables/iptables)
iptables -L -n
nft list ruleset

# 临时关闭测试
systemctl stop nftables
systemctl stop ufw

✅ k8s 对 iptables 规则非常敏感


3️⃣ Swap 是否关闭(必须)

free -m
swapon -s

✅ kubelet 默认不允许 swap
永久关闭:

swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

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

containerd(推荐)

systemctl status containerd
journalctl -u containerd -f

检查配置:

containerd config dump | grep -i sandbox

✅ 必须启用 SystemdCgroup


Docker(老方案)

systemctl status docker
journalctl -u docker -f

三、Kubernetes 基础组件排查(核心)

1️⃣ kubelet(最常见故障点)

systemctl status kubelet
journalctl -u kubelet -xe

常见错误:

  • failed to run kubelet
  • cgroup driver mismatch
  • node not ready

✅ cgroup 驱动必须一致(containerd / kubelet)


2️⃣ kubeadm 初始化日志

journalctl -u kubelet --since "10 min ago"

或查看初始化失败输出:

kubeadm init phase preflight

四、集群状态检查

1️⃣ 节点状态

kubectl get nodes
kubectl describe node <node-name>

常见状态:

  • NotReady
  • NetworkUnavailable

2️⃣ 组件健康

kubectl get componentstatuses
kubectl get pods -n kube-system

重点检查:

  • kube-apiserver
  • etcd
  • kube-controller-manager
  • kube-scheduler
  • coredns
  • kube-proxy

五、Pod / 部署故障排查(最常见)

1️⃣ Pod 状态

kubectl get pods -A
kubectl describe pod <pod> -n <ns>

常见状态含义:

状态 含义
Pending 调度失败
CrashLoopBackOff 容器反复崩溃
ImagePullBackOff 镜像拉取失败
ErrImagePull 镜像问题

2️⃣ 容器日志

kubectl logs <pod>
kubectl logs <pod> -c <container>

3️⃣ 事件(非常重要)

kubectl get events -n <ns> --sort-by=.metadata.creationTimestamp

✅ 90% 的问题都能在这里看到原因


六、网络问题排查(CNI)

1️⃣ CNI 插件状态

kubectl get pods -n kube-system | grep -E "calico|flannel|cilium"

2️⃣ 网络连通性

kubectl exec -it <pod> -- ping 8.8.8.8
kubectl exec -it <pod> -- nslookup kubernetes.default

3️⃣ 检查路由 / 网卡

ip route
ip a

七、etcd 排查(控制面核心)

kubectl get pods -n kube-system | grep etcd
journalctl -u etcd

或:

ETCDCTL_API=3 etcdctl endpoint health

八、证书问题(常见但隐蔽)

openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates

证书过期会导致:

  • kubectl 无法连接
  • 节点 NotReady
  • apiserver 起不来

九、快速定位“是哪一层的问题”

现象 重点排查
kubectl 连不上 apiserver / 证书
节点 NotReady kubelet / CNI
Pod 起不来 镜像 / 资源 / 调度
网络不通 CNI / iptables
集群初始化失败 swap / 内核 / 系统组件

十、推荐排查顺序(实战)

  1. journalctl -u kubelet -xe
  2. kubectl get nodes
  3. kubectl get pods -n kube-system
  4. kubectl describe pod
  5. kubectl get events
  6. 网络 / CNI
  7. 证书 / etcd

如果你愿意,可以直接贴出:

  • kubectl get nodes
  • kubectl get pods -n kube-system
  • journalctl -u kubelet --no-pager | tail -50

我可以直接帮你定位具体错误。

0 踩