Kube-OVN 的高可用涉及两个组件的高可用:OVN DB 的高可用以及 Kube-OVN-Controller 的高可用。
这两个组件的高可用模式不同,其中 OVN DB 通过 RAFT 做分布式一致可以做到 active-active 的 cluster 高可用。Kube-OVN-Controller 需要处理集群中的状态和事件,同一时间内只能有一个工作实例,因此采用了 leader-election 的方式进行选举式的高可用。下面我们分别来看如何对两个组件进行高可用部署。
OVN DB 高可用
通过给 node 加标签的方式增加 ovn db 部署的节点,建议总共有奇数个部署 OVN DB 的节点(3,5…)
kubectl label node <Node on which to deploy OVN DB> kube-ovn/role=master
修改
ovn.yaml
中 ovn-central deployment 的 replicas 为商议步中对应 node 的数量修改
ovn.yaml
中 ovn-central deployment 的 env,增加 NODE_IPS 为对应节点的 IP
- replicas: 3
- containers:
- - name: ovn-central
- image: "index.alauda.cn/alaudak8s/kube-ovn-db:v1.0.1"
- imagePullPolicy: Always
- env:
- - name: POD_IP
- valueFrom:
- fieldRef:
- fieldPath: status.podIP
- - name: NODE_IPS
- value: 192.168.55.10, 192.168.55.11, 192.168.55.12
- 部署修改后的 yaml
kubectl apply -f ovn.yaml
等待 ovn-central pod 进入 ready 状态
- [root@node2 yamls]# kubectl get pod -n kube-ovn
- NAME READY STATUS RESTARTS AGE
- ovn-central-7bf5744db7-7d88s 1/1 Running 0 73s
- ovn-central-7bf5744db7-c7sdh 1/1 Running 0 73s
- 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 即可。