温馨提示×

如何在Ubuntu上实现Kubernetes的高可用

小樊
74
2025-08-23 21:19:44
栏目: 智能运维

在Ubuntu上实现Kubernetes高可用需围绕控制平面高可用和节点冗余展开,核心步骤如下:

一、基础环境准备

  1. 节点规划:至少3个Master节点(用于控制平面高可用)和2个Node节点(运行工作负载)。
  2. 系统配置
    • 禁用交换空间:swapoff -a 并修改 /etc/fstab 永久生效。
    • 关闭防火墙:ufw disable(生产环境建议配置防火墙规则)。
    • 安装Docker:使用官方仓库安装并配置镜像加速。
    • 安装Kubernetes工具:kubeadmkubeletkubectl

二、控制平面高可用(关键步骤)

1. 初始化第一个Master节点

使用 kubeadm init 并指定负载均衡器地址(后续会通过HAProxy+Keepalived实现):

sudo kubeadm init --control-plane-endpoint <VIP>:6443 --upload-certs  

其中 <VIP> 为虚拟IP(由HAProxy+Keepalived提供),初始化后配置 kubectl

mkdir -p $HOME/.kube  
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  

2. 部署HAProxy+Keepalived

  • HAProxy:作为API Server的负载均衡器,配置 /etc/haproxy/haproxy.cfg,将流量分发到多个Master节点的API Server(端口6443)。
    frontend kubernetes-api  
      bind *:6443  
      mode tcp  
      default_backend kubernetes-api-backend  
    backend kubernetes-api-backend  
      mode tcp  
      balance roundrobin  
      server master1 <Master1_IP>:6443 check  
      server master2 <Master2_IP>:6443 check  
      server master3 <Master3_IP>:6443 check  
    
  • Keepalived:为HAProxy提供虚拟IP(VIP),监控其健康状态,故障时自动切换。
    sudo apt install keepalived  
    
    配置 /etc/keepalived/keepalived.conf,定义VIP和优先级,例如:
    vrrp_instance VI_1 {  
      state MASTER  
      interface eth0  
      virtual_router_id 51  
      priority 100  
      virtual_ipaddress {  
        <VIP>  
      }  
    }  
    

3. 扩展Master节点

在其他Master节点上执行 kubeadm join,加入控制平面集群,确保多个Master节点共同提供服务。

三、工作节点高可用

  1. 加入Node节点:在Node节点上安装Docker和Kubernetes工具,执行 kubeadm join 加入集群。
  2. Pod反亲和性配置:通过Pod的 affinityanti-affinity 规则,将副本分散到不同Node节点,避免单点故障。

四、验证与优化

  1. 检查集群状态
    kubectl get nodes  # 确保所有节点状态为Ready  
    kubectl get pods -A  # 检查系统组件Pod是否正常运行  
    
  2. 网络插件部署:选择Calico、Flannel等网络插件,确保跨节点Pod通信。
  3. 监控与告警:部署Prometheus+Grafana监控集群状态,配置告警规则。

参考资料

0