Debian 上部署 Kubernetes 的排查与解决指南
一 环境准备与基线检查
sudo swapoff -a,永久禁用需注释 /etc/fstab 中的 swap 行,否则 kubelet 无法正常工作。net.bridge.bridge-nf-call-iptables=1、net.ipv4.ip_forward=1。sudo apt update && sudo apt upgrade -y、sudo systemctl enable --now containerd、sudo systemctl status kubelet。二 常见故障速查表
| 症状 | 高频原因 | 快速修复 |
|---|---|---|
| Pod 状态 ErrImagePull | 镜像名/标签错误、私有仓库无权限、国内网络拉取慢 | 核对镜像与标签;私有仓库在节点放置 CA 证书至 /etc/docker/certs.d/ |
| 节点 NotReady 或网络不通 | 未安装/启动网络插件、Pod CIDR 不匹配 | 安装 Flannel(如 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)或 Calico;确认 kubeadm init 的 --pod-network-cidr 与插件配置一致 |
| kubelet 启动失败 | Swap 未关闭、Cgroup 驱动不一致、内核参数缺失 | 关闭 Swap;统一 systemd 作为 cgroup 驱动;加载 br_netfilter/overlay 并开启 ip_forward |
| 工作节点 join 失败 | Token 过期、CA 哈希不匹配、apiserver 地址不可达 | 在 Master 重新生成:kubeadm token create --print-join-command;检查 6443 端口连通性与防火墙 |
| Service 访问不通 | Service 类型不当(仅 ClusterIP 无法外访)、端口映射错误 | 需要外网访问改用 NodePort/LoadBalancer;核对 port/targetPort/nodePort;必要时重建 Service |
| 证书错误(如 x509/peer 证书不被信任) | 节点时间不同步、证书过期/不受信任 | 配置 NTP 同步时间;更新或重新生成证书;调试时可用 --cacert 指定信任 CA(生产不建议关闭校验) |
| 组件 CrashLoopBackOff | 资源不足(CPU/内存/磁盘)、探针配置不当 | 清理磁盘、扩容节点或调整 Pod 的 requests/limits;优化 liveness/readiness 的 initialDelaySeconds/periodSeconds |
三 部署与网络插件的最小可用流程
sudo apt install -y containerd && sudo systemctl enable --now containerdecho -e "overlay\nbr_netfilter" | sudo tee /etc/modules-load.d/containerd.conf && sudo modprobe overlay && sudo modprobe br_netfilterecho -e "net.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-kubernetes.conf && sudo sysctl --systemcurl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpgecho "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt update && sudo apt install -y kubelet kubeadm kubectl && sudo apt-mark hold kubelet kubeadm kubectlsudo kubeadm init --pod-network-cidr=10.244.0.0/16mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/configkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl apply -f https://docs.projectcalico.org/manifests/calico.yamlkubeadm token create --print-join-commandkubeadm join ... 命令四 日志与网络连通性排查
journalctl -xe、journalctl -u kubelet -f、tail -f /var/log/syslog、dmesg;定位 kubelet、容器运行时、网络插件等组件报错。sudo ufw allow 6443/tcp && sudo ufw reload。kubectl get nodes -o wide、kubectl get pods -A -o wide、kubectl describe pod <name> -n <ns>、kubectl logs <pod> -n <ns>、kubectl get events -A --sort-by=.metadata.creationTimestamp,从事件与容器日志定位失败阶段。五 版本兼容与仓库镜像建议