ovn 架构介绍

2023-05-16

ovn是什么就不多说了,网上有很多介绍的文章。这里主要是学习下ovn的架构,并通过实践认识一下ovn。
ovn代码最初是在ovs源码下,但是从版本v2.13.0开始,ovn被移除ovs,有了独立的仓库,地址为 https://github.com/ovn-org/ovn

ovn架构图如下,是从ovn-architecture截图的

image.png


下面这几个组件运行在集群的中心节点,对于openstack来说,其运行在controller节点上。对于k8s来说,运行在master节点上。

CMS(cloud management system): OVN的最终用户,比如openstack,OVN最初就是被设计给openstack用的。

OVN/CMS plugin: CMS的一部分,对于openstack来说,就是neutron plugin,用来和OVN交互,主要目的就是将逻辑网络配置转换成OVN理解的数据,并写到nbdb中。

OVN Northbound DB: 保存CMS plugin下发的配置,数据库格式可以参考 [ovn-nb](https://man7.org/linux/man-pages/man5/ovn-nb.5.html)。它只有两个客户端:图中它上面的CMS plugin和它下面的ovn-northd。其实还有个命令行公司 ovn-nbctl 也可以直接操作它。

ovn-northd: 同时连接到OVN Northbound DB:和OVN Southbound DB。用来将OVN Northbound DB中的数据进行转换并保存到OVN Southbound DB。

OVN Southbound DB: 系统的核心, 数据库格式可以参考[ovn-sb](https://man7.org/linux/man-pages/man8/ovn-northd.8.html)。它也有两个客户端: 向上的ovn-northd和下面的运行在每个hypervisor上的ovn-controller。

ovn-nbctl和ovnsbctl:这是两个命令行工具,分别用来查看/操作Northbound DB和Southbound DB。

下面的组件运行在每个hypervisor上,对于openstack来说,其运行在compute节点上。对于k8s来说,运行在worker节点上。当然中心节点也可以是hypervisor。

ovn-controller:相当于OVN在每个hypervisor上的agent。北向它连接到OVN Southbound Database学习最新的配置转换成openflow流表,南向它连接到ovs-vswitchd下发转换后的流表,同时也连接到ovsdb-server获取它需要的配置信息。

ovs-vswitchd和ovsdb-server: 是ovs的两个后台进程,就不在多说了。

实践

下面通过源码安装ovn,并且创建一个logical switch,使用namespace模拟创建三个VM,连接到这个switch上,实现ping通的功能。
安装
可以参考官网进行安装,但是貌似少了几个步骤,废了半天劲,查看了源码才知道少了哪些步骤。

编译并安装,需要在中心节点和hypervisor上都执行。

//下载ovn源码
$ git clone https://github.com/ovn-org/ovn.git

//ovn依赖ovs的lib,所以需要先编译ovs
$ git submodule update --init
$ cd ovs
$ ./boot.sh
$ ./configure
$ make
//实验也需要ovs,顺便就安装一下ovs
$ make install
$ cd ..

//编译并安装ovn
$ ./boot.sh
$ ./configure
$ make
$ make install

ovs和ovn都安装后,启动他们。
先启动ovs的两个后台进程,只需要在hypervisor上执行。

//首先清理下之前启动ovs
$ ovs-appctl -t ovs-vswitchd exit
$ ovs-appctl -t ovsdb-server exit
$ rm /usr/local/etc/openvswitch/conf.db

//创建需要的目录
$ mkdir -p /usr/local/etc/openvswitch
$ mkdir -p /usr/local/var/run/openvswitch
$ mkdir -p /usr/local/var/log/openvswitch

//创建数据库
$ ovsdb-tool create /usr/local/etc/openvswitch/conf.db  \
     /usr/local/share/openvswitch/vswitch.ovsschema

//启动ovsdb-server
$ ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
  --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
  --private-key=db:Open_vSwitch,SSL,private_key \
  --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach

$ ovs-vsctl --no-wait init

//启动ovs-vswitchd
$ export DB_SOCK=/usr/local/var/run/openvswitch/db.sock
$ ovs-vswitchd unix:$DB_SOCK --pidfile --detach --log-file=/usr/local/var/log/openvswitch/ovs-vswitchd.log

接下来启动ovn,只需要在中心节点启动。可以使用ovn自带的脚本ovn-ctl启动,脚本内部会将依赖的数据库和进程创建好。也可以参考官网步骤手动创建所有的东西。

//添加ovn-ctl路径
$ export PATH=$PATH:/usr/local/share/ovn/scripts
//启动 ovn-northd,会自动创建数据库,只需要在中心节点上执行
$ ovn-ctl start_northd
 * /usr/local/etc/ovn/ovnnb_db.db does not exist
 * Creating empty database /usr/local/etc/ovn/ovnnb_db.db
 * Starting ovsdb-nb
 * /usr/local/etc/ovn/ovnsb_db.db does not exist
 * Creating empty database /usr/local/etc/ovn/ovnsb_db.db
 * Starting ovsdb-sb
 * Starting ovn-northd

//启动 ovn-controller,只需要在hypervisor上执行
$ ovn-ctl start_controller
 * Starting ovn-controller

官网的步骤只到这里就结束了,我们看一下现在的情况

//会自动生成一个br-int网桥,这个是ovn-controller启动创建的
$ ovs-vsctl show
a891c32e-dec1-4168-8e17-1516fa55341b
    Bridge br-int
        fail_mode: secure
        Port br-int
            Interface br-int
                type: internal

//ovn-sbctl show 应该可以显示出hypervisor的信息,但是没有任何信息
$ ovn-sbctl show

//查看一些启动的ovn进程
$ ps -ef | grep ovn
//启动一个ovsdb-server进程,用来管理nbdb,并且监听socket /usr/local/var/run/ovn/ovnnb_db.sock
root     11529 11528  0 20:26 ?        00:00:00 ovsdb-server -vconsole:off -vfile:info --log-file=/usr/local/var/log/ovn/ovsdb-server-nb.log --remote=punix:/usr/local/var/run/ovn/ovnnb_db.sock --pidfile=/usr/local/var/run/ovn/ovnnb_db.pid --unixctl=/usr/local/var/run/ovn/ovnnb_db.ctl --detach --monitor --remote=db:OVN_Northbound,NB_Global,connections --private-key=db:OVN_Northbound,SSL,private_key --certificate=db:OVN_Northbound,SSL,certificate --ca-cert=db:OVN_Northbound,SSL,ca_cert --ssl-protocols=db:OVN_Northbound,SSL,ssl_protocols --ssl-ciphers=db:OVN_Northbound,SSL,ssl_ciphers /usr/local/etc/ovn/ovnnb_db.db
//启动一个ovsdb-server进程,用来管理sbdb,并且监听socket /usr/local/var/run/ovn/ovnsb_db.sock
root     11545 11544  0 20:26 ?        00:00:00 ovsdb-server -vconsole:off -vfile:info --log-file=/usr/local/var/log/ovn/ovsdb-server-sb.log --remote=punix:/usr/local/var/run/ovn/ovnsb_db.sock --pidfile=/usr/local/var/run/ovn/ovnsb_db.pid --unixctl=/usr/local/var/run/ovn/ovnsb_db.ctl --detach --monitor --remote=db:OVN_Southbound,SB_Global,connections --private-key=db:OVN_Southbound,SSL,private_key --certificate=db:OVN_Southbound,SSL,certificate --ca-cert=db:OVN_Southbound,SSL,ca_cert --ssl-protocols=db:OVN_Southbound,SSL,ssl_protocols --ssl-ciphers=db:OVN_Southbound,SSL,ssl_ciphers /usr/local/etc/ovn/ovnsb_db.db
root     11553     1  0 20:26 ?        00:00:00 ovn-northd: monitoring pid 11554 (healthy)
//启动ovn-northd进程,可看到它已经通过ovnnb_db.sock和ovnsb_db.sock连接到了两个数据库
root     11554 11553  0 20:26 ?        00:00:00 ovn-northd -vconsole:emer -vsyslog:err -vfile:info --ovnnb-db=unix:/usr/local/var/run/ovn/ovnnb_db.sock --ovnsb-db=unix:/usr/local/var/run/ovn/ovnsb_db.sock --no-chdir --log-file=/usr/local/var/log/ovn/ovn-northd.log --pidfile=/usr/local/var/run/ovn/ovn-northd.pid --detach --monitor
root     11695     1  0 20:26 ?        00:00:00 ovn-controller: monitoring pid 11696 (healthy)
//启动ovn-controller进程,它已经通过db.sock连接到ovs的db
root     11696 11695  0 20:26 ?        00:00:00 ovn-controller unix:/usr/local/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --no-chdir --log-file=/usr/local/var/log/ovn/ovn-controller.log --pidfile=/usr/local/var/run/ovn/ovn-controller.pid --detach --monitor

通过上面的观察发现两个问题,一个是ovn-sbctl show显示不出hypervisor的信息,另一个是ovn-controller应该连接到sbdb的,但是没有任何信息能显示连接成功。
经过搜索和源码分析,这两个问题其实是同一个原因,即ovn-controller没有成功连接到sbdb。解决方法如下

//在中心节点上添加如下两条命令,其中6641端口用于监听OVN北向数据库,6642端口用于监听OVN南向数据库。
//第一个在实验环境不加也可以,因为它主要是给CMS plugin用的,我们这里直接通过ovn-nbctl操作数据库即可。
$ ovn-nbctl set-connection ptcp:6641:192.168.122.20
$ ovn-sbctl set-connection ptcp:6642:192.168.122.20

//查看两个监听端口
$ netstat -nap | grep ovsdb-server
tcp        0      0 192.168.122.20:6641     0.0.0.0:*               LISTEN      14976/ovsdb-server
tcp        0      0 192.168.122.20:6642     0.0.0.0:*               LISTEN      14996/ovsdb-server

//sbdb有了监听端口号6642后,ovn-controller才可以去连接sbnb。
//ovn-controller通过ovsdb的字段获取sbdb的连接信息。
//设置 Open_vSwitch table的 external-ids 字段,在所有hypervisor上执行下面命令
$ ovs-vsctl set open . external-ids:ovn-remote=tcp:192.168.122.20:6642

//在中心节点上执行下面命令
$ ovs-vsctl set open . external-ids:system-id=master
$ ovs-vsctl set open . external-ids:ovn-encap-type=geneve
$ ovs-vsctl set open . external-ids:ovn-encap-ip=192.168.122.20

//在hypervisor节点上执行下面命令
ovs-vsctl set open . external-ids:ovn-remote=tcp:192.168.122.20:6642
ovs-vsctl set open . external-ids:system-id=node1
ovs-vsctl set open . external-ids:ovn-encap-type=geneve
//上报自己的ip,相当于向集群报告其他节点如何连接到自己
ovs-vsctl set open . external-ids:ovn-encap-ip=192.168.122.21

//可看到ovn-controller连接到了sbdb的6442端口
$ netstat -nap | grep 6642
tcp        0      0 192.168.122.20:6642     0.0.0.0:*               LISTEN      14996/ovsdb-server
tcp        0      0 192.168.122.20:6642     192.168.122.20:49516    ESTABLISHED 14996/ovsdb-server
tcp        0      0 192.168.122.20:49516    192.168.122.20:6642     ESTABLISHED 19322/ovn-controlle

再次查看,可以看到两个hypervisor都连接到了sbdb。在ovn里使用chassis表示一个hypervisor。

$ ovn-sbctl show
Chassis node1
    hostname: node1
    Encap geneve
        ip: "192.168.122.21"
        options: {csum="true"}
Chassis master
    hostname: master
    Encap geneve
        ip: "192.168.122.20"
        options: {csum="true"}

验证
在两个节点上安装ovn成功后,接下来进行验证,环境信息如下

master  192.168.122.20 既是中心节点,也是hypervisor
node1    192.168.122.21 hypervisor

在中心节点上执行如下命令,创建一个ls和三个lsp

//创建 logical switch ls1
ovn-nbctl ls-add ls1

//添加第一个 logical port ls1-vm1
ovn-nbctl lsp-add ls1 ls1-vm1
ovn-nbctl lsp-set-addresses ls1-vm1 00:00:00:00:00:01
ovn-nbctl lsp-set-port-security ls1-vm1 00:00:00:00:00:01

//添加第二个 logical port ls1-vm2
ovn-nbctl lsp-add ls1 ls1-vm2
ovn-nbctl lsp-set-addresses ls1-vm2 00:00:00:00:00:02
ovn-nbctl lsp-set-port-security ls1-vm2 00:00:00:00:00:02

//添加第三个 logical port ls1-vm3
ovn-nbctl lsp-add ls1 ls1-vm3
ovn-nbctl lsp-set-addresses ls1-vm3 00:00:00:00:00:03
ovn-nbctl lsp-set-port-security ls1-vm3 00:00:00:00:00:03

//显示nbdb中的信息
$ ovn-nbctl show
switch 6e5f7249-5501-4e34-8b63-4aa35d2ee6be (ls1)
    port ls1-vm1
        addresses: ["00:00:00:00:00:01"]
    port ls1-vm3
        addresses: ["00:00:00:00:00:03"]
    port ls1-vm2
        addresses: ["00:00:00:00:00:02"]

接下来分别创建三个namespace,模拟三个vm,分别添加一个internal类型的ovs端口作为vm的接口,并配置同网段ip

//在master上创建vm1 namespace
ip netns add vm1
ovs-vsctl add-port br-int vm1 -- set interface vm1 type=internal
ip link set vm1 netns vm1
ip netns exec vm1 ip link set vm1 address 00:00:00:00:00:01
ip netns exec vm1 ip addr add 10.10.10.1/24 dev vm1
ip netns exec vm1 ip link set vm1 up
//ovn-controller通过观察iface-id自动判断是否有需要的接口创建
ovs-vsctl set Interface vm1 external_ids:iface-id=ls1-vm1
 
//在node1上创建vm2 namespace
ip netns add vm2
ovs-vsctl add-port br-int vm2 -- set interface vm2 type=internal
ip link set vm2 netns vm2
ip netns exec vm2 ip link set vm2 address 00:00:00:00:00:02
ip netns exec vm2 ip addr add 10.10.10.2/24 dev vm2
ip netns exec vm2 ip link set vm2 up
ovs-vsctl set Interface vm2 external_ids:iface-id=ls1-vm2
 
//在master上创建vm3 namespace
ip netns add vm3
ovs-vsctl add-port br-int vm3 -- set interface vm3 type=internal
ip link set vm3 netns vm3
ip netns exec vm3 ip link set vm3 address 00:00:00:00:00:03
ip netns exec vm3 ip addr add 10.10.10.3/24 dev vm3
ip netns exec vm3 ip link set vm3 up
ovs-vsctl set Interface vm3 external_ids:iface-id=ls1-vm3

最后通过sbctl命令可看到,每个chassis下绑定了多少个接口。

$ ovn-sbctl show
Chassis node1
    hostname: node1
    Encap geneve
        ip: "192.168.122.21"
        options: {csum="true"}
    Port_Binding ls1-vm2
Chassis master
    hostname: master
    Encap geneve
        ip: "192.168.122.20"
        options: {csum="true"}
    Port_Binding ls1-vm1
    Port_Binding ls1-vm3

vm1也可以ping通vm2和vm3

$ ip netns exec vm1 ping 10.10.10.2
PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data.
64 bytes from 10.10.10.2: icmp_seq=1 ttl=64 time=6.65 ms
^C
--- 10.10.10.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 6.652/6.652/6.652/0.000 ms
$ ip netns exec vm1 ping 10.10.10.3
PING 10.10.10.3 (10.10.10.3) 56(84) bytes of data.
64 bytes from 10.10.10.3: icmp_seq=1 ttl=64 time=0.939 ms
^C
--- 10.10.10.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.939/0.939/0.939/0.000 ms

参考

以下是ovn官网最新的文档,可以结合代码查看
ovn-architecture
https://www.ovn.org/support/dist-docs/ovn-architecture.7.txt

ovn-northd
https://www.ovn.org/support/dist-docs/ovn-northd.8.txt

ovn-controller
https://www.ovn.org/support/dist-docs/ovn-controller.8.txt

vtep
https://www.ovn.org/support/dist-docs/ovn-controller-vtep.8.txt

ovn-ctl
https://www.ovn.org/support/dist-docs/ovn-ctl.8.txt

ovn-trace
https://www.ovn.org/support/dist-docs/ovn-trace.8.txt

ovn-sb
https://www.ovn.org/support/dist-docs/ovn-sb.5.txt

ovn-nb
https://www.ovn.org/support/dist-docs/ovn-nb.5.txt

ovn-sbctl
https://www.ovn.org/support/dist-docs/ovn-sbctl.8.txt

ovn-nbctl
https://www.ovn.org/support/dist-docs/ovn-nbctl.8.txt

install guide
https://github.com/ovn-org/ovn/blob/master/Documentation/intro/install/general.rst

也可参考:ovn 架构介绍 - 简书 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ovn 架构介绍 的相关文章

  • set up ovn development env (by quqi99)

    作者 xff1a 张华 发表于 xff1a 2022 07 08 版权声明 xff1a 可以任意转载 xff0c 转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 编译ovs并启动ovs vswitchd https docs
  • OVN简介

    作者简介 xff1a 郑敏先 xff0c 就职于诺云系统 xff08 上海 xff09 有限公司 工作地点为南京的诺云研发中心 担任解决方案工程师 本人博客为 xff1a http blog csdn net zhengmx100 一 为什
  • devstack安装OpenStack Pike版本 (OVN+VLAN)

    控制节点配置文件 Sample DevStack local conf This sample file is intended to be used for your typical DevStack environment that 3
  • OVN总结

    参考 xff1a https www sdnlab com 18600 html 三 OVN L3 对比 Neutron L3 Neutron 的三层功能主要有路由 xff0c SNAT 和 Floating IP xff08 也叫 DNA
  • 《OVN Logical Flows and ovn-trace》翻译

    在本篇文章中 xff0c 我将解释什么是Logical Flow以及如何使用ovn trace去更好地理解它们 同时 xff0c 我也会用一些例子来解释 xff0c 为什么使用Logical Flow这种抽象模型能让新特性的添加变得出乎意料
  • OVN简介

    三 OVN入门 3 1 OVN简介 Open vSwitch xff08 OVS xff09 是一款开源的 虚拟交换机 xff0c 控制协议方面它不但支持OpenFlow的所有特性而且扩展了部分OpenFlow的功能 xff1b Overl
  • OVN – OVN OpenStack(二)

    OpenStack networking ovn 项目为Neutron提供了一个基于ML2的OVN插件 xff0c 它使用OVN组件代替了各种Neutron的Python agent xff0c 也不再使用 RabbitMQ xff0c 而
  • OVN 架构分析

    架构分析Base flow L2 L3 forwardingOVN L2 gateway OVN 是 Open vSwitch 社区在 2015 年 1 月份才宣布的一个子项目 xff0c OVN 使用 Open vSwitch功能提供一个
  • OVN-软件定义网络(一)

    前言 测试环境是用github上开源代码搭建 编译完成后进行如下操作 环境配置 控制节点 创建逻辑交换机 ovn nbctl db 61 unix run openvswitch ovnnb db sock ls add ly ls 在逻辑
  • openstack和ovn架构

  • ovn-architecture

    参考 文章目录 1 Name2 Description2 1 Information Flow in OVN OVN中的信息流向 2 2 Chassis Setup2 3 Logical Networks2 4 Life Cycle of
  • ovn-northd 源码分析

    ovn northd是ovn中的核心后台进程 xff0c 主要负责将ovn的高层配置转换成供ovn controller后台进程使用的逻辑配置 xff0c 更详细的说就是它将ovn northbound数据库中传统意义上的逻辑网络配置转换成
  • ovn-controller源码分析

    ovn controller是运行在chassis hypervisor上的后台进程 xff0c 向上通过OVSDB协议连接到OVN sourthbound数据库 xff0c 向下通过OVSDB协议连接到ovs数据库 xff0c 并通过op
  • 【kubernetes/k8s概念】kube-ovn架构和部署安装

    Kube OVN是一款由灵雀云自主研发的开源企业级云原生Kubernetes容器网络编排系统 xff0c 它通过将OpenStack领域成熟的网络功能平移到Kubernetes xff0c 极大增强了Kubernetes容器网络的安全性 可
  • 【kubernetes/k8s概念】OVN NorthBound DB 及 ovn-nbctl 命令

    OVN 北向数据库 xff08 OVN Northbound DB xff09 是 OVN 和 CMS 之间的接口 xff0c Northbound DB 的数据几乎都是由 CMS 产生的 xff0c ovn northd 监听这个数据库的
  • 【kubernetes/k8s概念】OVN SouthBound DB 及 ovn-sbctl 命令

    OVN 南向数据库 xff08 OVN Southbound DB xff09 xff0c 南向数据库是系统的中心 xff0c 客户端是上层的 ovn northd 和下层运行在每一个传输节点的 ovn controller 南向数据库包括
  • OVS和OVN 2.8新功能

    OVS和OVN 2 8新功能 本文最初整理在我的github上SDN Learning notes 本文翻译自ovs官方文档 本文档主要是关于2017年8月底发布的Open vSwitch 2 8中添加的内容 xff0c 重点介绍OVN中的
  • OVN实验----L3互通

    概述 在L2互通基础上 xff0c 完成跨网段互访 物理拓扑 如上一个实验OVN实验 L2互通 逻辑拓扑 按照上个实验OVN实验 L2互通 的操作方式 xff0c 再配置一组容器blue xff0c 网段192 168 2 0 24 配置完
  • OVN实验----NAT

    概述 在L2互通 L3互通实验基础上通过NAT实现访问公网 架构图如下 xff0c 这里两台逻辑路由器LR1和GLR是通过一台逻辑交换机LSjoin互连的 xff0c GLR和物理网络设备通过LSlocal相连 物理拓扑 如上一个实验OVN
  • Testing ovn manually based on LXD (by quqi99)

    作者 张华 发表于 2022 05 27 版权声明 可以任意转载 转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 准备两个LXD容器 lxc list NAME STATE IPV4 IPV6 TYPE SNAPSHOTS

随机推荐

  • VINS-Course代码解析——run_euroc前端数据处理

    vins mono总框架如下 xff1a 主要分为三大块 xff1a 我们先从主函数 main 入手 xff1a 主函数中有三个线程 xff0c 读取完数据集和配置文件的路径后就会进入这三个线程 xff0c 如下图 xff1a thd Ba
  • Gazebo11的更新与安装

    Melodic自带的Gazebo版本过低 xff0c 建议升级 Gazebo安装见gazebo官网 需注意以下四点 删除gazebo9以及相关插件选用Alternative installation step by step的安装方式 xf
  • XTDrone目标检测

    编译Darkent ROS 方法一 xff1a xff08 推荐 xff09 直接clone xff0c 记得加 recurse submodules xff0c 防止文件缺失 cd span class token operator sp
  • C++求解N个数的最大公约数、最小公倍数

    一 2个数的最大公约数 span class token comment 辗转相除法 span span class token keyword int span span class token function gcd span spa
  • 子序列个数——动态规划

    题目 xff1a 统计一个字符串中全部不同的子序列的个数 思路 xff1a 动态规划求解 令 f i 61 前 i 个元素中包含的全部子序列的个数 那么状态转移方程分为下面两种情况 xff1a 当第 i 个元素在前面 i 1 个字符中没有出
  • 字符串中特定子序列出现的次数(动态规划)

    题目 xff1a 给定一个字符串 xff0c 求子序列 cwbc 出现的次数 思路 xff1a 动态规划 令 dp i j 表示前 i 个字符中匹配了字符串 cwbc 中前 j 位 xff08 j 61 1 2 3 4 xff09 的个数
  • VMware ubuntu虚拟机无法上网的解决办法(笔记本连接WIFI情况)

    文章目录 一 虚拟机网络配置 一 虚拟机网络配置 1 设置Ubuntu网络适配器的网络连接方式为NAT模式 2 还原虚拟机网络配置 还原一下默认设置 3 window网络适配器设置适配器允许网络共享 4 Ubuntu启用联网 xff0c 连
  • ubuntu在树梅派上之VNC

    启动vncserver vncserver span class token operator span geometry 1600x900 杀死第一个桌面 vncserver span class token operator span
  • Sourcetree介绍及使用

    Sourcetree是一个操作简单但功能强大的免费Git客户端管理工具 xff0c 可应用在Windows和Mac平台 Sourcetree的安装 xff1a 1 从Sourcetree Free Git GUI for Mac and W
  • javascript创建一个基于数组的栈结构

    栈是一种遵从后进先出 xff08 LIFO xff09 原则的有序集合 新添加或待删除的元素都保存在栈的同 一端 xff0c 称作栈顶 xff0c 另一端就叫栈底 在栈里 xff0c 新元素都靠近栈顶 xff0c 旧元素都接近栈底 栈拥有以
  • Ubuntu16.04+RealsenseT265跑通VINS-Fusion

    一 提前条件 系统版本 xff1a ubuntu16 04 43 ROS xff08 kinetic xff09 默认已经掌握了ubuntu系统下的基本命令以及ROS的基本操作 二 realsenseT265的SDK测试 官方网站https
  • Why Kubernetes ,我对Kubernetes的理解

    去年换工作后 xff0c 开始真正在生产环境中接触容器与Kubernetes 边恶补相关知识的同时 xff0c 也想把学到的内容和自己的理解整理出来 学习的途径包括k8s官方文档 书籍 极客时间专栏及网上各种博文 所涉及一些摘抄或描述 xf
  • Kubernetes的几种主流部署方式01-minikube部署

    综述 Kubernetes集群的组件众多 xff0c 要部署一套符合生产环境的集群不是一件容易的事 好在随着社区的快速发展 xff0c 特别是在它成为事实上的容器编排标准以后 xff0c 基本所有的主流云平台都完全支持Kubernetes
  • Kubernetes 1.14版本的亮点新功能

    部分翻译自https sysdig com blog whats new kubernetes 1 14 Kubernetes 1 14的亮点新功能 xff1a 支持Windows容器服务可以通过kubeadm动态地创建一个高可用集群将ku
  • Kubernetes的几种主流部署方式02-kubeadm部署1.14版本高可用集群

    在上篇文章minikube部署中 xff0c 有提到Minikube部署Kubernetes的核心就是Kubeadm xff0c 这篇文章来详细说明下Kubeadm原理及部署步骤 写这篇文章的时候 xff0c Kubernetes1 14刚
  • Kubectl常用命令详解

    要使用和维护Kubernetes集群 xff0c 最常用且直接的方式 xff0c 就是使用自带的命令行工具Kubectl 这里梳理下常用的子命令及参数 xff0c 方便查找参考 参考文档 xff1a Overview of kubectlk
  • Word | 关于删除分节符(下一页)前面的版式就乱了解决方案

    WORD中删除分节符有这样的规定 xff1a 如果要删除分节符 xff0c 只要把光标移动到该分节符上 xff0c 按Delete键即可 但是要注意该分节符前面的文字将合并到后面的节中 xff0c 并且采用后者的格式设置 解决方法 xff1
  • sheetjs在使用中日期被自动转换问题

    在vue开发后台中 xff0c 需求是前端上传csv文件 xff0c 解析成对象数组 xff0c 找到了插件SheetJS js xlsx npm i xlsx span class token operator span span cla
  • opencv学习手册(四)(控制无人机自动跟踪目标(上))(目标识别、自动跟踪)

    如何让机器人识别面前的绿色小球并且进行自动跟随 xff1f 先把问题拆成两个子问题 第一 xff0c 识别绿色小球 xff1b 第二 xff0c 自动跟随 目标识别 目标识别分为三步 xff1a 图像预处理 xff08 定义结构元素 xff
  • ovn 架构介绍

    ovn是什么就不多说了 xff0c 网上有很多介绍的文章 这里主要是学习下ovn的架构 xff0c 并通过实践认识一下ovn ovn代码最初是在ovs源码下 xff0c 但是从版本v2 13 0开始 xff0c ovn被移除ovs xff0