k8s集群安装keepalive+haproxy

在 Ubuntu 上部署 Keepalived + HAProxy 实现 Kubernetes 两个控制面的高可用,需要通过以下步骤来配置和部署。这种高可用方案通过 Keepalived 来管理虚拟 IP(VIP),并使用 HAProxy 来进行负载均衡,使得 Kubernetes 控制面板能够在任意节点故障时保持高可用。

1. 准备工作

假设你已经有两个 Kubernetes 控制面板节点,IP 地址分别为:

  • 控制面板 1192.168.17.68
  • 控制面板 2192.168.17.247

并且你希望通过一个虚拟 IP(VIP),例如 192.168.17.100,来实现高可用。

2. 安装 Keepalived 和 HAProxy

在两个控制面板节点上,安装 KeepalivedHAProxy

a. 安装 Keepalived 和 HAProxy

复制代码
sudo apt update
sudo apt install -y keepalived haproxy

b. 安装其他必要工具

确保安装了 iproute2,以便管理网络配置:

复制代码
sudo apt install -y iproute2

3. 配置 Keepalived

Keepalived 负责管理虚拟 IP(VIP),并在主节点失效时将其漂移到备节点。

a. 在控制面板 1 上配置 Keepalived

编辑 /etc/keepalived/keepalived.conf 配置文件:

复制代码
sudo nano /etc/keepalived/keepalived.conf

配置文件内容如下:

复制代码
vrrp_instance VI_1 {
    state MASTER                    # 当前节点为 MASTER
    interface eth0                  # 网络接口,根据你的环境选择接口(通常是 eth0 或 enp3s0)
    virtual_router_id 51            # VRRP 唯一标识,两个节点要相同
    priority 101                    # 优先级,MASTER 比 SLAVE 优先级高,数字越大优先级越高
    advert_int 1                    # 广播周期
    authentication {
        auth_type PASS              # 设置认证类型
        auth_pass 1111              # 设置认证密码,必须在两个节点相同
    }
    virtual_ipaddress {
        192.168.17.100              # 配置虚拟 IP 地址(VIP)
    }
}

b. 在控制面板 2 上配置 Keepalived

在第二个控制面板节点(192.168.17.247)上编辑 /etc/keepalived/keepalived.conf 文件:

复制代码
sudo nano /etc/keepalived/keepalived.conf

配置文件内容与第一台节点的配置基本相同,区别在于 stateBACKUP,且优先级为较低的值:

复制代码
vrrp_instance VI_1 {
    state BACKUP                   # 当前节点为 BACKUP
    interface eth0                  # 网络接口(根据实际网卡调整)
    virtual_router_id 51            # 与 MASTER 相同
    priority 100                    # 设置较低优先级
    advert_int 1                    # 广播周期
    authentication {
        auth_type PASS              # 设置认证类型
        auth_pass 1111              # 设置认证密码,必须在两个节点相同
    }
    virtual_ipaddress {
        192.168.17.100              # 配置虚拟 IP 地址(VIP)
    }
}

c. 启动 Keepalived

在两个节点上启用并启动 keepalived 服务:

复制代码
sudo systemctl enable keepalived
sudo systemctl start keepalived

4. 配置 HAProxy

HAProxy 用于负载均衡,将请求转发到 Kubernetes 控制面板的 API 服务器。

a. 在两台控制面板上配置 HAProxy

编辑 /etc/haproxy/haproxy.cfg 配置文件:

复制代码
sudo nano /etc/haproxy/haproxy.cfg

配置文件内容如下:

复制代码
global
    log /dev/log   local0
    log /dev/log   local1 notice
    chroot /var/lib/haproxy
    stats socket /var/run/haproxy.sock mode 660 level admin
    maxconn 200
defaults
    log     global
    option  httplog
    option  dontlognull
    timeout connect 5000ms
    timeout client  50000ms
    timeout server  50000ms
frontend kubernetes-api
    bind *:6443                           # 监听控制面板的 API 端口
    default_backend kubernetes-api-backend
backend kubernetes-api-backend
    balance roundrobin                     # 轮询负载均衡
    server master1 192.168.17.68:6443 check # k8s控制面板 1
    server master2 192.168.17.247:6443 check # k8s控制面板 2

b. 启动 HAProxy

启用并启动 haproxy 服务:

复制代码
sudo systemctl enable haproxy
sudo systemctl start haproxy

5. 配置 Kubernetes 集群使用虚拟 IP (VIP)

在 Kubernetes 配置中,你需要指定 192.168.17.100 作为 Kubernetes 控制面板的 API 服务器地址。

a. 修改 kubelet 配置

确保在 kubelet 配置文件中或在启动参数中使用虚拟 IP 地址。例如,在 /etc/default/kubelet 或 Kubernetes 启动参数中,设置:

复制代码
KUBELET_EXTRA_ARGS=--api-server-advertise-address=192.168.17.100

b. 修改 kubeadm 配置文件

如果你使用 kubeadm 部署 Kubernetes,可以在 kubeadm 配置文件(如 /etc/kubernetes/kubeadm-config.yaml)中指定 API 服务器的地址为 192.168.17.100

复制代码
apiServer:
  certSANs:
    - "192.168.17.100"
  extraArgs:
    "advertise-address": "192.168.17.100"

6. 验证高可用配置

a. 验证 VIP 是否生效

在任一节点上检查虚拟 IP 是否成功绑定:

复制代码
ip a show

确保 192.168.17.100 虚拟 IP 已经绑定在其中一个节点上。

b. 检查 HAProxy 是否正常工作

使用 curl 来检查负载均衡是否有效:

复制代码
curl https://192.168.17.100:6443

你应该能访问到 Kubernetes 控制面板的 API。

c. 验证故障转移

关闭主节点上的 keepalived 服务,验证是否能自动漂移到备节点:

复制代码
sudo systemctl stop keepalived

确保 VIP 和流量能够自动转移到备份节点。

7. 总结

通过上述步骤,你已经成功部署了一个基于 Keepalived + HAProxy 的 Kubernetes 控制面板高可用架构:

  • Keepalived 用于提供虚拟 IP(VIP),并在主节点故障时自动进行故障转移。
  • HAProxy 用于实现 Kubernetes 控制面板的负载均衡,确保 API 请求能够均匀分配到各个控制面板节点。
相关推荐
白夜易寒6 小时前
Docker学习之私有仓库(day10)
学习·docker·容器
GrapefruitCat10 小时前
Envoy 学习笔记(一)
云原生
tingting011910 小时前
k8s 1.30 安装ingress-nginx
nginx·容器·kubernetes
Mia@12 小时前
网络通信&微服务
微服务·云原生·架构
陈陈CHENCHEN12 小时前
【Kubernetes】CentOS 7 安装 Kubernetes 1.30.1
kubernetes
2201_7611990413 小时前
k8s2部署
云原生·容器·kubernetes
阿里云云原生14 小时前
Nacos 发布 MCP Registry,实现存量应用接口“0改动”升级到 MCP 协议
云原生
阿里云云原生14 小时前
Higress 开源 Remote MCP Server 托管方案,并将上线 MCP 市场
云原生
云上艺旅14 小时前
K8S学习之基础六十四:helm常用命令
学习·云原生·容器·kubernetes