k8s集群安装keepalive+haproxy

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

1. 准备工作

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

  • 控制面板 1 :192.168.17.68
  • 控制面板 2 :192.168.17.247

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

2. 安装 Keepalived 和 HAProxy

在两个控制面板节点上,安装 Keepalived 和 HAProxy。

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

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

复制代码
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 请求能够均匀分配到各个控制面板节点。
相关推荐
java_logo1 小时前
Docker 部署 dockurr/windows:轻松搭建浏览器可控 Windows 虚拟机
运维·windows·docker·容器·虚拟机·kvm·轩辕镜像
谢亮_vipxieliang2 小时前
私有镜像仓库:Registry、Harbor 与镜像同步实战
网络·docker·容器
余槐i2 小时前
将AI Agent嵌入现有Java系统时,Spring Boot 3.2的异步冲突与内存泄漏排查
人工智能·spring boot·性能优化·kubernetes·ai agent
分布式存储与RustFS3 小时前
自托管对象存储的三种 TLS 签发:自签、Let‘s Encrypt、内网 CA 的选择与轮换
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
分布式存储与RustFS3 小时前
把现有 S3 工具链直接接到 RustFS:100% 兼容到底覆盖哪些 API
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
2601_962219013 小时前
操作日志全留存架构:万象生鲜系统生鲜业务合规审计底层实现方案
微服务·云原生·架构
江湖有缘4 小时前
3款开源IT工具箱整理合集,可Docker一键部署!
docker·容器·开源
分布式存储与RustFS4 小时前
AI 训练大文件 Range 读爆炸?RustFS 前面挂一层 Cachey
缓存·云原生·开源·对象存储·分布式存储·ai训练·s3
旋生万物4 小时前
用螺旋数重写 Transformer Attention:让大模型自带“相位记忆“的 PyTorch 实现
docker·云原生·kubernetes·螺旋生成论·螺旋相位
编码如写诗5 小时前
【k8s】全新Ubuntu 26.04 使用kt 超简单安装 k8s 最新1.37.1+KubeSphere4.1.3
ubuntu·容器·kubernetes