温馨提示×

怎样在Debian上实现K8s高可用安装

小樊
41
2025-11-23 10:12:06
栏目: 智能运维

在 Debian 上实现 Kubernetes 高可用安装

一、架构与前置条件

  • 架构选型
    • 推荐采用3 台及以上 Master 节点组成高可用控制面,内置 etcd 集群;外部或堆叠式 HAProxy + Keepalived 提供对 API Server 6443 的 VIP 访问;Worker 节点按需横向扩展。
    • 控制面组件(如 kube-apiserver、kube-controller-manager、kube-scheduler)在每个 Master 上以静态 Pod运行,由 kubelet 管理。
  • 节点与网络
    • 建议 Master 节点配置:2 核 CPU、4GB 内存、40GB+ 磁盘(生产环境可适当提升);所有节点间互通,并规划一个**虚拟 IP(VIP)**作为 API 入口。
    • 示例(可按需调整):Master:192.168.152.10/20/30;VIP:192.168.152.50;Worker:192.168.152.40;API 入口:VIP:6443
  • 基础要求
    • 操作系统:Debian 11/12;容器运行时:containerd(推荐)或 Docker(需额外适配);已安装 kubeadm、kubelet、kubectl;已关闭 Swap并配置内核网络参数。

二、部署步骤(kubeadm 堆叠 etcd + HAProxy + Keepalived)

  • 步骤 1 基础环境统一配置(所有节点)
    • 设置主机名与解析、关闭 Swap、加载内核模块与 sysctl:
      • hostnamectl set-hostname k8s-master01(示例)
      • echo “192.168.152.10 k8s-master01” >> /etc/hosts
      • swapoff -a && sed -i ‘/ swap / s/^/#/’ /etc/fstab
      • modprobe br_netfilter
      • cat >/etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF
      • sysctl --system
  • 步骤 2 安装容器运行时 containerd(所有节点)
    • apt update && apt install -y containerd
    • containerd config default | tee /etc/containerd/config.toml
    • sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/g’ /etc/containerd/config.toml
    • systemctl enable --now containerd
  • 步骤 3 安装 kubeadm/kubelet/kubectl(所有节点)
    • apt update && apt install -y apt-transport-https ca-certificates curl gnupg
    • curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
    • echo “deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main” | tee /etc/apt/sources.list.d/kubernetes.list
    • apt update && apt install -y kubelet kubeadm kubectl
    • apt-mark hold kubelet kubeadm kubectl
  • 步骤 4 部署 HAProxy + Keepalived(在 Master 节点或专用 LB 节点)
    • HAProxy 示例(/etc/haproxy/haproxy.cfg):
      • frontend apiserver
        • bind *:6443
        • mode tcp
        • default_backend apiserver
      • backend apiserver
        • mode tcp
        • balance roundrobin
        • server master1 192.168.152.10:6443 check
        • server master2 192.168.152.20:6443 check
        • server master3 192.168.152.30:6443 check
    • Keepalived 示例(/etc/keepalived/keepalived.conf,MASTER/BACKUP 各一份,state 与优先级不同):
      • vrrp_instance VI_1 {
        • state MASTER
        • interface eth0
        • virtual_router_id 51
        • priority 100
        • advert_int 1
        • virtual_ipaddress { 192.168.152.50/24 }
        • }
    • systemctl enable --now haproxy keepalived
  • 步骤 5 初始化第一个控制面(在首个 Master 上)
    • kubeadm init
      –control-plane-endpoint “192.168.152.50:6443”
      –upload-certs
      –pod-network-cidr=10.244.0.0/16
      –apiserver-advertise-address=192.168.152.10
    • mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  • 步骤 6 加入其余控制面节点
    • 使用 kubeadm init 输出中的 control-plane join 命令(包含 –control-plane–certificate-key)在其他 Master 上执行。
  • 步骤 7 安装网络插件(所有节点可访问镜像时)
    • kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
  • 步骤 8 加入 Worker 节点
    • 使用 kubeadm join 输出的 worker join 命令在各 Worker 上执行。

三、验证与常见排错

  • 验证集群与控制面
    • kubectl get nodes -o wide(所有节点应为 Ready
    • kubectl get pods -A(核心组件 Running)
    • kubectl -n kube-system get endpoints kubernetes(应解析到 VIP:6443
  • 验证 VIP 与负载均衡
    • ip addr show(在 MASTER 上应看到 VIP 绑定)
    • curl -k https://VIP:6443/healthz(应返回 200
    • 在 HAProxy 主机查看统计页(如配置 stats),确认后端 master1/2/3 健康
  • 常见问题
    • 节点 NotReady:检查 containerdkubelet 状态、镜像拉取、网络插件 Pod 是否 Running。
    • API 无法访问:确认 VIP 漂移正常、HAProxy 后端健康、节点到 VIP 的 6443 通路与防火墙策略。
    • 证书/加入失败:确保使用 –upload-certs 并在有效期内执行 control-plane join;必要时重新生成 token。

四、可选方案

  • RKE2 自动化部署(适合快速落地)
    • Debian 11/12 上安装 RKE2(Server/ Agent 模式),通过配置文件定义 server 节点列表与网络参数,执行 rke up 完成高可用集群创建,运维复杂度更低。
  • Kubespray 自动化编排(适合批量与标准化)
    • 基于 Ansible 的 Kubespray 可在 Debian 12 虚拟机环境中一键部署高可用集群,支持多主、多 Worker、离线/受限网络场景。

0