Kube-OVN组件

news2024/11/23 16:31:24

文章目录

      • 介绍
      • ovn架构
      • kube-ovn架构
      • kube-ovn数据流向
      • 软件版本及注意事项
      • 高可用部署安装
      • kube-ovn运维
        • 查看Pod日志
        • 组件监控
        • kubectl ko插件
      • 网络相关

介绍

kube-ovn是基于ovn开发的。https://man7.org/linux/man-pages/man7/ovn-architecture.7.html

ovn架构

在这里插入图片描述
组件说明:
OVN/CMS Plugin:操作北向数据库的一个组件,对应kube-ovn中的kube-ovn-controller组件;
OVN Northbound DB:重要的组件,里边存储逻辑数据,例如logical switches,routers, ACL等;
ovn-northd:类似于一个集中控制器,把上层notrh DB的数据翻译成下层south DB里边;
OVN Southbound DB:南向数据库,存储数据分三类

  • 1.物理网络数据,例如主机地址、tunnel封装格式。数据来自于底层ovn-controller组件向上发送的
  • 2.逻辑网络数据,报文如何在逻辑网络里转发。数据来自于北向数据库
  • 3.物理网络与逻辑网络绑定的关系,例如逻辑端口关联到哪个主机。

数据平面:每个主机运行3个组件,ovn-controller/ovs-vswitchd/ovsdb-server
ovn-controller:是ovn的agent,运行在每台节点,北向会把物理网络数据写到south DB,南向会把south DB的数据转换成openflow配到本地ovsdb table,实现报文转发;
ovs-vswitchd:是ovs的核心组件,和datapath的内核模块一起实现ovs基于流的数据交换,与ovn-controller通信;
ovsdb:通过ovsdb协议与ovsdb server通信,使用Netlink和内核模块通信;

kube-ovn架构

在这里插入图片描述
组件说明:
Cluster Router:
Node Switch:
ns Switch:每个namespace绑定一个switch
每台节点上有eth0、ovn0挂载Node Switch(主机网络与容器网络互通使用)——》连接到ClusterRouter
控制平面:

  • Deployment kube-ovn-controller,基于go实现的控制器,监听容器创建删除事件等
  • Deployment ovn-central,ovn控制平面组件,打包成docker镜像运行

数据平面:

  • Daemonset kube-ovn-cni,运行在每台节点,cni插件,用于pod做ip分配管理
  • Daemonset ovs-ovn,是ovn官方组件,运行南向组件(ovn-controller、ovs-vswitchd、ovsdb-server)

协作的网络组件:

  • kube-proxy 本地node port访问使用;
  • coredns 服务发现、域名解析;

kube-ovn数据流向

kube-ovn数据流向:
主机上参与的设备

  • eth0 主机网卡
  • genev_sys_6081 ovn生产的tunnel设备,overylay模型,各个节点通信依赖tunnel,
    • genev协议,加速数据包转发效率
  • ovn0 eth0的veth,挂载在ovs bri-int网桥

三种场景:

  • Pod <——>Pod同主机/跨主机
    ○ 同主机通信:通过ovs的bridge int网桥做的二层转发
    ○ 跨主机:先通过pod网卡发送到genev_sys_6081设备做genev封装——》发往eth0——》发往对端eth0网卡,然后genev_sys_6081解封装,然后发到对端pod

  • Pod——>Service IP
    ○ Pod转发到pod,service IP对应ovn的loadbancer,虚拟IP还是会转发到pod

  • Pod <——>Host主机 host/其他外部地址
    ○ host是集群里的一台节点,通过策略路由,默认出主机的口,有一个分布式网关,Pod访问非集群网络及非主机IP的时候,从pod所在主机的ovn0网卡走主机默认路由出去。如果是集中式网关,会走向特定主机路由

在这里插入图片描述

软件版本及注意事项

● Kubernetes >= 1.16
● Docker >= 1.12.6, Containerd >= 1.3.4
● 操作系统: CentOS 7/8, Ubuntu 16.04/18.04/20.04
● 其他 Linux 发行版,需要检查一下内核模块是否存在 geneve, openvswitch, ip_tables, iptable_nat
● Kernel 启动需要开启 ipv6, 如果 kernel 启动参数包含 ipv6.disable=1 需要将其设置为 0
● Kube-Proxy 正常工作,Kube-OVN 可以通过 SVC IP 访问到 Apiserver
● 确认 kubelet 配置参数开启了 CNI,并且配置在标准路径下, kubelet 启动时包含了如下参数 --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d
● 确认未安装其他网络插件,或者其他网络插件已经被清除,检查 /etc/cni/net.d/ 路径下无其他网络插件配置文件。如果之前安装过其他网络插件建议删除后重启机器清理残留网络资源。

