Debian 上安装 Kubernetes 的实用技巧
一 环境准备与系统调优
- 使用较新的稳定版 Debian 12(Bookworm),资源建议至少 2 核 CPU、2GB RAM、20GB 磁盘,并确保节点间网络互通。
- 更新系统并安装基础工具:sudo apt update && sudo apt upgrade -y;安装 apt-transport-https、ca-certificates、curl、software-properties-common。
- 关闭 Swap:sudo swapoff -a 并注释 /etc/fstab 中的 swap 行,避免 kubelet 报错。
- 加载内核模块并开启桥接转发:
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-k8s.conf
sudo sysctl --system
- 建议启用 NTP/chrony 做时间同步,避免证书校验与调度异常。
二 容器运行时选择与安装
- 推荐优先使用 containerd(与 K8s 集成更紧密,维护路径清晰):
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl enable --now containerd
- 如需使用 Docker(仍可用但官方已转向 CRI 运行时):
sudo apt install -y docker.io 或安装 docker-ce 系列包
sudo systemctl enable --now docker
- 无论哪种运行时,确保 /etc/containerd/config.toml 中的 SystemdCgroup 与 kubelet 的 cgroup 驱动一致(常见为 systemd)。
三 安装 kubeadm kubelet kubectl 与初始化
- 添加 Kubernetes APT 源并安装组件(示例为 xenial 仓库,实际以可用版本为准):
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo “deb https://apt.kubernetes.io/ kubernetes-xenial main” | 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 # 锁定版本,避免被系统升级影响
- 初始化控制平面(以 Flannel 为例,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
- 加入工作节点:使用 kubeadm init 输出中的 kubeadm join 命令(包含 –token 与 –discovery-token-ca-cert-hash)在各 Node 上执行。
四 网络与防火墙要点
- 常见端口需放通(示例):6443(API Server)、10250(kubelet)、10251/10252(kube-scheduler/controller-manager)、以及 NodePort 范围(默认 30000–32767);如使用 Calico 等插件,还需放通 BGP 179 等端口。
- 云厂商或物理防火墙需同步策略,避免节点间与节点到 API Server 的访问被拦截。
- 选择网络插件要与 Pod CIDR 匹配:如 Flannel 默认 10.244.0.0/16;如使用 Calico,常见 192.168.0.0/16,并在 kubeadm init 时通过 –pod-network-cidr 指定一致网段。
五 常见问题排查与优化
- 节点 NotReady:优先检查 CNI 是否安装成功、Pod CIDR 是否与插件一致、以及 kubelet 是否报错(journalctl -xeu kubelet)。
- 镜像拉取慢或失败:可配置 containerd 镜像仓库镜像、使用 imagePullPolicy: IfNotPresent,或在 kubeadm 初始化时通过 –image-repository 指定可用镜像源。
- 控制平面与节点时间不同步:部署 chrony 或 NTP,确保时间误差在合理范围内。
- 稳定性与可维护性:
- 使用 apt-mark hold 固定 kubelet/kubeadm/kubectl 版本,避免滚动升级导致不兼容;
- 生产环境建议启用 RBAC、最小权限与审计,并部署 监控(如 Prometheus+Grafana) 与 日志(如 EFK/Loki);
- 规划 资源请求/限额 与 污点/容忍度,避免系统组件被业务抢占。