温馨提示×

Debian如何解决K8s部署问题

小樊
33
2026-01-01 17:45:22
栏目: 智能运维

Debian 上部署 Kubernetes 的排查与解决指南

一 环境准备与基线检查

  • 硬件基线:至少2 核 CPU2 GB RAM20–50 GB 磁盘(生产建议更高)。系统建议 Debian 12+。所有节点时间同步(建议使用 NTP),避免因时间漂移导致证书校验失败。
  • 禁用 Swap:临时执行 sudo swapoff -a,永久禁用需注释 /etc/fstab 中的 swap 行,否则 kubelet 无法正常工作。
  • 内核与模块:加载 overlaybr_netfilter 模块;开启转发与桥接相关参数:net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1
  • 容器运行时:自 v1.20 起 Docker 不再作为内置支持运行时,推荐使用 containerd(或 CRI-O)。如使用 containerd,确保其开机自启并正常运行。
  • 基础命令清单:sudo apt update && sudo apt upgrade -ysudo systemctl enable --now containerdsudo systemctl status kubelet

二 常见故障速查表

症状 高频原因 快速修复
Pod 状态 ErrImagePull 镜像名/标签错误、私有仓库无权限、国内网络拉取慢 核对镜像与标签;私有仓库在节点放置 CA 证书至 /etc/docker/certs.d//ca.crt;必要时使用国内镜像/自建代理
节点 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/readinessinitialDelaySeconds/periodSeconds

三 部署与网络插件的最小可用流程

  • 安装运行时与内核基线
    • 安装 containerd:sudo apt install -y containerd && sudo systemctl enable --now containerd
    • 加载模块与 sysctl:
      • echo -e "overlay\nbr_netfilter" | sudo tee /etc/modules-load.d/containerd.conf && sudo modprobe overlay && sudo modprobe br_netfilter
      • echo -e "net.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-kubernetes.conf && sudo sysctl --system
  • 安装 kubeadm/kubelet/kubectl
    • 添加仓库(示例为 v1.33,可按需替换版本):
      • curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
      • echo "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.list
      • sudo apt update && sudo apt install -y kubelet kubeadm kubectl && sudo apt-mark hold kubelet kubeadm kubectl
  • 初始化 Master(示例 Pod CIDR 为 10.244.0.0/16
    • sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    • 配置 kubectl:mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装网络插件(二选一)
    • Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    • Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
  • 加入工作节点
    • 在 Master 上生成命令:kubeadm token create --print-join-command
    • 在 Worker 上执行输出的 kubeadm join ... 命令

四 日志与网络连通性排查

  • 查看系统与服务日志:journalctl -xejournalctl -u kubelet -ftail -f /var/log/syslogdmesg;定位 kubelet、容器运行时、网络插件等组件报错。
  • 检查节点连通与端口:确保节点间互通,重点放通 6443(API)、2379/2380(etcd)、以及 kubelet 健康/只读端口等;如使用 UFWsudo ufw allow 6443/tcp && sudo ufw reload
  • 集群状态与事件:kubectl get nodes -o widekubectl get pods -A -o widekubectl describe pod <name> -n <ns>kubectl logs <pod> -n <ns>kubectl get events -A --sort-by=.metadata.creationTimestamp,从事件与容器日志定位失败阶段。

五 版本兼容与仓库镜像建议

  • 版本策略:Kubernetes 版本兼容矩阵较严格,跨小版本升级需按官方路径执行;组件版本尽量保持一致,避免混装。
  • 仓库与镜像:
    • 推荐使用 pkgs.k8s.io 的 APT 仓库(示例为 v1.33),并使用 gpg --dearmor 存放密钥到 /etc/apt/keyrings/,提升安全性与可维护性。
    • 国内环境可酌情使用镜像源(如 mirrors.baiduce.com/kubernetes/)加速下载,再切回官方源进行生产部署。
    • 容器镜像拉取慢或失败,可配置镜像仓库镜像/代理,或使用企业私有仓库并正确放置 CA 证书。

0