温馨提示×

Debian如何实现Kubernetes高可用部署

小樊
52
2025-09-19 16:04:59
栏目: 智能运维

Debian环境下实现Kubernetes高可用部署指南

一、环境准备

1. 节点规划

  • 控制平面节点(Master):至少3台(实现etcd和kube-apiserver的高可用);
  • 工作节点(Worker):根据业务负载需求添加(至少2台);
  • 负载均衡器:1台(用于分发kube-apiserver流量至多个Master节点,推荐HAProxy或Nginx);
  • 操作系统:Debian 12(Bookworm)及以上(确保内核版本≥5.10,支持容器运行时)。

2. 基础配置

  • 网络互通:所有节点配置静态IP,通过/etc/hosts文件或DNS实现主机名解析(如192.168.1.10 master01192.168.1.11 master02);
  • 关闭Swap:执行sudo swapoff -a禁用Swap,并注释/etc/fstab中的Swap条目(Kubernetes要求);
  • 防火墙设置:允许Kubernetes关键端口(如API Server的6443/tcp、kubelet的10250/tcp、etcd的2379/tcp/2380/tcp);
  • 容器运行时:安装containerd(推荐)或Docker,配置为开机自启(参考官方文档调整runtime参数,如/etc/containerd/config.toml)。

二、安装Kubernetes核心组件

在所有节点上执行以下操作:

  1. 添加Kubernetes APT仓库
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo tee /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 
  2. 安装kubelet、kubeadm、kubectl
    sudo apt update && sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl # 锁定版本,避免意外升级 

三、初始化第一个Master节点(Leader)

  1. 初始化集群:使用kubeadm init命令,指定--control-plane-endpoint(负载均衡器的VIP,如192.168.1.100:6443)和--pod-network-cidr(Pod网络CIDR,如10.244.0.0/16):
    sudo kubeadm init --control-plane-endpoint=192.168.1.100:6443 --pod-network-cidr=10.244.0.0/16 
  2. 配置kubectl:将Admin配置复制到当前用户目录:
    mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 

四、部署Pod网络插件

选择支持多Master的网络插件(如Calico),执行以下命令:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml 

等待插件Pod全部Runningkubectl get pods -n calico-system)。

五、加入其他Master节点

  1. 获取Join命令:在第一个Master节点上执行kubeadm token create --print-join-command,记录输出(包含token和CA证书哈希);
  2. 加入Master节点:在其他Master节点上执行该命令(替换为实际的IP和token):
    sudo kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> --control-plane 

六、加入Worker节点

在Worker节点上执行kubeadm join命令(使用第一个Master节点生成的token和CA证书哈希,无需--control-plane参数):

sudo kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> 

七、配置高可用关键组件

1. etcd高可用

  • 多实例部署:etcd默认随Master节点部署,3个Master节点对应3个etcd实例(Raft协议保证一致性);
  • 证书管理:使用kubeadm init生成的证书(位于/etc/kubernetes/pki/etcd),确保证书有效期(默认1年);
  • 备份策略:定期备份etcd数据(使用etcdctl snapshot save命令),存储至异地。

2. kube-apiserver高可用

  • 负载均衡器配置:使用HAProxy或Nginx作为前端负载均衡器,将192.168.1.100:6443(VIP)的流量分发至所有Master节点的6443端口;
  • 健康检查:配置负载均衡器的健康检查(如/healthz端点),自动剔除故障节点;
  • VIP漂移:可选Keepalived实现VIP的自动漂移(当主负载均衡器故障时,备节点接管VIP)。

3. 控制平面组件高可用

  • kube-controller-manager和kube-scheduler:通过--leader-elect=true参数(默认开启)实现Leader选举,同一时间仅一个实例处理请求,故障时自动切换。

八、验证集群高可用性

  1. 检查节点状态
    kubectl get nodes 
    所有节点应显示Ready状态;
  2. 模拟故障
    • 停止某个Master节点的kube-apiserver服务(sudo systemctl stop kube-apiserver),观察负载均衡器是否将流量切换至其他Master;
    • 删除etcd实例(docker rm -f etcd),验证etcd集群是否自动恢复;
  3. 检查Pod状态
    kubectl get pods --all-namespaces 
    所有Pod应保持RunningCompleted状态。

九、后续维护

  • 监控:部署Prometheus+Grafana监控集群资源(CPU、内存、Pod状态)和etcd性能;
  • 日志:使用EFK(Elasticsearch+Fluentd+Kibana)或Loki收集集群日志;
  • 备份:定期备份etcd数据(etcdctl snapshot save /backup/etcd-$(date +%F).snap)和控制平面配置;
  • 升级:使用kubeadm upgrade命令滚动升级集群组件,确保兼容性。

0