Kube-OVN 的高可用涉及两个组件的高可用:OVN DB 的高可用以及 Kube-OVN-Controller 的高可用。

这两个组件的高可用模式不同,其中 OVN DB 通过 RAFT 做分布式一致可以做到 active-active 的 cluster 高可用。Kube-OVN-Controller 需要处理集群中的状态和事件,同一时间内只能有一个工作实例,因此采用了 leader-election 的方式进行选举式的高可用。下面我们分别来看如何对两个组件进行高可用部署。

OVN DB 高可用

  1. 通过给 node 加标签的方式增加 ovn db 部署的节点,建议总共有奇数个部署 OVN DB 的节点(3,5…)

kubectl label node <Node on which to deploy OVN DB> kube-ovn/role=master

  1. 修改 ovn.yaml 中 ovn-central deployment 的 replicas 为商议步中对应 node 的数量

  2. 修改 ovn.yaml 中 ovn-central deployment 的 env,增加 NODE_IPS 为对应节点的 IP

  1. replicas: 3
  2. containers:
  3. - name: ovn-central
  4. image: "index.alauda.cn/alaudak8s/kube-ovn-db:v1.0.1"
  5. imagePullPolicy: Always
  6. env:
  7. - name: POD_IP
  8. valueFrom:
  9. fieldRef:
  10. fieldPath: status.podIP
  11. - name: NODE_IPS
  12. value: 192.168.55.10, 192.168.55.11, 192.168.55.12
  1. 部署修改后的 yaml

kubectl apply -f ovn.yaml

等待 ovn-central pod 进入 ready 状态

  1. [root@node2 yamls]# kubectl get pod -n kube-ovn
  2. NAME READY STATUS RESTARTS AGE
  3. ovn-central-7bf5744db7-7d88s 1/1 Running 0 73s
  4. ovn-central-7bf5744db7-c7sdh 1/1 Running 0 73s
  5. ovn-central-7bf5744db7-wtn4s 1/1 Running 0 73s

Kube-OVN-Controller 高可用

Kube-OVN-Controller 本身实现了 leader-election,只需要增加 replicas 数量即可实现高可用。

更改 kube-ovn.yaml 中 kube-ovn-controller deployment 的 replicas 数量,并 apply yaml 即可。