在 Debian 上部署 Kubernetes 的标准流程
一 环境准备
- 节点规划:至少准备1 台 Master与1 台 Worker;推荐硬件为≥2 核 CPU、≥2GB RAM、≥20GB 磁盘(生产环境建议更高)。确保各节点间网络互通,并按需设置主机名与 /etc/hosts。如使用云主机,确认安全组/防火墙已放通相关端口。
- 系统设置:关闭 Swap(临时与永久),并加载必要的内核模块与网络参数,为容器网络与 kube-proxy 正常工作做准备。
- 容器运行时:安装并启用 containerd(或 Docker,二者择一;下文以 containerd 为主)。
- 组件安装:在所有节点安装 kubeadm、kubelet、kubectl,并建议将 kubelet 等组件版本固定(hold),避免被系统升级干扰。
二 安装容器运行时与系统参数
- 安装 containerd(推荐)
- 安装与自启:sudo apt-get update && sudo apt-get install -y containerd.io && sudo systemctl enable --now containerd
- 安装 Docker(可选)
- 安装与自启:sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io && sudo systemctl enable --now docker
- 关闭 Swap
- 立即关闭:sudo swapoff -a
- 永久关闭:sudo sed -i ‘/ swap / s/^/#/g’ /etc/fstab
- 内核模块与 sysctl
- 加载模块:sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay && sudo modprobe br_netfilter
- 网络参数:sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
- 说明
- 若使用 Docker,可沿用其内置的 containerd;若直接使用 containerd,请确保服务已启用并开机自启。
三 安装 kubeadm kubelet kubectl
- 添加 Kubernetes APT 源与密钥(Debian 12 仍可使用 kubernetes-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-get update
- 安装组件(可按需指定版本并固定):
- 安装:sudo apt-get install -y kubelet kubeadm kubectl
- 固定版本:sudo apt-mark hold kubelet kubeadm kubectl
- 说明
- 固定版本有助于避免集群组件不一致;如需指定版本,可使用如:sudo apt-get install -y kubelet=1.23.6-00 kubeadm=1.23.6-00 kubectl=1.23.6-00。
四 初始化控制平面与配置 kubectl
- 初始化 Master(示例命令,按需替换参数)
- 使用 Flannel 时推荐 Pod CIDR 为 10.244.0.0/16:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- 国内环境可指定镜像仓库加速:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers
- 如需指定 API 广播地址或版本:
sudo kubeadm init --apiserver-advertise-address YOUR_MASTER_IP --kubernetes-version v1.23.6 --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
- 说明
- 初始化成功后,控制台会输出 kubeadm join 命令,用于 Worker 节点加入;请妥善保存。
五 安装网络插件与加入 Worker 节点
- 安装网络插件(二选一,确保与 Pod CIDR 匹配)
- Flannel(与 10.244.0.0/16 搭配常用):
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
- 加入 Worker 节点
- 使用初始化输出中的完整命令:
sudo kubeadm join :6443 --token --discovery-token-ca-cert-hash sha256:
- 若 token 过期,可在 Master 上生成新的加入命令:
kubeadm token create --print-join-command
- 验证集群
- kubectl cluster-info
- kubectl get nodes
- kubectl get pods --all-namespaces
- 快速验证应用
- kubectl create deployment nginx-app --image=nginx --replicas=2
- kubectl expose deployment nginx-app --name=nginx-web-svc --type=NodePort --port=80 --target-port=80
- kubectl get svc nginx-web-svc(获取 NodePort 后在节点 IP:NodePort 访问)
六 常见问题与优化建议
- 镜像拉取慢或失败:在 init 时使用 –image-repository registry.aliyuncs.com/google_containers 加速;或提前在各节点使用 crictl 拉取所需镜像。
- 防火墙与安全组:确保节点间与 API Server 对 6443、10250、10251、10252、30000-32767 等端口放通(或临时关闭防火墙用于排障)。
- 主机唯一性:虚拟机克隆后需确保 MAC 地址与 product_uuid 唯一,避免 kubelet 误判为同一节点。
- 版本一致性:生产环境建议固定 kubelet/kubeadm/kubectl 版本,避免滚动升级导致不兼容。
- 自动化部署:可使用 Shell 脚本或 Ansible 批量执行上述步骤,提高一致性与可重复性。