首页主机资讯如何在Debian上实现K8S的高可用性

如何在Debian上实现K8S的高可用性

时间2025-11-17 21:12:05发布访客分类主机资讯浏览681
导读:在 Debian 上实现 Kubernetes 高可用 一 架构与前置准备 架构要点 控制面采用3 台 Master节点,数据面(Worker)跨节点/可用区分布;对外通过VIP + 负载均衡提供稳定的 API Server 端点。 生...

在 Debian 上实现 Kubernetes 高可用

一 架构与前置准备

  • 架构要点
    • 控制面采用3 台 Master节点,数据面(Worker)跨节点/可用区分布;对外通过VIP + 负载均衡提供稳定的 API Server 端点
    • 生产环境建议将 etcd 与控制面同机部署(kubeadm 默认),etcd 遵循奇数节点原则(3/5 节点),保证强一致与容错。
  • 节点与网络
    • 建议配置静态 IP、设置唯一主机名,并在 /etc/hosts 做主机名解析;节点间需互通管理平面与节点端口。
    • 示例:3 台 Master(如 192.168.16.11/12/13),若干 Worker;VIP 规划为 192.168.16.10
  • 系统与安全
    • 关闭 Swap:sudo swapoff -a & & sudo sed -i '/ swap / s/^/#/' /etc/fstab
    • 内核参数:net.bridge.bridge-nf-call-iptables=1net.bridge.bridge-nf-call-ip6tables=1net.ipv4.ip_forward=1
    • 防火墙放行:至少放行 6443/TCP(API)10250/TCP(kubelet)8472/UDP(Calico VXLAN) 等必要端口(按网络插件与云环境调整)。

二 安装容器运行时与 Kubernetes 组件

  • 安装 containerd(推荐)
    • sudo apt update & & sudo apt install -y containerd
    • 启用模块与内核参数:sudo modprobe overlay & & sudo modprobe br_netfilter
    • 生成默认配置并启用:sudo mkdir -p /etc/containerd & & containerd config default | sudo tee /etc/containerd/config.toml
    • sudo systemctl enable --now containerd
  • 安装 kubelet/kubeadm/kubectl
    • 添加仓库(示例镜像源):
      • echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ 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
  • 说明
    • 也可使用 Docker,但 containerd 更轻量、与 kubeadm 集成度更高;确保运行时开机自启并配置为 systemd cgroup 驱动。

三 搭建高可用控制面与 etcd

  • 方案 A(推荐)kubeadm 内置高可用
    • 在首个控制面节点初始化(将控制面端点指向 VIP):
      • sudo kubeadm init --control-plane-endpoint 192.168.16.10:6443 --upload-certs --pod-network-cidr=10.244.0.0/16
    • 其余控制面节点加入:
      • sudo kubeadm join 192.168.16.10:6443 --token < token> --discovery-token-ca-cert-hash sha256:< hash> --control-plane --certificate-key < cert-key>
    • 工作节点加入:
      • sudo kubeadm join 192.168.16.10:6443 --token < token> --discovery-token-ca-cert-hash sha256:< hash>
    • 说明:kubeadm 会自动部署 3 节点 etcd 与控制面组件多副本,形成高可用控制面。
  • 方案 B 外部 etcd 集群(可选,高级)
    • 先部署 3/5 节点 etcd 集群(Raft),再在 kubeadm 配置中指定外部 etcd 的 endpoints 与证书,适合已有 etcd 运维体系或特殊合规需求。

四 部署负载均衡与 VIP 漂移

  • 在 Master 节点部署 HAProxy(示例)
    • 安装:sudo apt install -y haproxy
    • 配置 /etc/haproxy/haproxy.cfg(关键片段):
      frontend k8s-api
        bind *:6443
        mode tcp
        default_backend k8s-api-backend
      
      backend k8s-api-backend
        mode tcp
        balance roundrobin
        server master1 192.168.16.11:6443 check
        server master2 192.168.16.12:6443 check
        server master3 192.168.16.13:6443 check
      
  • 部署 Keepalived 提供 VIP(示例)
    • 安装:sudo apt install -y keepalived
    • 配置要点(/etc/keepalived/keepalived.conf):
      • 定义 state MASTER/BACKUPinterface eth0virtual_router_id 51priority 100/90virtual_ipaddress { 192.168.16.10/24 }
      • 启用非本地绑定:net.ipv4.ip_nonlocal_bind=1
    • 启动:sudo systemctl enable --now keepalived haproxy
  • 节点接入
    • kubeadm join 与控制面连接均使用 VIP:6443,实现 API Server 的故障自动切换。

五 网络插件 验证与运维建议

  • 安装网络插件(以 Calico 为例)
    • kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    • 如使用 flannel,Pod CIDR 通常为 10.244.0.0/16;如使用 Calico,可按官方文档选择 IPIP/VXLAN 模式与网段。
  • 验证与观测
    • 节点与控制面:kubectl get nodes -o widekubectl get pods -A
    • 部署测试应用:kubectl create deployment nginx --image=nginx:1.25 --replicas=3kubectl expose deployment nginx --type=NodePort --port=80
    • 监控与告警:部署 Prometheus + Grafana,对 API Server/etcd/节点资源 设置告警规则,便于快速定位故障。
  • 应用层高可用建议
    • 工作负载多副本与滚动升级;结合 拓扑分布约束 将 Pod 均匀打散到不同节点/可用区,提升容灾能力。
    • 有状态应用使用 StatefulSet + 持久卷,并配置反亲和与拓扑约束;对外服务通过 Service/Ingress 接入,必要时使用云厂商 SLB/全局流量管理实现跨地域高可用。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何在Debian上实现K8S的高可用性
本文地址: https://pptw.com/jishu/749344.html
Ubuntu SFTP如何禁用密码登录 Debian上K8S部署的版本选择建议

游客 回复需填写必要信息