在 CentOS 上部署 Kubernetes(kubeadm 方式最常见) 时,排错通常遵循一个“由下而上”的思路:
系统层 → 容器运行时 → kubeadm → 控制平面 → 网络 → 节点 & Pod。
下面给你一份实战排错指南(可直接照着查)。
cat /etc/centos-release
uname -a
✅ 推荐:
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
timedatectl
chronyc sources
不同节点时间不一致会导致证书失败。
systemctl status containerd
journalctl -u containerd -f
常见问题:
SystemdCgroup = truecontainerd config default > /etc/containerd/config.toml
确认:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
SystemdCgroup = true
kubeadm init --v=5
ss -lntp | grep -E '6443|2379|10250'
ls /etc/kubernetes/pki
kubeadm certs check-expiration
重置再来:
kubeadm reset -f
rm -rf ~/.kube
docker ps -a
crictl ps -a
ls /etc/kubernetes/manifests
journalctl -u kubelet -f
systemctl status kubelet
典型错误:
kubectl get nodes
kubectl describe node <node>
kubectl get pods -n kube-system
kubectl logs -n kube-system <cni-pod>
Flannel 示例:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
确认:
cat /proc/sys/net/bridge/bridge-nf-call-iptables
# 应为 1
kubectl get pods -A
kubectl describe pod <pod>
kubectl logs <pod>
常见状态:
ImagePullBackOff → 镜像拉不到CrashLoopBackOff → 程序启动失败Pending → 资源不足 / 调度失败crictl pull registry.aliyuncs.com/google_containers/pause:3.9
# 系统
journalctl -u kubelet -f
systemctl status containerd
# K8s
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl describe node
kubectl logs -n kube-system kube-apiserver-master
# 网络
ip route
iptables -L -n
kubectl get nodeskubectl describe nodejournalctl -u kubeletkubectl get pods -n kube-system如果你愿意,可以直接把具体报错信息(kubeadm / kubelet / pod 日志)贴出来,我可以帮你逐条精确定位。