集群互联(Alpha)
支持在网络模式同为 Kube-OVN 的集群之间配置集群互联,使集群间 Pod 可以互通访问。集群互联控制器是 Kube-OVN 提供的扩展组件,负责收集不同集群之间的网络信息,并通过下发路由将多个集群的网络打通。
例如在一组集群互联中,包含集群 A、集群 B 和集群 C,在进行集群间负载均衡时,当集群 A 的 Pod 过载或故障时,需要将流量切换到集群 B 和 集群 C,此时集群互联发挥提供集群间 Pod 互通的作用。
前提条件
-
集群互联仅支持 Docker 运行时。
-
自动互联模式下不同集群的子网 CIDR 不能相互重叠,默认子网需在安装时配置为不重叠的网段。若存在重叠需参考后续手动互联过程,只能将不重叠网段打通。
-
需要存在一组机器可以被每个集群的 kube-ovn-controller 通过 IP 访问,用来部署跨集群互联的控制器。
-
每个集群需要有一组可以通过 IP 进行跨集群互访的机器作为之后的网关节点。
-
该功能只对默认 VPC 生效,用户自定义 VPC 无法使用互联功能。
多节点搭建 Kube-OVN 联通控制器
-
选择 任意集群中的三个或三个以上节点 部署联控控制器,在本例中准备了三个节点。
-
选择任一节点当作 Leader,替换相关参数并执行相应命令。
-
Leader 节点使用的命令格式如下:
docker run \ --name=ovn-ic-db \ -d \ --network=host \ --privilege=true \ -v /etc/ovn/:/etc/ovn \ -v /var/run/ovn:/var/run/ovn \ -v /var/log/ovn:/var/log/ovn \ -e LOCAL_IP="<当前节点 IP 地址>" \ -e NODE_IPS="<是集群每个节点的 IP 地址,多个 IP 地址以逗号分割。>" \ <镜像仓库地址> bash start-ic-db.sh
参数 描述 LOCAL_IP
当前节点 IP 地址。 NODE_IPS
准备的每个节点的 IP 地址,多个 IP 地址以逗号分割。 <镜像仓库地址>
可运行命令:docker images | grep ovn 获取。 代码示例:
docker run \ --name=ovn-ic-db \ -d \ --network=host \ --privilege=true \ -v /etc/ovn/:/etc/ovn \ -v /var/run/ovn:/var/run/ovn \ -v /var/log/ovn:/var/log/ovn \ -e LOCAL_IP="192.168.39.37" \ -e NODE_IPS="192.168.39.22,192.168.39.24,192.168.39.37" \ 192.168.39.10:60080/acp/kube-ovn:v1.8.8 bash start-ic-db.sh
-
其余两个节点需多添加一个
LEADER_IP
参数,参数值为 Leader 节点的 IP 地址,代码示例如下:docker run \ --name=ovn-ic-db \ -d \ --network=host \ --privilege=true \ -v /etc/ovn/:/etc/ovn \ -v /var/run/ovn:/var/run/ovn \ -v /var/log/ovn:/var/log/ovn \ -e LOCAL_IP="192.168.39.24" \ -e LEADER_IP="192.168.39.37" \ -e NODE_IPS="192.168.39.22,192.168.39.24,192.168.39.37" \ 192.168.39.10:60080/acp/kube-ovn:v1.8.8 bash start-ic-db.sh
在 Global 集群部署集群互联控制器
在 global 集群的任意控制节点中,根据注释替换如下参数,并执行以下命令创建 ConfigMap 资源。
注意:为了保证操作的正确性,在 global 集群上名为 ovn-ic 的 ConfigMap 不允许修改。如有参数需要变更,请删除该 ConfigMap,重新配置正确后再应用 ConfigMap。
cat << EOF |kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
name: ovn-ic
namespace: cpaas-system
data:
ic-db-host: "192.168.39.22,192.168.39.24,192.168.39.37" # 集群互联控制器所在节点地址,在本例中,即部署控制器的三个节点 local IP
ic-nb-port: "6645" # 集群互联控制器 nb 端口,默认为 6645
ic-sb-port: "6646" # 集群互联控制器 sb 端口,默认为 6646
EOF
加入集群互联
将一个网络模式为 Kube-OVN 的集群加入集群互联。
前提条件
集群中 创建的子网、ovn-default 和 join 子网 与集群互联组内的任意集群网段均不冲突。
操作步骤
-
在左侧导航栏中,单击 集群管理 > 集群。
-
单击待加入集群互联的 集群名称。
-
在右上角单击 操作 > 集群互联。
-
单击 加入集群互联。
-
选择集群的网关节点。
-
单击 加入。
相关操作
更新互联集群的网关节点信息
更新已加入集群互联组的集群网关节点信息。
操作步骤
-
在左侧导航栏中,单击 集群管理 > 集群。
-
单击待更新网关节点信息的 集群名称。
-
在右上角单击 操作 > 集群互联。
-
单击待更新网关节点信息的集群对应的更新网关节点。
-
重新选择集群的网关节点。
-
单击 更新。
退出集群互联
已加入集群互联组的集群退出集群互联,退出后,将断开集群 Pod 与外部集群 Pod 的连接。
操作步骤
-
在左侧导航栏中,单击 集群管理 > 集群。
-
单击待退出集群互联的 集群名称。
-
在右上角单击 操作 > 集群互联。
-
单击待退出集群互联的集群对应的退出集群互联。
-
正确输入集群名称。
-
单击 退出。
手动重置
某些情况下,例如误编辑了 ovn-ic-config 的配置时,OVN-IC 可能出现配置异常的情况。同时由于端口被占用,也可能配置无法恢复,因此需要手动重置环境。在这种情况下,可以按以下操作重置环境:
-
首先删除名为 ovn-ic-config 的 configmap。
kubectl -n kube-system delete cm ovn-ic-config
-
获取 pod 名称。
kubectl -n kube-system -lovn-nb-leader=true get pods
输出示例值如下:
NAME READY STATUS RESTARTS AGE ovn-central-7c97cdbd9-k5qll 1/1 Running 0 7m4s
-
进入上一步中获取到的 pod 名称并执行以下操作。
kubectl -n kube-system exec -ti ovn-central-7c97cdbd9-k5qll bash
-
在容器中执行以下命令,获取端口信息。
ovn-nbctl show | grep ts
输出示例值如下:
switch ae275e63-c2db-44a7-a1b1-c76c37b5965b (ts) port ts-az1 port ts-az0 router-port: az0-ts port az0-ts
-
删除 ts 相关的所有端口,执行命令
ovn-nbctl lsp-del <端口名称>
。注意:该步骤中删除的端口来自于上一步中获取的端口信息,例如在上一步中包含有三个端口:
ts-az1
,ts-az0
,az0-ts
,执行以下命令删除这三个端口。ovn-nbctl lsp-del ts-az1 ovn-nbctl lsp-del ts-az0 ovn-nbctl lrp-del az0-ts
-
处理完毕后执行命令
exit
退出容器,然后再次按照本文档重新部署 ovn-ic-config 即可。