Kube-OVN是一款由灵雀云自主研发的开源企业级云原生Kubernetes容器网络编排系统,它通过将OpenStack领域成熟的网络功能平移到Kubernetes,极大增强了Kubernetes容器网络的安全性、可运维性、管理性和性能,为Kubernetes生态的落地带来了独特的价值。

        Kube-OVN可提供跨云网络管理、传统网络架构与基础设施的互联互通、边缘集群落地等复杂应用场景的能力支持,解除Kubernetes网络面临的性能和安全监控的掣肘,为基于Kubernetes架构原生设计的系统提供最为成熟的网络底座,提升用户对Kubernetes生态Runtime的稳定性和易用性。目前,Kube-OVN已成为开源社区最受欢迎的Kubernetes网络解决方案之一,并已成功实现了上千集群级别的大规模企业级项目、海外项目落地,以及商业化的初步尝试。

1. 架构

    kube-ovn组件可以分为三类:

  • The upstream OVN components
  • The core controller components
  • Monitor, diagnose, and extension tools

  kube-ovn 自定义的 CRD:

NAMESHORTNAMESAPIGROUPNAMESPACEDKIND
ipsipkubeovn.iofalseIP
provider-networkskubeovn.iofalseProviderNetwork
subnetssubnetkubeovn.iofalseSubnet
vlans                        vlankubeovn.iofalseVlan
vpc-nat-gatewaysvpc-nat-gwkubeovn.iofalseVpcNatGateway
vpcsvpckubeovn.iofalseVpc

2. 部署

  2.1 一键脚本部署

Kubernetes>=1.16 wget https://raw.githubusercontent.com/alauda/kube-ovn/release-1.7/dist/images/install.sh 

  2.2 一步步执行

   node 节点打标签

kubectl label no -lbeta.kubernetes.io/os=linux kubernetes.io/os=linux --overwrite

   给nodej节点打上标签用来部署 OVN DB 和 OVN 控制面

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

  安装 kube-ovn CRD,包括 ips subnet vlans provider-networks vpcs vpc-nat-gateways 

kubectl apply -f https://raw.githubusercontent.com/alauda/kube-ovn/release-1.7/yamls/crd.yaml

  下载 ovn.yaml 修改地址,包括组件 ovn-central ovs-ovn

curl -O https://raw.githubusercontent.com/alauda/kube-ovn/release-1.7/yamls/ovn.yaml

sed -i 's/\$addresses/<Node IP>/g' ovn.yml

kubectl apply -f ovn.yaml

  安装 kube-ovn controller 以及 cni 插件,包括组件 kube-ovn-controller kube-ovn-cni kube-ovn-pinger kube-ovn-monitor

kubectl apply -f https://raw.githubusercontent.com/alauda/kube-ovn/release-1.7/yamls/kube-ovn.yaml

3. kube ovn 组件介绍

    3.1 ovn-central

      部署安装 OVN 管理组件,包括 ovn-nb ovn-sb ovn-norhtd,启动脚本为 start-db.sh

  • ovn-nb 保存逻辑网络以及为控制器管理逻辑网络提供 API,是 kube-ovn controller 交互的主要组件

switch 9309301a-17ab-468f-b5e6-cd421efa9be7 (ovn-default)
    port ovn-default-ovn-cluster
        type: router
        addresses: ["00:00:00:62:F8:D8"]
        router-port: ovn-cluster-ovn-default
    port rbd-provisioner-56f8d95b4b-jbd9z.rbd-provisioner
        addresses: ["00:00:00:0B:4B:D1 10.16.0.15"]
switch 0c59ed23-1ad8-4dc6-90d9-673c612581ef (join)
    port join-ovn-cluster
        type: router
        addresses: ["00:00:00:0D:67:61"]
        router-port: ovn-cluster-join
    port node-master1
        addresses: ["00:00:00:F8:DD:29 100.64.0.4"]
router 65044835-e882-42c2-90b6-d7b34de15fde (ovn-cluster)
    port ovn-cluster-ovn-default
        mac: "00:00:00:62:F8:D8"
        networks: ["10.16.0.1/16"]
    port ovn-cluster-join
        mac: "00:00:00:0D:67:61"
        networks: ["100.64.0.1/16"]

  • ovn-sb 存储从 ovn-nb 的逻辑网络成转换成的逻辑流,以及每个节点的物理网络

Chassis "7b1a4eb1-580a-4ffd-a8a3-00be58c2b80a"
    hostname: master1
    Encap geneve
        ip: "172.16.236.238"
        options: {csum="false"}
    Port_Binding node-master1
    Port_Binding kube-ovn-monitor-6c946ffd4d-bsjfs.kube-system
    Port_Binding coredns-6489c7bb8b-gl6l8.kube-system

  •  ovn-northd 职责是从 ovn-sb 逻辑网络翻译为 ovn-sb 逻辑流

   3.2 ovs-ovn

     以 daemonset 方式部署,每个节点运行 openvswtich ovsdb ovn-controller,启动脚本为 start-ovs.sh,从逻辑网络翻译成真实网络

   3.2 kube-ovn-controller

    逻辑职责是翻译 kubernetes 网络概念到 OVN,可以理解为 kube-ovn 的控制面功能,通过 kube-apiserver watch 所有网络相关事件,包括 Pod creation/deletion, Service/Endpoint modification, Networkpolicy changes 等等。然后翻译转为 OVN 逻辑网络的修改。也 watch kube-ovn 添加的 CRD,比如 VPC Subnet Vlan IP 等

   3.3 kube-ovn-cni

    二进制部署,作为 kublet 和 kube-ovn-daemon 的中间人,就是容器配置网络🥌容器通网

   3.4 kube-ovn-daemon

     在每一个节点启动 ovn-controller 和 ovs-vswitched

     处理 CNI 行为,add / del

           创建/删除 veth pair 以及把他们插入 pod 和 OVS

           配置 OVS port

           在宿主机网络更新 iptables / ipset / routers 规则

      动态更新pod 带宽限制

      创建 ovn0 用来连接 pod 和 host

      为 Vlan/Underlay/EIP 配置宿主机网络接口

      动态更新内部集群网络网关

参考:

  https://www.alauda.cn/open/detail/id/377.html 

  https://www.mankier.com/7/ovn-architecture

  https://github.com/kubeovn/kube-ovn/blob/master/docs/install.md

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