温馨提示×

Debian部署Kubernetes需要哪些步骤

小樊
33
2025-12-11 03:49:21
栏目: 智能运维

在 Debian 上部署 Kubernetes 的标准流程

一 环境准备

  • 节点规划:至少准备1 台 Master1 台 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 批量执行上述步骤,提高一致性与可重复性。

0