【kubernetes/k8s概念】kube-ovn架构和部署安装
Kube-OVN是一款由灵雀云自主研发的开源企业级云原生Kubernetes容器网络编排系统,它通过将OpenStack领域成熟的网络功能平移到Kubernetes,极大增强了Kubernetes容器网络的安全性、可运维性、管理性和性能,为Kubernetes生态的落地带来了独特的价值。Kube-OVN可提供跨云网络管理、传统网络架构与基础设施的互联互通、边缘集群落地等复杂应用场景的能力支持,解除
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:
NAME | SHORTNAMES | APIGROUP | NAMESPACED | KIND |
ips | ip | kubeovn.io | false | IP |
provider-networks | kubeovn.io | false | ProviderNetwork | |
subnets | subnet | kubeovn.io | false | Subnet |
vlans | vlan | kubeovn.io | false | Vlan |
vpc-nat-gateways | vpc-nat-gw | kubeovn.io | false | VpcNatGateway |
vpcs | vpc | kubeovn.io | false | Vpc |
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
更多推荐
所有评论(0)