部署高可用openelb服务

时间:2022-10-02 16:57:19

使用 kubectl 安装 OpenELB

# 当前使用的是最新版 openelb:v0.5.1
kubectl apply -f openelb.yaml

执行完毕后,请再次执行下述命令检查openelb-manager的状态:

# kubectl get pod -n openelb-system -o wide
NAME                               READY   STATUS      RESTARTS   AGE        NODE         NOMINATED NODE   READINESS GATES
openelb-admission-create-k5ff9     0/1     Completed   0          112s    k8s-node-1          <none>           <none>
openelb-admission-patch-h5zvh      0/1     Completed   0          112s    k8s-node-0          <none>           <none>
openelb-keepalive-vip-4qvq5        1/1     Running     0          84s     k8s-node-0          <none>           <none>
openelb-keepalive-vip-5hrcp        1/1     Running     0          84s     k8s-node-2          <none>           <none>
openelb-keepalive-vip-r7qt2        1/1     Running     0          84s     k8s-node-1          <none>           <none>
openelb-manager-85b6fc6c6b-9tz4w   1/1     Running     0          112s    k8s-node-0          <none>           <none>

注意:在删除 OpenELB 之前,必须确保openelb-system命名空间下没有任何服务,特别是后面配置到eip时,必须先删除Eip,再删除 OpenELB ,否则你会遇到无法删除Eip的Bug,引用来源:https://kubesphere.com.cn/forum/d/2379-porter/8。

配置 OpenELB

基于Layer2模式进行配置,另外服务器都是使用的单网卡

为 kube-proxy 启用 strictARP

在Layer2模式下,需要为kube-proxy启用strictARP,以便Kubernetes集群中的所有NIC停止响应来自其他NIC的ARP请求,让OpenELB处理ARP请求。

kubectl edit configmap kube-proxy -n kube-system
# 将data.config.conf.ipvs.strictARP设置为True
ipvs:  strictARP: true
# 滚动更新
kubectl rollout restart daemonset kube-proxy -n kube-system

创建公网EIP对象(Eip)

这里的EIP对象充当OpenELB的IP地址池,如果你有多个IP,则填写起始IP-结束IP,如果你只有一个IP,则填写一个就好。

kubectl apply -f layer2-eip.yaml
# 查看EIP信息
kubectl get Eip

在KubeSphere启用集群网关,并指定OpenELB为负载均衡器提供商

登录KubeSphere控制台,在【集群】-> 【集群设置】-> 【网关设置】,添加一个集群网关,选择OpenELB为负载均衡器提供商,并在注解(即注释)中添加以下三项:

lb.kubesphere.io/v1alpha1: openelb
protocol.openelb.kubesphere.io/v1alpha1: layer2
eip.openelb.kubesphere.io/v1alpha2: layer2-eip

部署高可用openelb服务

最后还需要在【平台管理】-> 【集群管理】,进入集群,在系统项目kubesphere-controls-system中找到集群网关对应的服务,本例中的是kubesphere-router-kubesphere-system

部署高可用openelb服务

编辑服务的配置文件,将 externalTrafficPolicy 改为 Local 模式即可。

部署高可用openelb服务

至此,OpenELB的安装结束。后续就可以在项目部署中,直接使用这个集群网关,提供网站80和443端口的暴露了。

创建负载均衡测试服务

切到测试目录~/ceshi,部署对应的deployment和svc:

kubectl apply -f openelb-nginx.yaml
kubectl apply -f openelb-nginx-svc.yaml
# 查看服务
# kubectl get svc nginx
NAME    TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
nginx   LoadBalancer   10.233.2.218   192.168.16.211   80:31032/TCP   40h

浏览器或命令行访问192.168.16.211

部署高可用openelb服务

查看Eip使用情况:

# kubectl get eip -o yaml
  usage: 2
    used:
      192.168.16.210: kubesphere-controls-system/kubesphere-router-kubesphere-system
      192.168.16.211: default/nginx
    v4: true

集群网关测试

我们将k8s集群中prometheus以域名形式浏览器访问,域名为wutf.test.com,因是临时测试,域名解析至本地hosts文件中即可。

配置应用路由:

部署高可用openelb服务

保存后,稍等一会儿,直接界面点击访问服务测试即可。

OpenELB-manager高可用

默认情况下,openelb-manager只会部署一个副本,对于可用性要求较高的生产环境可能无法满足需求,官方也给出了部署多个副本的教程。

官方教程的方式是推荐通过给节点添加label的方式来控制副本的部署数量和位置,这里我们将其配置为每个节点都运行一个服务(类似于daemonset)。首先我们给需要部署的节点打上labels。

# 我们给集群内的三个节点都打上label
kubectl label --overwrite nodes k8s-node-0 k8s-node-1 k8s-node-2 lb.kubesphere.io/v1alpha1=openelb
# 查看标签
# kubectl get nodes -o wide --show-labels=true | grep openelb

然后我们先把副本的数量缩容到0。

kubectl scale deployment openelb-manager --replicas=0 -n openelb-system

接着修改配置,在部署节点的nodeSelector字段中增加我们前面新加的labels。

# kubectl get deployment openelb-manager -n openelb-system -o yaml
...略去一堆输出...
      nodeSelector:
        kubernetes.io/os: linux
        lb.kubesphere.io/v1alpha1: openelb
...略去一堆输出...

扩容副本数量到3。

kubectl scale deployment openelb-manager --replicas=3 -n openelb-system

检查deployment状态:

# kubectl get po -n openelb-system -o wide
NAME                               READY   STATUS      RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
openelb-admission-create-n4dfc     0/1     Completed   0          41h   10.233.111.12   k8s-node-0   <none>           <none>
openelb-admission-patch-67n8v      0/1     Completed   0          41h   10.233.113.11   k8s-node-2   <none>           <none>
openelb-keepalive-vip-5vxvb        1/1     Running     0          41h   192.168.16.160     k8s-node-2   <none>           <none>
openelb-keepalive-vip-srslh        1/1     Running     0          41h   192.168.16.157     k8s-node-0   <none>           <none>
openelb-keepalive-vip-w2tr5        1/1     Running     0          41h   192.168.16.159     k8s-node-1   <none>           <none>
openelb-manager-6c5db95cd8-7nkzt   1/1     Running     0          52s   192.168.16.159     k8s-node-1   <none>           <none>
openelb-manager-6c5db95cd8-d2qzk   1/1     Running     0          52s   192.168.16.157     k8s-node-0   <none>           <none>
openelb-manager-6c5db95cd8-wrmgm   1/1     Running     0          52s   192.168.16.160     k8s-node-2   <none>           <none>

参考文档