Kube-OVN 所使用的的主机端口,需要防火墙放开:

组件端口用途
ovn-central6641/tcp, 6642/tcp, 6643/tcp, 6644/tcpovn-db 和 raft server
ovs-ovnGeneve 6081/udp, STT 7471/tcp, Vxlan 4789/udp隧道端口
kube-ovn-controller10660/tcp监控
kube-ovn-daemon10665/tcp监控
kube-ovn-monitor10661/tcp监控

kube-ovn-controller.yaml

      containers:
      - args:
        - --default-cidr=10.199.0.0/16
        - --default-exclude-ips=
        - --node-switch-cidr=100.64.0.0/16	#主机和容器通信使用
        - --network-type=geneve
        - --default-interface-name=
        - --default-vlan-id=100

kube-ovn-cni.yaml

  containers:
  - args:
    - --enable-mirror=false
    - --encap-checksum=true
    - --service-cluster-ip-range=10.96.0.0/12
    - --iface=eth0
    - --network-type=geneve
    - --default-interface-name=

高可用部署安装

https://github.com/kubeovn/kube-ovn/wiki/%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85

kube-ovn运维

kube-ovn-pinger:DaemonSet管理,节点间周期性检查联通性
● Pod——Pod
● Pod——Host
● Pod——ApiServer
● Pod——DNS

查看Pod日志

~]# kubectl logs -f kube-ovn-pinger-sz8s5 -nkube-system --tail 20
在这里插入图片描述

组件监控

https://github.com/kubeovn/kube-ovn/tree/master/dist/monitoring

kubectl ko插件

[root@VM-2-29-centos ~]# kubectl ko
kubectl ko {subcommand} [option...]
Available Subcommands:
  [nb|sb] [status|kick|backup|dbstatus|restore]     ovn-db operations show cluster status, kick stale server, backup database, get db consistency status or restore ovn nb db when met 'inconsistent data' error
  nbctl [ovn-nbctl options ...]    invoke ovn-nbctl
  sbctl [ovn-sbctl options ...]    invoke ovn-sbctl
  vsctl {nodeName} [ovs-vsctl options ...]   invoke ovs-vsctl on the specified node
  ofctl {nodeName} [ovs-ofctl options ...]   invoke ovs-ofctl on the specified node
  dpctl {nodeName} [ovs-dpctl options ...]   invoke ovs-dpctl on the specified node
  appctl {nodeName} [ovs-appctl options ...]   invoke ovs-appctl on the specified node
  tcpdump {namespace/podname} [tcpdump options ...]     capture pod traffic
  trace {namespace/podname} {target ip address} {icmp|tcp|udp} [target tcp or udp port]    trace ovn microflow of specific packet
  diagnose {all|node} [nodename]    diagnose connectivity of all nodes or a specific node
  reload restart all kube-ovn components

kubectl ko nbctl
~]# kubectl ko nbctl show	#查看逻辑交换机,路由器,Pod IP
~]# kubectl ko nbctl ls-lb-list ovn-default	#查看ovn中LB vip映射

ACL检查:
~]# kubectl ko nbctl acl-list ovn-default
~]# kubectl ko nbctl list port group	#查看networkpolicy
~]# kubectl ko nbctl --type=port-group acl-list oneportgroup
~]# kubectl ko nbctl list address_set

策略路由转发检查
~]# kubectl ko nbctl lr-route-list ovn-cluster
IPv4 Routes
                10.0.2.29                100.64.0.3 dst-ip	#主机地址——》ovn0网卡
                10.0.2.31                100.64.0.4 dst-ip
                10.0.2.42                100.64.0.2 dst-ip
                10.0.2.49                100.64.0.5 dst-ip

kubectl ko sbctl
~]# kubectl ko sbctl show	#查看各主机端口绑定的关系
~]# kubectl ko sbctl lflow-list	#查看流表

kubectl ko vsctl
~]# kubectl ko vsctl 10.0.2.29 show	#查看特定主机上端口绑定及tunnel信息

kubectl ko tcpdump
对Kube-ovn容器网络的任意Pod进行抓包
~]# kubectl ko tcpdump kube-system/coredns-d84bc975c-xd9mf

