如何在Debian上实现K8S的高可用性
导读:在 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=1、net.bridge.bridge-nf-call-ip6tables=1、net.ipv4.ip_forward=1 - 防火墙放行:至少放行 6443/TCP(API)、10250/TCP(kubelet)、8472/UDP(Calico VXLAN) 等必要端口(按网络插件与云环境调整)。
- 关闭 Swap:
二 安装容器运行时与 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 与控制面组件多副本,形成高可用控制面。
- 在首个控制面节点初始化(将控制面端点指向 VIP):
- 方案 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/BACKUP、interface eth0、virtual_router_id 51、priority 100/90、
virtual_ipaddress { 192.168.16.10/24 } - 启用非本地绑定:
net.ipv4.ip_nonlocal_bind=1
- 定义 state MASTER/BACKUP、interface eth0、virtual_router_id 51、priority 100/90、
- 启动:
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 wide、kubectl get pods -A - 部署测试应用:
kubectl create deployment nginx --image=nginx:1.25 --replicas=3,kubectl 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
