在 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 请求能够均匀分配到各个控制面板节点。