kubectl ko trace
对Logical flow的trace
~]# kubectl ko trace kube-system/coredns-d84bc975c-r8qps {target ip address}{icmp|tcp|udp}[target tcp or udp port]
示例:~]# kubectl ko trace default/nginx-deployment-98cfc48cc-kknrg 8.8.8.8 icmp

kubectl ko diagnose  #对集群或者特定节点做一次快速巡检
~]# kubectl ko diagnose all

网络相关

~]# iperf3 -c 192.168.35.108 -p 5001 -b 10M -t 3600 -i 2 -P 1
参数说明:
-c : 服务端的ip地址
-p : 端口号
-b : 每一次发送的数据大小
-t : 总的发送时间(单位:秒)
-i : 发送数据的时间间隔(单位:秒)
-P : 表示线程个数,不指定则默认单线程

补发于2022-07-04

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/479594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PySide6/PyQT多线程之 信号与槽 / (Signal Slot)的高效利用

前言 PySide6/PyQT信号槽是一种事件处理方式&#xff0c;允许程序中的对象发送和接收信号。 在 PySide6/PyQT 精进的过程中&#xff0c;一定躲不开 信号和槽 这座大山&#xff0c;这是一个比较有意思的知识点&#xff1a; 初接触的看不懂&#xff0c;觉得复杂&#xff1b;看得…

【Linux】win10远程控制Linux服务器 - 内网穿透实现公网远程

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 前言 视频教程 1. ubuntu安装XRDP 2.局域网测试连接 3. Ubuntu安装cpolar内网穿透 4.cpolar公网地址测试访问 5.固定域名公网地址 [TOC] 转载自远程穿透文章&#xff1a;Wi…

Redis的两种持久化方案 RDB AOF

文章目录 1.RDB持久化1.1.执行时机1.2.RDB原理1.3.小结 2.AOF持久化2.1.AOF原理2.2.AOF配置2.3.AOF文件重写 3.RDB与AOF对比 Redis有两种持久化方案&#xff1a; RDB持久化AOF持久化 1.RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09…

【三十天精通Vue 3】 第二十三天 Vue 3的错误处理详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 错误处理概览1. 错误处理的重要性2. Vue 3 中的错误…

EMS快递批量分析物流信息状况

众所周知“邮政快递”是在快递行业里面也是算一家行业龙头&#xff0c;中国邮政特快专递/EMS&#xff0c;邮政平邮小包&#xff0c;邮政挂件等&#xff0c;都是属于中国邮政集团&#xff0c;邮政速度快&#xff0c;价格也是比较实惠一家&#xff0c;所以很多产家或电商 、供应商…

大数据-玩转数据-FLINK快速上手

一、环境准备 ⚫系统环境为 Windows 10。 ⚫需提前安装 Java 11。 ⚫集成开发环境&#xff08;IDE&#xff09;使用 IntelliJ IDEA&#xff0c;具体的安装流程参见 IntelliJ 官网。 ⚫安装 IntelliJ IDEA 之后&#xff0c;还需要安装一些插件——Maven 和 Git。Maven 用来管理…

Java实现宿舍管理系统的设计与实现【附源码】

本科生毕业论文&#xff08;设计&#xff09; 宿舍管理系统的设计与实现 目 录 摘 要 I Abstract II 1 引言 1 1.1 研究背景 1 1.2 国内外研究现状 1 1.3 研究目的与意义 1 2 开发工具和相关技术 2 2.1 Eclipse 2 2.2 MySQL 2 2.3 Bootstrap 3 2.4 Tomcat 3 3 系统分析 3 3.1…

Java基础学习(11)

Java基础学习 一、集合进阶1.1 数据结构&#xff08;树&#xff09;1.1.1 二叉查找树1.1.2 二叉树的遍历 1.2 平衡二叉树树的演变 1.3 数据结构 ( 平衡二叉树 )左旋1.4 数据结构 ( 平衡二叉树 )右旋数据结构 (平衡二叉树)需要转的四种情况 1.5 红黑树添加节点规则 二、Set系列集…

基础算法(五):DFS、BFS与剪枝

前言 前面的基础算法笔记已经断更好久了&#xff0c;因为荔枝觉得还是得先学一下基础的数据结构知识之后才能更好的入门算法。在这篇文章中荔枝主要记录DFS和BFS的相关基础知识、答题的模板以及自己的一些浅薄理解&#xff0c;同样的也会涉及到相关的剪枝操作。 一、搜索算法概…

