温馨提示×

如何在Debian上部署K8S多节点集群

小樊
31
2025-12-30 19:02:16
栏目: 智能运维

在 Debian 12 上使用 kubeadm 部署多节点 Kubernetes 集群

一 环境与规划

  • 准备至少 3 台机器(建议 1 台控制平面 + 2 台工作节点),示例规划:
    • 控制平面:k8s-master01(192.168.16.20)
    • 工作节点:k8s-node01(192.168.16.21)k8s-node02(192.168.16.22)
  • 硬件建议:每节点至少 2 核 CPU / 2 GB RAM / 20 GB 磁盘
  • 操作系统:Debian 12
  • 网络要求:节点间 互通,时间 同步,并 禁用 Swap
  • 容器运行时:使用 containerd(Kubernetes 自 v1.20 起推荐)

二 所有节点通用准备

  • 设置主机名与 hosts
    • 设置主机名:sudo hostnamectl set-hostname k8s-master01(各节点分别设置)
    • 统一 hosts:在所有节点编辑 /etc/hosts
      • 192.168.16.20 k8s-master01.test.local k8s-master01
      • 192.168.16.21 k8s-worker01.test.local k8s-worker01
      • 192.168.16.22 k8s-worker02.test.local k8s-worker02
  • 禁用 Swap
    • sudo swapoff -a
    • sudo sed -i ‘/ swap / s/^(.*)$/#\1/g’ /etc/fstab
  • 内核与模块(桥接流量与转发)
    • cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF
    • sudo modprobe overlay
    • sudo modprobe br_netfilter
    • cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF
    • sudo sysctl --system
  • 安装并配置 containerd
    • sudo apt update && sudo apt install -y containerd
    • sudo mkdir -p /etc/containerd
    • containerd config default | sudo tee /etc/containerd/config.toml
    • 在 [plugins.“io.containerd.grpc.v1.cri”.containerd.runtimes.runc.options] 下确保 SystemdCgroup = true
    • sudo systemctl enable --now containerd
  • 安装 kubeadm、kubelet、kubectl
    • sudo apt update
    • sudo apt install -y apt-transport-https ca-certificates curl gpg
    • curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
    • echo “deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] 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
    • sudo systemctl enable --now kubelet
  • 防火墙放行(如使用 UFW)
    • 控制平面:sudo ufw allow 6443/tcp,2379/tcp,2380/tcp,10250/tcp,10251/tcp,10252/tcp,10255/tcp
    • 工作节点:sudo ufw allow 10250/tcp,30000:32767/tcp
    • 如部署 Calico,额外放行:179/tcp,4789/udp(必要时 51820/udp,51821/udp
    • 统一执行:sudo ufw reload

三 初始化控制平面

  • 初始化命令(按需替换 API 地址Pod 网段
    • 使用固定 Pod CIDR(Flannel 常用):sudo kubeadm init --apiserver-advertise-address=192.168.16.20 --pod-network-cidr=10.244.0.0/16
    • 或使用 kubeadm 默认网段:sudo kubeadm init --apiserver-advertise-address=192.168.16.20
  • 配置 kubectl
    • mkdir -p $HOME/.kube
    • sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装 CNI 网络插件(二选一)
    • 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
  • 验证控制平面
    • kubectl get nodes
    • kubectl cluster-info

四 加入工作节点

  • 获取加入命令
    • 在控制平面查看:kubeadm token create --print-join-command
  • 在各工作节点执行(替换为实际输出)
    • sudo kubeadm join 192.168.16.20:6443 --token --discovery-token-ca-cert-hash sha256:
  • 验证
    • 控制平面执行:kubectl get nodes(状态应为 Ready

五 常见问题与扩展

  • 镜像拉取问题(国内环境)
    • 预先用国内镜像仓库拉取所需镜像并重新打 tag,或使用镜像加速与私有仓库;kubeadm 初始化前可用 kubeadm config images list 查看所需镜像清单
  • 重置与重新加入
    • 重置节点:sudo kubeadm reset;必要时清理 /etc/cni/net.d 并重置 iptables
    • 重新生成 join 命令:kubeadm token create --print-join-command
  • 高可用控制平面
    • 生产环境建议使用 多 Master + etcd 集群;可基于 kubeadm 或采用自动化工具(如 kubeasz)进行多主高可用部署与扩容

0