OCP4.6正式支持Kubernetes OVN。

OVN最开始是从OpenStack中发展起来的,OVN也是红帽绝对主导的一个开源项目。OVN相当于给OVS做了一个控制平面。

OVN驾到!_java

OVN的架构如下:OVN驾到!_java_02

后来,OVN技术向K8S做了迁移,形成了OVN-Kubernetes开源项目(https://github.com/ovn-org/ovn-kubernetes)。


OVN-Kubernetes的 CNI实现以下功能:

  • 使用OVN来管理网络流量。OVN是社区开发的,与供应商无关的网络虚拟化解决方案。

  • 实现Kubernetes网络策略支持,包括入口和出口规则。

  • 使用Geneve(通用网络虚拟化封装)协议而不是VXLAN在节点之间创建overlay网络。


OpenShift 4.6默认支持两种网络模式:OpenShift SDN和OVN-Kubernetes。下表总结了两种模式当前功能支持:

上图中OVN不支持的egress router的功能,本身在OCP4中也基本不用了。所以说,OVN可以覆盖生产上对OpenShift SDN方面的需求。


OCP4.6安装后,默认SDN还是OVS,可以用如下方式迁移到OVN:

首先备份现有OVS的配置,输入以下命令:

[root@lb.weixinyucluster ~]# oc get Network.config.openshift.io cluster -o yaml > cluster-openshift-sdn.yaml


启用迁移,通过如下命令修改Cluster Network Operator 配置对象上设置注释:

[root@lb.weixinyucluster ~]# oc annotate Network.operator.openshift.io cluster \

>   'networkoperator.openshift.io/network-migration'=""

network.operator.openshift.io/cluster annotated



更改默认的CNI网络提供商,输入以下命令:

[root@lb.weixinyucluster ~]# oc patch Network.config.openshift.io cluster \

>   --type='merge' --patch '{ "spec": { "networkType": "OVNKubernetes" } }'

network.config.openshift.io/cluster patched


要确认迁移已禁用OpenShift SDN默认的CNI网络提供程序并删除了所有OpenShift SDN Pod,openshift-sdn中的pod会自动删除:

[root@lb.weixinyucluster ~]#  oc get pod -n openshift-sdn

No resources found in openshift-sdn namespace.



集群中的节点重新引导后,请确认迁移成功,如下命令行输出必须为OVNKubernetes:

[root@lb.weixinyucluster ~]# oc get network.config/cluster -o jsonpath='{.status.networkType}{"\n"}'

OVNKubernetes


确认没有error状态的pod:

[root@lb.weixinyucluster ~]# oc get pods --all-namespaces -o wide --sort-by='{.spec.nodeName}' |grep -i error



从“Cluster Network Operator”配置对象中删除迁移注释,输入以下命令:

[root@lb.weixinyucluster ~]# oc annotate Network.operator.openshift.io cluster \

>   networkoperator.openshift.io/network-migration-

network.operator.openshift.io/cluster annotated


删除openshift-sdn ns:

oc delete namespace openshift-sdn


查看OVN组件:

我从上图看出,OVN结构分为三部分:ovnkube-master(运行在三个master上)、ovnkube-node(运行在所有OCP节点上)、ovs-node(运行在所有OCP节点上)。OVN的组件是以daemonset.apps的方式部署的:


我们对比OVN的架构图,OCP中:ovnkube-master pod就是CMS、ovnkube-node pod(运行在所有OCP节点上)就是下图中的ovs-controller、ovs-node pod(运行在所有OCP节点上)就是下图中的ovs-vswitched:


OVN驾到!_java_03