集群负载均衡器
本节介绍如何在高可用性 (HA) K3s 集群的服务器节点前面安装外部负载均衡器。提供了两个示例:Nginx 和 HAProxy。
外部负载均衡器不应该与嵌入式 ServiceLB 混淆,ServiceLB 是一个嵌入式控制器,允许在不部署第三方负载均衡器控制器的情况下使用 Kubernetes LoadBalancer 服务。有关更多详细信息,请参阅 服务负载均衡器。
外部负载均衡器可用于为注册节点提供固定的注册地址,或用于外部访问 Kubernetes API 服务器。对于公开 LoadBalancer 服务,外部负载均衡器可以与 ServiceLB 一起使用或代替 ServiceLB,但在大多数情况下,MetalLB 或 Kube-VIP 等替代负载均衡器控制器是更好的选择。
先决条件
此示例中的所有节点都在运行 Ubuntu 20.04。
对于这两个示例,假设已在 3 个节点上安装了 具有嵌入式 etcd 的 HA K3s 集群。
每个 k3s 服务器都配置了
# /etc/rancher/k3s/config.yaml
token: lb-cluster-gd
tls-san: 10.10.10.100
节点具有以下主机名和 IP 地址:
- server-1:
10.10.10.50
- server-2:
10.10.10.51
- server-3:
10.10.10.52
用于负载均衡的另外两个节点配置了以下主机名和 IP 地址:
- lb-1:
10.10.10.98
- lb-2:
10.10.10.99
另外三个节点存在,主机名和 IP 地址为:
- agent-1:
10.10.10.101
- agent-2:
10.10.10.102
- agent-3:
10.10.10.103
设置负载均衡器
- HAProxy
- Nginx
HAProxy 是一种开源选项,提供 TCP 负载均衡器。它还支持负载均衡器本身的 HA,确保所有级别的冗余。有关更多信息,请参阅 HAProxy 文档。
此外,我们将使用 KeepAlived 生成一个虚拟 IP(VIP),该虚拟 IP 将用于访问集群。有关更多信息,请参阅 KeepAlived 文档。
- 安装 HAProxy 和 KeepAlived
sudo apt-get install haproxy keepalived
- 在 lb-1 和 lb-2 上将以下内容添加到
/etc/haproxy/haproxy.cfg
frontend k3s-frontend
bind *:6443
mode tcp
option tcplog
default_backend k3s-backend
backend k3s-backend
mode tcp
option tcp-check
balance roundrobin
default-server inter 10s downinter 5s
server server-1 10.10.10.50:6443 check
server server-2 10.10.10.51:6443 check
server server-3 10.10.10.52:6443 check
- 在 lb-1 和 lb-2 上将以下内容添加到
/etc/keepalived/keepalived.conf
global_defs {
enable_script_security
script_user root
}
vrrp_script chk_haproxy {
script 'killall -0 haproxy' # faster than pidof
interval 2
}
vrrp_instance haproxy-vip {
interface eth1
state <STATE> # MASTER on lb-1, BACKUP on lb-2
priority <PRIORITY> # 200 on lb-1, 100 on lb-2
virtual_router_id 51
virtual_ipaddress {
10.10.10.100/24
}
track_script {
chk_haproxy
}
}
- 在 lb-1 和 lb-2 上重新启动 HAProxy 和 KeepAlived
systemctl restart haproxy
systemctl restart keepalived
- 在 agent-1、agent-2 和 agent-3 上,运行以下命令来安装 k3s 并加入集群
curl -sfL https://get.k3s.io | K3S_TOKEN=lb-cluster-gd sh -s - agent --server https://10.10.10.100:6443
您现在可以使用服务器节点上的 kubectl
与集群交互。
root@server-1 $ k3s kubectl get nodes -A
NAME STATUS ROLES AGE VERSION
agent-1 Ready <none> 32s v1.27.3+k3s1
agent-2 Ready <none> 20s v1.27.3+k3s1
agent-3 Ready <none> 9s v1.27.3+k3s1
server-1 Ready control-plane,etcd,master 4m22s v1.27.3+k3s1
server-2 Ready control-plane,etcd,master 3m58s v1.27.3+k3s1
server-3 Ready control-plane,etcd,master 3m12s v1.27.3+k3s1
Nginx 负载均衡器
Nginx 本身不支持高可用性 (HA) 配置。如果设置 HA 集群,在 K3s 前面只有一个负载均衡器将重新引入单点故障。
Nginx 开源 提供 TCP 负载均衡器。有关更多信息,请参阅 使用 nginx 作为 HTTP 负载均衡器。
- 在 lb-1 上创建一个
nginx.conf
文件,内容如下
events {}
stream {
upstream k3s_servers {
server 10.10.10.50:6443;
server 10.10.10.51:6443;
server 10.10.10.52:6443;
}
server {
listen 6443;
proxy_pass k3s_servers;
}
}
- 在 lb-1 上运行 Nginx 负载均衡器
使用 docker
docker run -d --restart unless-stopped \
-v ${PWD}/nginx.conf:/etc/nginx/nginx.conf \
-p 6443:6443 \
nginx:stable
或 安装 nginx,然后运行
cp nginx.conf /etc/nginx/nginx.conf
systemctl start nginx
- 在 agent-1、agent-2 和 agent-3 上,运行以下命令来安装 k3s 并加入集群
curl -sfL https://get.k3s.io | K3S_TOKEN=lb-cluster-gd sh -s - agent --server https://10.10.10.98:6443
您现在可以使用服务器节点上的 kubectl
与集群交互。
root@server1 $ k3s kubectl get nodes -A
NAME STATUS ROLES AGE VERSION
agent-1 Ready <none> 30s v1.27.3+k3s1
agent-2 Ready <none> 22s v1.27.3+k3s1
agent-3 Ready <none> 13s v1.27.3+k3s1
server-1 Ready control-plane,etcd,master 4m49s v1.27.3+k3s1
server-2 Ready control-plane,etcd,master 3m58s v1.27.3+k3s1
server-3 Ready control-plane,etcd,master 3m16s v1.27.3+k3s1