java基础学习-7

文章目录 异常小总结编译时异常和运行时异常小总结 异常在代码中的两个作用异常的方式JVM虚拟机默认处理异常的方式自己处理&#xff08;捕获异常&#xff09;灵魂四问抛出异常异常中的常见方法小总结小练习 自定义异常 File----路径File的概述和构造方法小总结 File的成员方法…

线性表之顺序表(C语言实现)

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言初阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:讲解数据结构的入门知识,线性结构之顺序表. 金句分享:…

机器学习笔记 基于深度学习的边缘检测

一、Holistically-Nested Edge Detection 边缘检测是视觉工作中十分常用的技术,传统边缘检测已经包含了很多经典的诸如Canny、Robert等等,都是各有擅场,不过有一点问题,就是很多参数需要人工调试,所以深度学习研究人员提出了基于卷积神经网络的边缘检测算法。 即HED,该算…

uniapp拍照离线定位,获取图片信息,经纬度解析地址

✅作者简介&#xff1a; 我是痴心阿文&#xff0c;你们的学友哥&#xff0c;今天给大家分享uniapp拍照离线定位&#xff0c;获取图片信息&#xff0c;经纬度解析地址 &#x1f4c3;个人主页:痴心阿文的博客_CSDN博客-Vue.js,数组方法,前端领域博主 &#x1f525;本文前言&#…

【数据结构】超详细之顺序表(利用C语言实现)

文章目录 前言一、顺序表是什么&#xff1f;二、顺序表的实现步骤 1.顺序表的初始化以及开辟空间2.实现顺序表的头插、尾插以及打印3.实现顺序表的头删、尾删以及打印4.实现顺序表的查找5.实现顺序表指定位置插入6.实现顺序表指定位置删除7.释放内存总结 前言 数据结构是一个程…

离散数学_九章:关系(3)

9.3 关系的表示 1、用集合表示关系2、用矩阵表示关系矩阵表示关系⭐集合上的关系矩阵 R 自反时 R 对称时 R 反对称时 ⭐确定关系合成的矩阵 3、用有向图表示关系有向图⭐从有向图中 确定关系具有的属性 自反性对称性反对称性传递性 本节及本章的剩余部分研究的所有关系均为二…

函数(详解)——C语言

Hello&#xff0c;友友们前段时间忙拖更了这么久&#xff0c;趁着五一假期好好卷上一波哈哈哈。好的&#xff0c;我们本期主要对C语言中的函数进行讲解。 1.什么是函数 在数学中也常常用到函数&#xff0c;但你对C语言中的函数有了解吗&#xff1f; 在C语言中函数是一段可重…

数据结构学习分享之单链表详解

数据结构第三课 1. 前言2. 链表的概念以及结构3. 链表的分类4.链表的实现4.1 初始化结构4.2 尾插函数4.3 尾删函数4.4 头插函数4.5 头删函数4.6 开辟新节点4.7 销毁链表 5. 单链表OJ题目6. 顺序表和链表的区别7. 总结 1. 前言 &#x1f493;博主CSDN:杭电码农-NEO&#x1f493;…

五年开发经验前端程序员,刚入职一个月就要离职,我来聊聊看法

最近有一个新来的同事&#xff0c;估计又要离职了吧。从他的工作经历来看&#xff0c;大概有5年的前端工作经验&#xff0c;但是头发看起来挺少的&#xff0c;不知道是工作加班导致的&#xff0c;看他的性格不太像是经常加班的。 他这个人就是我们公司人事面试的&#xff0c;虽…

操作系统——进程管理

0.关注博主有更多知识 操作系统入门知识合集 目录 0.关注博主有更多知识 4.1进程概念 4.1.1进程基本概念 思考题&#xff1a; 4.1.2进程状态 思考题&#xff1a; 4.1.3进程控制块PCB 4.2进程控制 思考题&#xff1a; 4.3线程 思考题&#xff1a; 4.4临界资源与临…

躺平减脂减重法补充篇——无需控制碳水摄入的有效方法,另推一种健康的运动和防止老年慢性病的方式...

本文此前已经连续发表了六篇相关文章&#xff0c;内容确实比较多&#xff0c;最近又做了一组实验&#xff0c;进食了大量的锅巴&#xff0c;看看是否会带来体重的增加&#xff0c;每天进食量都不少于200克锅巴&#xff0c;对&#xff0c;4两重&#xff0c;而且是在每天正常进食…