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 请求能够均匀分配到各个控制面板节点。
相关推荐
伪装成塔的小兵40 分钟前
Windows使用docker部署fastgpt出现的一些问题
windows·docker·容器·oneapi·fastgpt
寂夜了无痕1 小时前
k8s容器运行时环境选型指南
云原生·kubernetes·k8s运行时环境选择
元气满满的热码式2 小时前
logstash中的input插件(http插件,graphite插件)
网络·网络协议·http·elasticsearch·云原生
转身後 默落4 小时前
11.Docker 之分布式仓库 Harbor
分布式·docker·容器
Swift社区4 小时前
【微服务优化】ELK日志聚合与查询性能提升实战指南
spring·elk·微服务·云原生·架构
guihong0045 小时前
深入解析Zookeeper脑裂问题与CAP取舍:从原理到实战
分布式·zookeeper·云原生
菩提云5 小时前
Deepseek存算分离安全部署手册
人工智能·深度学习·安全·docker·容器
努力的小T15 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
东风微鸣16 小时前
TTRSS 迁移实战
docker·云原生·kubernetes·可观察性
Smile_Gently18 小时前
Docker
云原生·eureka