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 请求能够均匀分配到各个控制面板节点。
相关推荐
互联网哪些事情3 分钟前
Docker 容器化部署宝塔 Linux 面板
linux·docker·容器·宝塔云服务器
坚定信念,勇往无前9 分钟前
docker安装mongodb
mongodb·docker·容器
Destiny_where11 分钟前
k8s常用指令集合
linux·docker·kubernetes
叮咚侠36 分钟前
将已创建的Elasticsearch 8.12.0的docker容器中的数据挂载到宿主机操作步骤
运维·elasticsearch·docker·容器·kibana
wuxingge1 小时前
docker设置代理,通过代理服务器拉取镜像
docker·容器
SZ1701102311 小时前
K8s 部署所需的配置文件
云原生·容器·kubernetes
小池先生1 小时前
docker 安装gitlab
docker·容器·gitlab
赫尔·普莱蒂科萨·帕塔1 小时前
Kurator 分布式云原生环境技术深度分析与实践指南
分布式·云原生
永亮同学1 小时前
【探索实战】从“工具堆叠”到“平台治理”:基于 Kurator 构建统一分布式云原生管理底座的实践与思考
分布式·云原生
rchmin1 小时前
云原生概念与技术详解
云原生