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 请求能够均匀分配到各个控制面板节点。
相关推荐
风曦Kisaki39 分钟前
Kubernetes(K8s)笔记Day03: Pod命名空间,标签,Pod 的调度,污点与容忍度,Pod 常见状态和重启策略,Pod 生命周期
linux·运维·笔记·docker·云原生·容器·kubernetes
张忠琳1 小时前
【NVIDIA】NVIDIA k8s-device-plugin v0.19.3 资源管理器模块深度分析之三
云原生·容器·架构·kubernetes·nvidia
Chengbei113 小时前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
Ai拆代码的曹操4 小时前
K8s 调度器 predicate 阶段揭秘:为什么你的 Pod 总是堆在同一台机器
后端·容器
Ai拆代码的曹操4 小时前
手摸手排查:Pod CrashLoopBackOff 日志丢失问题,3 层兜底方案
后端·容器
瞬间&永恒~4 小时前
【MySQL】练习5-1:配置慢查询日志
linux·运维·云原生
张忠琳5 小时前
【NVIDIA】k8s-device-plugin v0.19.3 — CDI / MIG / vGPU 模块超深度代码分析之五
云原生·容器·架构·kubernetes·nvidia
冷莫溪5 小时前
Docker——3.Harbor 核心架构与原理详解
docker·容器·架构
snow@li6 小时前
命名规范:企业级微服务模块前缀命名规范全景梳理
微服务·云原生·架构
逻极6 小时前
C# 从入门到精通:现代云原生与AI应用开发实战
ai·云原生·c#·.net