1

基于 SRv6 的 SFC 服务链


为满足用户的业务数据安全、稳定等需求,提供各种基础保障或增值优化服务,在传统网络中,经常使用业务功能节点(如负载均衡、防火墙等)实现服务供应。但这些业务功能节点往往与网络拓扑和硬件资源耦合紧密,各个业务功能节点均为专用的设备形态且部署繁杂。当开通新业务或业务流程发生变更时,需要更改网络拓扑,甚至改造和升级网络设备,对周边的支撑系统也会有影响。

随着云计算网络的普及、虚拟化技术的成熟和应用,网络功能动态加载,资源按需分配,业务灵活开通等特点明显加强,而服务供应也必不可少。如果还使用传统网络的服务供应部署方式,已无法满足云计算网络灵活多变的组网特点以及客户多种多样的业务需求。因此,服务链 SFC 技术被提出,该技术从满足客户业务数据安全、稳定等需求角度出发,更契合新时代网络特点,使业务功能灵活性得到更大的发挥。

SFC ( Service Function Chain 服务链)是由一系列业务节点有序构成,各业务节点可对数据流量进行流量检查、处理等操作。通过将用户数据报文依照业务逻辑以此通过各业务功能节点,就能轻松实现 SFC 服务链功能。随着云服务市场规模的扩大,在云内实现 SFC 也有着庞大的市场需求。

SFC 大部分通过 NSH 标准化服务链技术实现,但这些方案仍存在一定程度的限制:配置时需要根据流量的转发路径,基于每条业务流,依次在各个业务节点上逐跳配置。当 SFC 服务链扩容时,其配置复杂度也随之几何上升。由此可见,现有方案操作复杂,可扩展性差,不利于 SFC 的落地推广。

近年来随着云计算、大数据、物联网、人工智能等信息技术的快速发展和传统产业的数字化转型,数据量呈现几何级增长,同时计算成本快速下降,数字经济正进入算力时代。在算力网络中使用 IPv6 作为新一代 IP 承载协议,由此衍生了许多 IP 新技术。其中, SRv6 ( Segment Routing IPv6 )技术通过 IPv6 扩展头的方式,基于现有 IPv6 转发技术,实现了网络可编程化。

若能利用 SRv6 的路由编排特性实现 SFC ,将大幅简化 SFC 逐跳配置的繁杂度,并且也适应新时代大规模网络的发展。因此本文将探索基于 SRv6 技术支持 SFC 的实现,并尝试在云环境中实现该方案。

2

城域网 SRv6 SFC 应用场景


基于 SRv6 的 SFC 组网架构

以城域网中 SRv6 使用场景为例,基于 SRv6 的 SFC 方案主要由用于下发服务链路径信息的( SDN 控制器)业务分类节点( SC )服务转发节点( SFF )服务链集群( SFC Domain )组网构成。


技术周 | 云内基于 SRv6 的 SFC 方案


如上图,服务供应商可通过 SDN 控制器向 SFC 业务分类节点下发服务链配置信息。服务链配置信息组织了 SFC 服务域中服务器路径次序,如:( VBRAS, FW, CGN, Server ) 、 ( VBRAS,FW ) 、( CGN, Server ) 等。

SC 和 SFF 将以 SRv6 隧道的形式为业务数据提供服务链。其中, SC 负责将业务流量导入 SRv6 隧道中, SFF 负责将业务流量传递到具体的服务供应机器。详细运作过程如下图:

技术周 | 云内基于 SRv6 的 SFC 方案

当用户发起访问,业务数据经过 SC 时, SC 将业务数据引入到 SRv6 隧道中进行转发。业务数据随后传递到 SFF , SFF 解读报文中的路径信息,并按信息次序传递数据包到具体的服务链机器( SF )中处理,之后数据包被返还到 SFF , SFF 按路径信息传递到下一个 SFF 或者隧道尾节点。

数据包经过各服务器成功处理后,到达尾节点时,报文中服务链信息部分将被剥去,并按原始业务数据路径被传递。

基于 SRv6 的 SFC 实现原理

SID 标记路径

服务链信息(即服务器地址序列)以 SID 的形式被封装在 IPv6 SRH 扩展头中,作为 SRv6 报文在上文所述的 SRv6 TE Policy 中流转。同时, SC 、 SFF 等地址也可以用 SID 来标记,引导报文路径。因此 SID 相当于网络中的位置标记,其值可使用 IPv6 地址。

不同的 SID 其对应的处理逻辑也不一样。比如 SFF 需要解析并保存 SRv6 报文信息,将数据包分发给不同的 SF ,如果 SF 不支持 SRv6 、 IPv6 等,在分发前 SFF 还需要解封 SRv6 外层报文等等。所以节点在收到 SDN 控制器下发的服务链配置信息后,也会在本地建立相应的 SID 表( Local SID Table ) 。

因此,依据 SID 对应的不同操作,可将其分类如下:

技术周 | 云内基于 SRv6 的 SFC 方案

报文转发过程


在 SRv6 TE Policy 中 SC 节点、 SFF 节点、尾节点对 SRv6 报文的转发操作如下:

技术周 | 云内基于 SRv6 的 SFC 方案

  1. SC 节点收到用户网络原始报文后,根据服务链信息进行SRv6 报文封装,此时 IPv6 报文的目的地址是 SFF 的 End.AS SID , SRH 头部包括服务链全路径信息( SID List )。
  2. SFF 收到报文以后,通过查找 Local SID 表发现目的地址为本地 End.AS SID ,保存当前 SL ( SID List 指针)值,并执行 End.AS SID 对应指令——解封报文,去除 IPv6 报文头部后将原始报文通过配置的出接口发送到 SF 进行处理。
  3. 当 SF 处理完报文并将报文发回给 SFF , SFF 会根据收报文的入接口查找配置信息,然后依据配置的 SID list 重新封装 SRv6 报文,封装后报文 SRH 中 SID list 与 SC 上 SRv6 TE Policy 路径一致, SRH 中的 SL 值为步骤2中保存的 SL 值减1。此时 SRv6 报文目的地址是本地 End.AS SID 之后的下一个 SID (即 Device C 的 End SID )。SFF 根据报文的目的 IPv6 地址,查找 IPv6 路由表转发报文。
  4. ( 在真实服务链路径中,不一定每个节点都需要把报文传递到 SF 中,有时可能只是路径需要经过了该节点,因此节点只需查找路由并转发报文到下一个节点即可。图中 Device C 就是模拟这样的节点。)
    当 Device C 接收到报文以后,通过查找 Local SID 表发现目的地址为本地 End SID ,按 Srv6 转发流程处理报文。目的地址替换为 D1 (即尾节点的 End SID ), SL-1 ,查找 IPv6 路由表转发报文。
  5. 尾节点接收到报文以后,通过查找 Local SID 表发现目的地址 D1 为本地 SID ,将目的地址替换为 D2 (即尾节点的 End.DT4 SID ), SL-1 变为0。尾节点执行 End.DT4 SID 对应指令——解封装 SRv6 报文,并将原始报文转发到对应 VPN 。


3

Linux 中的 SRv6 SFC 模型


上文通过城域网中基于 SRv6 的 SFC 应用场景,梳理了 SFC 的实现流程。而在通用服务器中实现服务链功能,则需要系统实现 SRv6 技术。目前 Linux 系统从 4.10 开始已有支持。


Linux SRv6 协议栈

模型图

在机器中部署 namesapce 模拟 SRv6 网络节点。host 1 请求 host 4 的流量将被引导到 SRv6 封装中,经过 host 2 和 host 3 节点处理后再发送到 host 4。host 4 收到 host1 的请求中不带有 SRv6 报文,对 SRv6 过程不感知。

其中 host1 通过 route 命令对原始报文执行 SRv6 封装操作;host2 作为中间转发节点,通过 route 命令对 SRv6 报文执行转发操作;host3 作为 SRv6 过程的尾节点,通过 route 命令配置剥除 SRv6 报文,并将原始报文发送到目标机器 host4 中。

技术周 | 云内基于 SRv6 的 SFC 方案


测试方法


执行如下脚本:

      #!/bin/bash
TMUX=4hs1sw
# Kill tmux previous sessiontmux kill-session -t $TMUX 2>/dev/null
# Clean up the previous network namespacesfor ns in h1 h2 h3 h4 switch; do ip netns delete ${ns} 2>/dev/nulldone
ip netns add h1ip netns add h2ip netns add h3ip netns add h4ip netns add switch
ip -netns switch link add veth1 type veth peer name enp0s8 netns h1ip -netns switch link add veth2 type veth peer name enp0s8 netns h2ip -netns switch link add veth3 type veth peer name enp0s8 netns h3ip -netns switch link add veth4 type veth peer name enp0s8 netns h4

####################### Node: h1 ########################echo -e "nNode: h1"ip netns exec h1 sysctl -w net.ipv6.conf.all.forwarding=1
ip -netns h1 link set dev lo up
ip -netns h1 link set dev enp0s8 address 00:00:00:00:00:01ip -netns h1 addr add fc00::1/64 dev enp0s8ip -netns h1 link set dev enp0s8 up
ip -netns h1 -6 route add fcf0:12::100 via fc00::2
# 2 SIDs here!# - fcf0:12::100 steers the packet to node h2 where the SRv6 End function is# applied (SL=1 on ingress -> SL=0 on egress)# # - fcf0::23::6006 steers the packet to node h3 where the decap function is# applied (SL=0 on ingress)ip -netns h1 -6 route add fc00::4 encap seg6 mode encap segs fcf0:12::100,fcf0:23::6006 dev enp0s8

####################### Node: h2 ########################echo -e "nNode: h2"ip netns exec h2 sysctl -w net.ipv6.conf.all.forwarding=1
ip -netns h2 link set dev lo up
ip -netns h2 addr add fc00::2/64 dev enp0s8ip -netns h2 link set dev enp0s8 address 00:00:00:00:00:02ip -netns h2 link set dev enp0s8 up
ip -netns h2 -6 route add fcf0:23::6006 via fc00::3
# apply the SRv6 End function for updating the active SIDip -netns h2 -6 route add fcf0:12::100 encap seg6local action End dev enp0s8

####################### Node: h3 ########################echo -e "nNode: h3"ip netns exec h3 sysctl -w net.ipv6.conf.all.forwarding=1
ip -netns h3 link set dev lo up
ip -netns h3 addr add fc00::3/64 dev enp0s8ip -netns h3 link set dev enp0s8 address 00:00:00:00:00:03ip -netns h3 link set dev enp0s8 up
# apply the SRv6 End.DT6 function to decap the packet and to deliver# the inner packet to host h4.ip -netns h3 -6 route add fcf0:23::6006 encap seg6local action End.DT6 table 254 dev enp0s8
# all the hosts are in the same network...## +-----+---------------------------------+-----+# - decap packet: | ... | IPv6 DA=fc00:1, SA=fc00::4, ... | ... |# +-----+---------------------------------+-----+# # host h3 tries to route the decap packet and it finds out that such# packet can be sent directly from node h1 to node h4.# As a result, the node h3 sends an icmpv6 redirect packet to host h1.# We do not want to send this packet to the host h1, so we filter it.
ip netns exec h3 ip6tables -t mangle -A POSTROUTING -p icmpv6 --icmpv6-type redirect -j DROP

####################### Node: h4 ########################echo -e "nNode: h4"ip netns exec h4 sysctl -w net.ipv6.conf.all.forwarding=1
ip -netns h4 link set dev lo up
ip -netns h4 addr add fc00::4/64 dev enp0s8ip -netns h4 link set dev enp0s8 address 00:00:00:00:00:04ip -netns h4 link set dev enp0s8 up

########################### Node: switch ############################echo -e "nNode: switch"ip -netns switch link set dev lo upip -netns switch link set dev veth1 upip -netns switch link set dev veth2 upip -netns switch link set dev veth3 upip -netns switch link set dev veth4 up
ip -netns switch link add sw0 type bridgeip -netns switch link set dev sw0 up
ip -netns switch link set dev veth1 master sw0ip -netns switch link set dev veth2 master sw0ip -netns switch link set dev veth3 master sw0ip -netns switch link set dev veth4 master sw0
sleep 1
## Create a new tmux sessiontmux new-session -d -s $TMUX -n h1 ip netns exec h1 bashtmux new-window -t $TMUX -n h2 ip netns exec h2 bashtmux new-window -t $TMUX -n h3 ip netns exec h3 bashtmux new-window -t $TMUX -n h4 ip netns exec h4 bashtmux new-window -t $TMUX -n switch ip netns exec switch bashtmux set-option -g mouse ontmux select-window -t :0tmux attach -t $TMUX

SREXT 实现 unaware SRv6 SFC 代理

Linux 协议栈中已经实现了 SRv6 封装、解封、转发的功能。但在目前 SFC 应用场景中, SF 不一定能支持 IPv6 ,需要有 unaware SRv6 的代理实现来过渡支持。这方面可通过加载 srext 内核模块来实现。


模型图


部署三个虚机,分别模拟入口节点(ingress),出口节点(egress)和 unaware SRv6 服务端代理节点(nfv)。

其中 nfv 节点上有三个 namespace ,模拟 unaware SRv6 服务端。

当数据进入 nfv 节点中, srext 将剥除 SRv6 部分报文并发送到 vnf namespace 中,待 vnf namespace 处理完后,又将 SRv6 部分重新封装到报文中,继续向下一个 SRv6 节点发送。

技术周 | 云内基于 SRv6 的 SFC 方案

以 client ping server 的请求过程为例,报文处理过程如下图所示:

技术周 | 云内基于 SRv6 的 SFC 方案


测试方法

https://netgroup.github.io/SRv6-net-prog/testbed-basic.html


4

云内基于 SRv6  的 SFC 方案


在云环境中实现基于 SRv6 的 SFC 方案,需要在 OVS 中实现 SRv6 的操作,控制面可通过 SDN Controller 把 SFC 的编排路径下发到 OVS 流表中, OVS 依据流表配置,将业务链信息压入 SRv6 报文中并转发,由此实现 SFC 业务操作。

OVS 中实现 SRv6 转发

模型图

在云环境中, SFC 的部署可能与客户机器在同一个或者不同节点上,两者对 SRv6 数据包的操作大致一样。用户对 OVS 将流量引至 SFC 的过程无感知。

技术周 | 云内基于 SRv6 的 SFC 方案

当用户和 SFC 在不同节点上时, OVS 对业务流量操作如下:

  1. 控制面可通过 SDN 控制器、 OVS 命令行等向 OVS 下发服务链信息配置流表,包括目标报文标记( eg. 五元组)和服务链信息( SID 列表),服务链信息流表在 OVS 中将转化为端口对数据包的具体操作(封装、解封、转发)。
  2. OVS 对接用户的端口(port 1)收到业务流量后,查找流表,如果命中了服务链信息配置流,则封装 SRv6 报文,将服务链路径信息依次全部压入 SRH 中 SID List 字段,初始化 SID List 指针,将 IPv6 目的地址指向 SID List 首节点。将报文转发到下一个处理端口(port 2)。
  3. 当中间端口(port 2、port 3)收到 SRv6 报文后,依据控制面的配置,这些端口将执行转发动作:将 SID List 指针值减一,替换 IPv6 目的地址,转发到下一个节点。
  4. 当对接 SF 的端口(port 4、port 5)收到 SRv6 报文后,依据控制面的配置,这些端口将先执行解包动作,保存报文中的 SID 指针等信息,然后发送原始业务报文给对应的 SF ;当 SF 返回原始业务报文后, OVS 再读取保存的信息执行封包动作,然后转发到下一个节点(port 6)。
  5. 当目标客户机所在端口(port 6)收到 SRv6 报文后,依据控制面的配置,这些端口将执行解包动作,删除包含服务链信息的 SRv6 部分,将原始业务报文转发给目标机器。至此完成基于 SRv6 的 SFC 流程,其过程用户无感知。

技术周 | 云内基于 SRv6 的 SFC 方案


测试方法


为验证 OVS 对 SFC 业务的 SRv6 过程,在此简化模型如下:

技术周 | 云内基于 SRv6 的 SFC 方案

在该模型中验证 OVS 对 SRv6 的封装、转发和解封。其中 namespace1 和 namespace4 模拟业务通信的客户机, namespace2 和 namespace3 模拟 SF ,但这里使用的 namespace 并不具备真正的 SF 功能,因此并未对数据包进行任何操作,只是转发给 OVS ,以此验证 OVS 功能。

技术周 | 云内基于 SRv6 的 SFC 方案

https://pan.baidu.com/s/1u2cMprwoTE4-MePA9kEnBg?pwd=u67f

  1. 控制面下发 SFC 配置流表到 OVS , 指定从 port 2 接收到的报文需要依据 SID List 执行 SRv6 的封装;从 port 4 收到的报文执行 SRv6 转发动作;从 port 6 收到的报文执行解封操作。
  2. 当 port 2 收到报文时,检查是否命中 SFC 流表,如果命中则封装 SRv6 报文,并按照流表规则转发到 port3 。其中封装操作将服务链信息全部压入 SRH 中,由于 OVS port2 作为 SID List 的起点,所以初始化指针值为第二个 SID 即下一跳 SID ,并加上 IPv6 报文,且目的地址为下一跳 SID 。
  3. Namesapce 2 将 port3 发来的报文转发给 port 4 。OVS port 4 接收到报文后,如果命中 SFC 流表,则执行 SRv6 转发动作:SID List 指针值减一,更新 IPv6 目的地址。修改完 SRV6 报文后, OVS 按照流表规则转发到 port 5。
  4. Namespace 3 将 port5 发来的报文转发给 port 6。OVS port 6 接收到报文后,如果命中 SFC 流表,则执行 SRv6 解封动作:剥除 IPv6 和 SRH 部分报文,将原始报文发送到 port 7给目标机器。


云内基于 SRv6 的 SFC 方案

云环境中基于 OVS 实现 SFC 方案通过在 OVS 中配置服务链信息流表规则,简化逐跳策略路由配置的繁杂步骤,实现服务链业务的快速部署。该方案支持 IPv4/IPv6 双栈的业务流量,在 SFC 中通过使用 SREXT 支持 unaware SRv6 的 SF 接入,即也支持 IPv4/IPv6 双栈 SF 。


模型图


云环境中基于 OVS 实现 SFC 方案最小部署方案如下:

user-domain 和 server-domain 上可部署业务访问源和目标,分别接入 OVS 中两个不同的 port ;sfc-domain 作为服务链域机器,其上可部署具体的服务链应用,在此模型中使用三个不同的 vnf 模拟应用容器。考虑到目前许多环境未支持 SRv6 ,此处用 IPv4 来模拟, SF 中的应用都使用 IPv4 中即可。

技术周 | 云内基于 SRv6 的 SFC 方案

OVS 中 user1-port 和 user2-port 作为 SFC SRv6 过程的起止端点,绑定了两个 SID (1:2::1, 2:3::2)作为服务链( SID List )中的起止 SID 。

在部署 sfc-domain 时,将具体的 SF 及其 ipv4 地址写入 Local SID Table 中,并使用两个接口(sfc-domain:ens3, sfc-domain:ens10)分别作为 SFC 域的出入接口对接 OVS 的 port (proxy0-port, proxy1-port)。这两个接口(ens3:[1:2::2],  ens10:[2:3::1])分别与 OVS 起止 SID 在同一网段。

技术周 | 云内基于 SRv6 的 SFC 方案

上图是以 tcp 消息请求过程为例的流量模型。其主要过程如下:

  1. 控制面配置服务链信息流表到 OVS 中,其中对接业务源的 user1-port 负责将业务报文封装到 SFC 的 SRv6 中,对接目标源的 user2-port 负责将 SFC 的 SRv6 剥除。
  2. 当业务源中客户端发起访问, OVS 中 user1-port 收到数据包后,查询流表内容,发现数据包命中 SFC 规则,于是将规则中的全量 SID (服务链[2::ad:f1,2::ad:f2,2::ad:f3]和 OVS 中起止 SID [1:2::1, 2:3::2] )依次压入 SRH 栈中,初始化 SID List 指针,封装 IPv6 报文,并将目的地址设置为下一跳 SID 即第一个 SF 地址( 2::ad:f1 )。
  3. 当 sfc-domain 接收到报文后,程序查找目的 IPv6 ,发现命中 LOCAL SID Table ,于是保存指针,剥除 SRv6 ,发送原始报文到 vnf1 中。当 vnf1 返还原始报文后, sfc-domain 将读取保存的指针信息,重新封装 SRv6 报文,递减指针值,更新下一跳 SID 到目的 IPv6 地址,查找 LOCAL SID Table 和路由表,如果命中就转发到下一跳 SID 所在接口。
  4. 当 sfc-domain 将报文转发到最后一个 SID (2:3::2)时,将报文通过 proxy1-port 发送到 OVS 中, OVS 查找流表,发现命中 SFC 解包规则,于是剥除 SRv6 部分,将原始报文从 user2-port 发送出去。
    至此, tcp 请求过程中的 SFC 处理完毕,业务目标收到报文仍是原始报文,对 SFC 处理无感知。


测试方法


  1. 配置好 ovs 端口:

    https://pan.baidu.com/s/1uxIANuLHiJuJtdM37yEFZQ?pwd=k7xc

  2. 配置 vm ,并测试:

    https://pan.baidu.com/s/1hQRDrpd-HrrFVuGWk9mYeQ?pwd=q5yn


综上,本文讨论了 SFC 服务链应用,及其在 Linux 中的实现方案,以及在云环境中基于 SRv6 的实现方案,以探索算力网络时代下 SFC 在云环境中的快速部署。模型较为简单,开发仍在不断完善中。


Reference

  1. 《 SRv6 SFC 技术白皮书》

  2. https://github.com/netgroup/p4-srv6-usid/issues/4
  3. Ip route encap introduction
    https://www.man7.org/linux/man-pages/man8/ip-route.8.html

点击“阅读原文”查看下载脚本内容。

关于九州云:
九州云成立于2012年,是中国早期从事开放云边基础架构服务的专业公司。公司成立至今,始终秉承“开源·赋能云边变革”的理念,完成了从中心云到边缘云解决方案的拓展和积累,建立了完整的“云+边”生态体系和解决方案,赋能车路协同、工业元宇宙、园区数字孪生、文旅元宇宙等不同行业落地。九州云已先后为运营商、政府、金融、能源、制造业、商业、交通、物流、教育、医疗等各大行业的企业级客户提供了高质量的开放云边基础架构服务。目前拥有中国移动、中国电信、中国联通、国家电网、南方电网广东公司、中国人民银行、中国银联、中国人寿、中国资源卫星、Intel、国际陆港集团、一汽富晟、广西交科、中国青田元宇宙创新赋能中心等众多重量级客户。
技术周 | 云内基于 SRv6 的 SFC 方案

技术周 | qemu网络收发包流程
通常我们使用qemu创建虚拟机时,会使用下面的选项指定虚拟网卡设备的类型,以及桥接、tap设备参数等,如下:
技术周 | qemu网络收发包流程
-device选项用于给虚拟机分配虚拟设备,如磁盘设备、网卡设备等
-netdev选项用于配置虚拟设备的后端,对于网卡设备,常见的有tap、bridge、vhost-user等,tap设备是非常常见的一个后端,如使用libvirt创建虚拟机时,libvirt生成的qemu参数中,使用的就是tap设备,直接使用tap设备更加灵活。vhost-user通常用在dpdk等环境。

本文主要使用tap设备为后端,介绍数据包是如果从tap设备中读取出来,发送给虚拟机设备,以及如果从虚拟机中读取数据包,然后发送给tap设备。

qemu网络收发包流程


tap设备是一个虚拟机设备,在kernel中没有相对应的物理设备,因此只创建出一个tap设备是没有任何用途的,我们可以使用以下命令在linux中创建一个tap设备:
技术周 | qemu网络收发包流程

tap设备主要由内核的tun模块实现,使用’ip tuntap’命令创建设备时,有两种模式,一种是tun,另一个是tap,分别对应点对点设备和以太网设备,或者说一个是三层设备,另一个是二层设备。

即使手工把网卡设置成UP状态,tap也是处于断开的状态,如下:
技术周 | qemu网络收发包流程

只有当应用程序连接到这个设备时,tap设备的状态才会被kernel设置为连接状态,我们可以写个demo程序,从tap设备读取数据包,模拟qemu读取的过程。

程序会输出数据包的长度和数据包的目的mac地址,程序代码如下:
技术周 | qemu网络收发包流程

执行程序:
技术周 | qemu网络收发包流程

并且此时的tap设备状态为:
技术周 | qemu网络收发包流程

qemu使用tap设备时,读写的逻辑和以上的demo程序是一样的,以下是qemu程序从tap设备读取报文的逻辑:
技术周 | qemu网络收发包流程

当qemu启动时,会使用qemu_set_fd_handler函数把tap设备的文件描述符注册到事件循环中,当tap设备从kernel收到数据包时,kernel会通知到qemu,然后qemu会调用tap_send函数去读取,如下:
技术周 | qemu网络收发包流程

从tap_send,可以看出qemu一次最多读取50个数据包,防止tap_send函数过多的占用cpu时间。
tap_read_packet函数会调用read函数读取数据包。
qemu_send_packet_async函数会调用虚拟设备的相关函数发送给虚拟机。
qemu在初始化虚拟设备的时候,会调用qemu_new_nic函数去注册相关回调函数,如下:
技术周 | qemu网络收发包流程

qemu从tap接口读取到数据包后,会调用设备注册的rtl8139_can_receive函数。tap接口的处理流程基本就完成了,后续就是各个虚拟设备的实现了,如e1000/rtl8139等设备要模拟出相关的PCI物理设备,这样虚拟机中的驱动无需做任何修改就可以识别到设备。

通常情况下,这些虚拟设备会做以下工作:
  1. 根据各种硬件特性,预处理数据包,如计算hash值等。
  2. 选择合适的queue。一般qemu在初始化设备时,会把tap的queue和虚拟设备的queue对应起来。
  3. 把数据包放入queue中,构造metadata信息。
  4. 发送中断信息。

本文章选择rtl8139为例,介绍rtl8139如何处理buf。qemu从tap读取数据包后,会调用rtl8139_receive函数去处理数据包,如下:
技术周 | qemu网络收发包流程

在rtl8139_receive函数的参数中,我们可以看到两个重要的参数,buf和size。buf就是数据包本身,size是数据包的大小,这两个信息也就是我们平时在抓包时所看到的内容。我们对应着代码中的顺序,介绍下接受函数主要做了什么处理:
  1. rtl8139_receiver_enabled函数检查驱动是否开启了收取功能,如在虚拟机中未加载设备驱动或者关闭了网卡设备,那么rtl8139没有必要再继续进行处理。
  2. 接着是根据驱动的配置是对数据包以太网头部的一个检查,驱动可以配置设备只收取单播、组播、广播或者所有数据包。
  3. 如果数据包小于64bytes,设备会填充至64bytes。
  4. rtl8139设备有两种缓冲管理模式,c mode和c+ mode,后者是一个增强模式,相比前者可以更高效的处理数据包以及支持更多的特性。qemu在这里会把数据包放到rtl8139的缓冲中,这个缓冲区域属于虚拟机的一块内存区域。
  5. 调用qemu相关函数,触发中断。这个时候虚拟机内部OS开始处理设备中断。

从虚拟机中发包的流程和上述收包的流程类似,不过方向是反过来的,发包前,虚拟机内部驱动需要构造出数据包的相关metadata,如并且告诉硬件数据包的地址和长度等信息,我们以rtl8139 c mode为例,看下linux内核如何处理这个过程:
技术周 | qemu网络收发包流程

数据包在linux内核中经过tcpip协议栈后,最后一步要调用驱动程序的ndo_start_xmit方法,对于rtl8139设备,这个函数是rtl8139_start_xmit。
  1. 获取数据包的实际大小。
  2. 把数据包复制到发送缓冲区域。rtl8139 c mode对数据包的处理比较简单。
  3. 向PCI设备的IO接口写入数据。

qemu收到设备的IO接口写操作时,会调用如下的rtl8139设备代码:
技术周 | qemu网络收发包流程
  1. 获取数据包的实际大小。
  2. 读取数据包的内容到txbuffer。
  3. 调用qemu的接口发送数据包。

以下是qemu发送数据包到tap设备的相关代码:
技术周 | qemu网络收发包流程
可以看到qemu调用writev函数往tap设备写入数据包。

关于九州云:
九州云成立于2012年,是中国早期从事开放云边基础架构服务的专业公司。公司成立至今,始终秉承“开源·赋能云边变革”的理念,完成了从中心云到边缘云解决方案的拓展和积累,建立了完整的“云+边”生态体系和解决方案,赋能车路协同、工业元宇宙、园区数字孪生、文旅元宇宙等不同行业落地。九州云已先后为运营商、政府、金融、能源、制造业、商业、交通、物流、教育、医疗等各大行业的企业级客户提供了高质量的开放云边基础架构服务。目前拥有中国移动、中国电信、中国联通、国家电网、南方电网广东公司、中国人民银行、中国银联、中国人寿、中国资源卫星、Intel、国际陆港集团、一汽富晟、广西交科、中国青田元宇宙创新赋能中心等众多重量级客户。
技术周 | qemu网络收发包流程

2022

 12.15 

NextArch DevOps Meetup

12月15日,九州云产品架构师吴维受邀参加NextArch DevOps社区举办的线上Meetup,带来以《边缘计算场景下自动化运维建设》为话题的精彩分享,和DevOps实践者、爱好者一同剖析和探讨。

九州云技术专家解读边缘运维技术|NextArch DevOps Meetup

吴维老师在本次分享中,介绍了边缘计算场景下的运维特点,并针对边缘场景下自动化运维的痛点与架构设计,结合自身的技术积累与实践探索,阐述了边缘场景下自动化运维的技术选型与建设收益。

边缘计算是一种分散式的运算架构,计算就近在数据的产生源进行,总量大、高度分散、架构复杂是边缘计算运维的主要特点,用户期望以一种友好、准确的方式快速解决运维问题并保持系统稳定。

开源建木作为DevOps领域的小能手,满足了用户对边缘运维质量的更高要求。







开源建木是一个面向DevOps领域的极易扩展的开源无代码(图形化)/低代码(GitOps)工具,帮助用户轻松编排各种DevOps流程并分发到不同平台执行:

  • 通过简单的任务/代码编排,实现流水线一次构建,多次使用;
  • 持续的代码集成,让开发者尽早发现质量问题,快速定位修复;
  • 自动化的代码扫描、编译打包、单元测试,避免人工干预,把研发团队从重复的工作中解放出来,聚焦到更有价值的事情上。

九州云技术专家解读边缘运维技术|NextArch DevOps Meetup


九州云技术专家解读边缘运维技术|NextArch DevOps Meetup


九州云技术专家解读边缘运维技术|NextArch DevOps Meetup


九州云技术专家解读边缘运维技术|NextArch DevOps Meetup


开源建木项目起源于2015年九州云团队对某征信业务研发测试云项目在DevOps领域的思考与实践,在“开源·赋能云边变革”核心理念的指引下,重新对DevOps&OpsDev领域中共性、有价值的需求做了一次完整的梳理和重写,最终诞生了针对IT领域的自动化集成平台——开源建木项目。

未来,作为开源建木项目的发起单位,九州云将持续深度参与社区建设和技术贡献,进一步推动开源软件在国内的发展,为企业数字化转型、高质量发展贡献力量。

关于九州云:
九州云成立于2012年,是中国早期从事开放云边基础架构服务的专业公司。公司成立至今,始终秉承“开源·赋能云边变革”的理念,完成了从中心云到边缘云解决方案的拓展和积累,建立了完整的“云+边”生态体系和解决方案。九州云已先后为运营商、政府、金融、能源、制造业、商业、交通、物流、教育、医疗等各大行业的企业级客户提供了高质量的开放云边基础架构服务。目前拥有中国移动、中国电信、中国联通、国家电网、南方电网广东公司、中国人民银行、中国银联、中国人寿、中国资源卫星、Intel、国际陆港集团、一汽富晟等众多重量级客户。
九州云技术专家解读边缘运维技术|NextArch DevOps Meetup

2022 年 12 月 12 日,KubeClipper 1.3.1 版本正式发布!

开源大事记


  • 2022 年 08 月, KubeClipper 项目正式开源到 https://github.com/KubeClipper 项目。
  • 2022 年 08 月,在由 OpenInfra 基金会举办的 2022 OpenInfra Days China 会议上,KubeClipper 团队以《KubeClipper:全新好用的 Kubernetes 多集群全生命周期管理工具》为主题,详解 KubeClipper 项目的设计理念,吸引了众多开发者的关注与讨论。
  • 2022 年 11 月,通过了 CNCF 社区的 Kubernetes 一致性认证。
  • 2022 年 12 月,KubeClipper 1.3.1 版本正式发布,带来多项重大功能更新。

此次 KubeClipper 1.3.1 版本的更新,带来了“集群托管”、“模版管理”、“集群备份优化”等令人期待的新功能,并全面支持了 ARM 版的部署。

1

新特性演示



2

新功能解读


集群托管

KubeClipper 支持在用户自有的基础设施上创建和运行 Kubernetes 集群,在 1.3.1 版本中,还支持将任意运行中的原生 kubeadm 集群导入到 KubeClipper 平台中进行管理。KubeClipper 为托管集群提供与本地集群一致的管理服务,支持集群的可插拔插件管理、节点管理、集群扩缩容、证书管理、备份恢复等服务。

模版管理

快速便捷的界面化 K8S 集群部署,是 KubeClipper 最重要的特性之一。在 1.3.1 版本中,KubeClipper 支持了集群和插件的模版管理,使部署集群操作更加快捷。

您可以将常用配置保存为集群模版,或将已有的集群配置保存为模版,在后续部署 K8S 集群时一键复用,也可以将集群存储配置单独保存为插件,在为运行中的集群添加存储时快速配置。无需再烦恼复杂的自定义参数,生产级集群也可以快速稳定的一键启动。

集群备份优化

集群备份是一项重要的运维操作,KubeClipper 1.3.1 支持了集群的定时备份服务。用户可以为集群添加一次性或周期性的定时备份任务,在业务空闲时间为集群自动备份。同时还支持了为集群配置 FileSystem 或 S3 类型备份空间,对集群备份文件进行统一有序的管理。

ARM 版支持

KubeClipper 支持常用的 Linux ,如 CentOS 7.x 、Ubuntu 18.04 、Ubuntu 20.04、Rocky 8.5、麒麟 V10 操作系统的部署。在 1.3.1 版本中,支持了对 ARM 版操作系统部署,同时支持了在同一 KubeClipper 平台中,运行和管理 X86 和 ARM 版的 K8S 集群。在平台部署方面,KubeClipper 1.3.1 保持了简单快捷的部署设计,两个命令行即可快速启动一个 KubeClipper 环境。

戳快速入门文档,立即体验:

https://github.com/kubeclipper-labs/kubeclipper/blob/master/README_zh.md#quick-start


其他新特性和优化

  • 集群管理

  • 支持可插拔的集群插件管理
  • 支持配置私有镜像仓库自签名证书
  • 新增 CRI 镜像仓库配置功能
  • 新增集群证书的更新、查看和下载功能
  • 新增 agent 节点启用/禁用功能
  • 支持多版本 calico 部署
  • 支持指定集群 kubelet 数据目录

  • kcctl

  • 新增 kcctl upgrade 升级 KC 组件版本功能
  • 新增 kcctl 强制删除集群和节点功能

此外,KubeClipper 1.3.1 版本补充了大量 e2e 测试,测试用例覆盖率达到 80% 以上,更方便开发者参与。


3

关于 KubeClipper


KubeClipper 是九州云推出的又一款优秀开源项目 https://github.com/kubeclipper/,它致力于提供轻便易用、稳定可靠的图形化界面 Kubernetes 多集群管理工具,以降低企业规模化建设容器云的门槛,为企业用户与开发者提供更多便利。

KubeClipper 在完全兼容原生 Kubernetes 的前提下,提供在企业自有基础设施中快速部署 K8S 集群和持续化全生命周期管理(安装、卸载、升级、扩缩容、远程访问等)能力,支持在线、代理、离线等多种部署方式,还提供了丰富可扩展的 CRI、CNI、CSI、以及各类 CRD 组件的管理服务。

与现有的 Sealos、KubeKey、Kubeasz、KubeOperator、K0S 等 K8S 生命周期管理工具相比,KubeClipper 更贴近开放原生、轻量便捷、稳定易用。


KubeClipper
Sealos
KubeKey
Kubeasz
KubeOperator
K0S
图形化页面
轻依赖 – 不依赖 ansible 等
多区域、多集群管理
支持多版本 K8S、CRI
离线安装
基于 kubeadm 封装

KubeClipper 持续开源,希望能结识更多志同道合的朋友,共同见证 KubeClipper 项目的茁壮成长。

更多内容,请访问:
Github:
https://github.com/kubeclipper/
官网:
https://kubeclipper.io/
邮箱:
contact@kubeclipper.io
微信交流群:
KubeClipper 1.3.1 正式发布!

参与开发贡献或开源活动,有机会获得精美周边:

KubeClipper 1.3.1 正式发布!

KubeClipper 团队:


关于九州云:
九州云成立于2012年,是中国早期从事开放云边基础架构服务的专业公司。公司成立至今,始终秉承“开源·赋能云边变革”的理念,完成了从中心云到边缘云解决方案的拓展和积累,建立了完整的“云+边”生态体系和解决方案。九州云已先后为运营商、政府、金融、能源、制造业、商业、交通、物流、教育、医疗等各大行业的企业级客户提供了高质量的开放云边基础架构服务。目前拥有中国移动、中国电信、中国联通、国家电网、南方电网广东公司、中国人民银行、中国银联、中国人寿、中国资源卫星、Intel、国际陆港集团、一汽富晟等众多重量级客户。

KubeClipper 1.3.1 正式发布!

Route-Distinguisher(后简称“RD”), Route-Target(后简称“RT”)经常出现在EVPNMPLS VPN中,但它们是完全不同的两个概念,初学者往往难以区分两者的差异。学霸题:区分“RT””RD”;有妙招:阅读RFC。两者相关的信息参杂在rfc4364rfc4760rfc6074rfc4761rfc4271rfc7432等诸多标准之中。

本文将结合具体的示例,简化RFC内容,让你3分钟秒懂“RT””RD”

  RD  


如下图所示拓扑,用户A(蓝色)和用户B(绿色)在PE-1交换机和PE-2交换机下创建了各自对应的VPN(VRF)。

3分钟读懂RD与RT

用户A在PE-1交换机下连的网段是192.168.1.0/24。用户B在交换机PE-1下连网段同样为192.168.1.0/24。在交换机内部,可以通过VPN(VRF)隔离两个路由域,保证即使不同用户创建了重叠的网段,也不会发生网络冲突。

 在传统的BGP-4中并没有字段可以存储路由所处的VPN信息。这对在当前场景下如何存储、传递不同租户的拥有相同IP网段的路由信息,如何保证路由信息的唯一性带来了瓶颈。扩展的MP-BGP协议则引入了”RD”,与IPv4地址共同构成VPN-IPv4地址解决该瓶颈。

3分钟读懂RD与RT

若在VPN-A上配置”RD”为1:1,VPN-B上配置”RD”为2:2,则实际PE-1交换机BGP路由表中存储的信息应如下:
1:1:192.168.1.0/24
2:2:192.168.1.0/24
 
通过在路由条目前添加”RD”前缀,确保BGP 路由表中创建了全局唯一的路由信息,以此实现BGP对等体之间合理地交换路由条目。

RD的编码规范



RD有三种编码方式。

  • 类型一:2字节ASN与4字节自定义数值。若使用的是公开的ASN,建议该ASN已获得授权许可,且自定义的数值应由该ASN的拥有方分配。使用的是私有的ASN,则无特殊限制。

  • 类型二:4字节IP与4字节自定义数值。若使用的是公网IP,建议该IP已获得授权许可,且自定义的数值应由该IP的拥有方分配。若使用的是私网IP,则无特殊限制。

  • 类型三:4字节ASN与2字节自定义数值。限制同类型一。

  • 3分钟读懂RD与RT

  RT  



接踵而来的问题是:PE-2如何知道哪些路由条目属于用户A,哪些路由条目属于用户B?通过设置RD,仅仅确保了路由条目在BGP VPN-IPv4表中的唯一性。当前BGP表中存在的2条路由,看上去仅仅就是前缀信息。解决之道是:使用RT。RT近似于在路由条目上添加的标签。PE-1 为用户A的VPN-A设置 export RT 100:100;PE-2 为用户A的VPN-A设置 import RT 100:100。当PE-1更新VPN-A的路由信息是,输出的条目便添加RT 100:100标签,当 PE-2检视接收到的BGP VPN-IPv4信息条目时,挑出拥有100:100标签的路由条目,写入用户A的VPN中。

3分钟读懂RD与RT

RT的编码规范



RT的编码规范与RD一致。

不得不说一句,规范是规范,具体取何值似乎也因人而异。虽然IETF一直在教人做事,但人往往又不按套路出牌!

3分钟读懂RD与RT

  小结  



  • RD值用于确保路由条目的唯一性。

  • RT值用于决定路由条目的归属,分发路由。

  • 实际使用中,可以设置多个export RT和多个import RT,以实现灵活地路由导出导入的场景。

EVPN下的RD和3类RT值



图示拓扑构建的EVPN VxLAN网络环境,Leaf交换机上与”RD””RT”相关的命令如下所示(以H3C为例)。”RD””RT”的配置存在于vsi及vpn-instance之中。

3分钟读懂RD与RT

vsi VSI-A
vxlan 10
 evpn encapsulation vxlan
  route-distinguisher auto
  vpn-target auto export-extcommunity
  vpn-target auto import-extcommunity
 ip vpn-instance VPN_A
 route-distinguisher 1000:100
 #
 address-family ipv4
  vpn-target 1000:100 import-extcommunity
  vpn-target 1000:100 export-extcommunity
 #
 address-family evpn
  vpn-target 1000:100 import-extcommunity
  vpn-target 1000:100 export-extcommunity
 
EVPN地址族是MP-BGP在L2VPN地址族下定义的新的子地址族。新增了5种路由消息。

  • Type 1 Ethernet Auto-discovery Route:以太网自动发现路由
  • Type 2 MAC/IP Advertisement Route:MAC/IP发布路由
  • Type 3 Inclusive Multicast Ethernet Tag Route:IMET路由
  • Type 4 Ethernet Segment Route:以太网段路由
  • Type 5 IP Prefix advertisement route:IP前缀路由

其中最常用的Type 2 用来通告MAC地址和主机路由信息。Type 3 用来通告VTEP及其相关VXLAN信息,用以实现自动发现VTEP、自动建立VXLAN隧道和自动关联VXLAN与VXLAN隧道。Type 5用来以IP前缀的形式通告BGP IPv4单播路由或BGP IPv6单播路由。配置中的”RD””RT”就用于控制以上类型路由的生成导出与接收导入。

  • 第一个RT:VXLAN RT,VSI视图下的配置,一般使用auto自动生成,由2类和3类路由消息携带用于形成基于VXLAN的MAC地址表、ARP表、ARP抑制表项及隧道建立。Auto填充规则:自动生成的RT取值为“BGP AS:VXLAN ID”;如果是EBGP的话,使用3类消息建隧道需要注意该RT的值要手动配置。

  • 第二个RT:VPN IPv4 RT,VPN下的IPv4地址族RT,用于形成VPN的IPv4路由表,5类路由携带,一般网段路由和外部引入的路由或者向外部引出路由时进行控制。

  • 第三个RT:VPN EVPN RT,由TYPE2路由携带,用于将32位主机路由导入VPN,形成主机路由,在纯二层环境中TYPE2路由中只携带第一类RT,当配置了L3-VNI,TYPE2路由中会同时携带第一个和第三个这两个RT,两个RT均通过import才能学习路由形成主机路由。

关于九州云:
九州云成立于2012年,是中国早期从事开放云边基础架构服务的专业公司。公司成立至今,始终秉承“开源·赋能云边变革”的理念,完成了从中心云到边缘云解决方案的拓展和积累,建立了完整的“云+边”生态体系和解决方案。九州云已先后为运营商、政府、金融、能源、制造业、商业、交通、物流、教育、医疗等各大行业的企业级客户提供了高质量的开放云边基础架构服务。目前拥有中国移动、中国电信、中国联通、国家电网、南方电网广东公司、中国人民银行、中国银联、中国人寿、中国资源卫星、Intel、国际陆港集团、一汽富晟等众多重量级客户。
3分钟读懂RD与RT

1

行 业 发 展 趋 势

随着云计算的快速发展和应用,很多企业都完成了IT基础设施上云的工作。企业将安全要求高的业务部署在私有云中,将需要通过互联网访问的业务部署在公有云上,为了实现容灾、业务高可用,避免单一云厂商带来的风险,企业会选择多个云厂商,多个云厂商的选择也为降低IT运营成本提供了谈判筹码和议价能力。

公有云与私有云业务的融合在业内称之为混合云。《Flexera2022年云状况报告》调查显示:89%的企业采用了多云战略。

多云管理平台助力企业数字化转型

混合云在提升企业业务应用灵活性的同时,也使业务的连续性和经营成本得到持续优化。在激烈的市场角逐中,数字化转型对于企业而言,是必经之路,企业可以通过混合云构建灵活、敏捷的云基础设施,获得更好的业务匹配度、更高的可用性以及更低的成本,从而提升企业的竞争力。

企业在使用混合云带来各种便利的同时也面临了新的挑战,调查显示企业平均使用了2.2个公有云+2.2个私有云,云环境的复杂性异地数据中心、异构服务器、异构云环境已成为不可忽视的因素。在这样的背景下如何保障IT设施的安全性、操作的合规性、以及如何降低运营运维成本,是企业面临的新问题。

鉴于当前混合云发展的状况,企业亟需一个独立的、可兼容多种虚拟化技术、提供安全、合规、透明的智能化系统来实现对多云环境的统一管理,提高整体IT基础设施的安全性、稳定性、可用性,提升运维管理水平、降低运营成本。

2

产 品 概 述

九州云Animbus® CMP 3.0是成熟的、易于部署实施的云管理平台。它可以管理企业内部多个数据中心的物理及虚拟资源,创建共享的计算基础设施(IaaS),并在此基础上同时提供PaaS服务,为企业随需提供各种应用环境。它提供了自动化的资源配置功能,为云平台各种资源提供全生命周期的管理,为企业提供快捷的IT服务,从而满足企业今天所面临的动态业务需求。

Animbus® CMP 3.0是一个开放的云管理平台,以REST API形式开放所有API,用户可以方便的集成CMDB、OA系统、LDAP等已有系统,并可以根据不同的用户要求进行定制化开发,快速持续升级,满足企业不断发展的业务转型需求。同时兼容X86、ARM版操作系统部署,支持国产操作系统和上层应用的全信创生态。

3

产 品 架 构


Animbus® CMP 3.0混合云管理平台采用模块化架构,易于扩展和升级,主要包括资源纳管及编排管理、资源管理、运营管理、运维管理及系统管理等几大功能模块。平台架构示意图如下:

多云管理平台助力企业数字化转型


图 1 Animbus CMP 3.0产品架构图



Animbus® CMP 3.0通过资源管理模块,提供统一纳管和管理OpenStack、VMware vSphere、Kubernetes、OpenShift、HMC、PowerVC、Ironic Standalone等虚拟化平台,和阿里云、腾讯云、AWS、华为云等主流公有云,提供对裸机、虚拟机、服务器、存储、网络、容器、软件/中间件等资源的全生命周期管理。

多云管理平台助力企业数字化转型


图 2 管理域图



Animbus® CMP 3.0摒弃繁琐的手动流程,提供了友好的自助服务入口,使用户随时、随需申请使用资源,通过自定义的审批流程,自动完成资源的部署。它提供统一的运营服务,对资源的使用情况进行统一的计量和计费统计,提供对区域、云平台、部门、项目等多维度的计量统计分析服务,提升IT资源的管理效率。

多云管理平台助力企业数字化转型



图 3 自助服务申请图


Animbus® CMP 3.0提供统一的自动化运维服务,对纳管云平台的物理和虚拟资源提供统一的监控告警服务,实时监控云环境的健康状态和性能状况,保证企业业务的稳定可靠运行。它提供简单易用的脚本执行、资源编排、弹性伸缩服务,告别枯燥重复的日常工作,提高工作效率。其亮点体现在以下几个方面:

1). 一站式资源管理

  • 基于云计算参考架构(CCRA)进行设计,支持VMware vSphere、OpenStack、Kubernetes等多种虚拟化技术,实现对AWS、阿里云、腾讯云等主流公有云的对接,为客户提供虚拟机和裸机的全生命周期管理。
  • 支持纳管大规模云环境,支持管理数万台计算节点、数十万台虚拟机。帮助企业提升多云管理效率,轻松完成对多云资源的日常管理,驱动企业全面云化。

2). 统一运维管理

  • 对于不同技术的云平台,针对其多样的管理粒度、监控指标,统一运维管理具备配置、部署和管理其多云基础设施所需的各项技能,以满足企业合规性。
  • 提供监控告警、弹性伸缩、可视化编排服务、作业管理等自动化运维服务,帮助运维人员规避IT风险,实现运维质量。
  • 提供多种云服务资源池和服务目录,打破云平台壁垒,实现对业务需求的快速响应。
  • 提供集中化的混合云运维能力,提高运维服务效率、提高企业生产力、保证高可用、保证可靠性、最大限度优化性能,由此大大减少人为错误与人力需求,从而达到降低运维成本的目的。

3). 统一运营管理

  • 支持自定义服务目录、审批流程和请求服务,以满足企业灵活配置的需求。
  • 按组织架构或云环境对混合云资源提供统一的运营服务,包括角色管理、配额管理、计量分析、计费服务、资源分析、优化建议等,帮助企业高效运营多云。

4). 多云统一治理

  • 提供多云管理的统一治理能力,用户可一点操作多个不同云平台的资源,简化云管理。
  • 支持管理人员基于企业的组织架构,自定义用户角色权限,以适配企业自身组织特色。
  • 支持设置和执行成本配额管理,提升资源利用率。
  • 支持对资源的操作变更进行全程记录,助力企业合规审计。

5). 开放可扩展

  • 兼容X86、ARM版操作系统部署,支持国产操作系统和上层应用的全信创生态。
  • 以REST API 形式开放全部功能,方便用户进行二次开发,集成企业内部管理系统。

4

产 品 证 书

九州云经过在多云管理平台领域多年深耕,积累了许多技术经验,并将之申请了发明专利,同时九州云云管理平台也在积极适配信创生态,适配了麒麟等国产操作系统。

多云管理平台助力企业数字化转型

图 4 相关证书


5

产 品 功 能


5.1 异构资源统一管理

Animbus® CMP 3.0提供了多层次的资源池,能够同时管理位于多个区域、数据中心的不同虚拟化环境。通过部门来配置资源池、配额和服务目录,方便管理员细粒度掌控云环境中的各种资源。

Animbus® CMP 3.0可以一键纳管和同步OpenStack、VMware vSphere、Kubernetes、OpenShift、PowerVC、Standalon Ironic、阿里云、腾讯云、AWS等云平台,集中进行集群和主机管理、资源池管理、自动化部署、混合编排、资源调整和回收等资源的全生命周期管理。

多云管理平台助力企业数字化转型


图 5 管理域图


5.2 裸机全生命周期管理


Animbus® CMP 3.0提供了开箱即用的裸机管理服务。通过友好的页面向导,提供简单、便捷的裸机注册、上架、部署、回收的全生命流程管理。同时提供面向用户的服务目录和请求管理,支持用户随需申请和释放裸机资源,提升IT管理人员管理裸机资源的效率和便利性,满足企业级的管理需要。

5.3 “低代码”可视化编排


Gartner在 CMP云管理转盘中就定义了可视化编排作为 CMP 的主要功能点之一,作为 CMP 产品编排功能也是其中比较重要的一个功能点,Animbus® CMP 3.0提供虚拟机、容器、中间件等资源的混合编排和自动化部署服务。通过 CMP 可视化编排功能可以通过拖拉拽的方式快速定义好一个应用模板,再通过服务目录发布出去,用户可以随时按需申请所需资源,通过部门审批流程,完成自动化部署和安装,从而达到快速创建资源目的,减少用户重复性工作,提高工作效率。

多云管理平台助力企业数字化转型


图 6 可视化编排图

5.4 统一监控告警服务


Animbus® CMP 3.0提供丰富的监控告警服务,集成Prometheus监控系统,提供对OpenStack、VMware vSphere、Kubernetes、Ironic Standalone等云平台的统一监控告警服务。通过个性化的仪表盘页面和大屏展示,呈现给运维人员、部门管理员、资源使用者多层级的资源监控情况,满足不同人员的管理需要。同时提供灵活的告警机制,支持用户对不同区域、云平台、部门资源,设置差异化的告警规则和通知策略,并通过E-mail、短信等方式推送告警通知。

5.5 自动化批量作业


Animbus® CMP 3.0提供简洁易用的自动化批量作业服务,用户可以通过上传Excel,执行批量创建网络、虚拟机、数据卷等一系列自动化任务。同时保留部门的审批管理,并支持查看分解任务、执行结果、失败任务的原因分析和恢复执行。在高效作业的同时,保障资源的合规性和任务的安全性。

5.6 多层级组织管理


Animbus® CMP 3.0提供多层级的组织管理服务,用户可以结合企业实际的组织架构,自定义企业及部门层级,同时引入更加灵活的项目概念,灵活高效的管理组织内的人员和角色权限。并在此基础上,设置差异化的审批流程,管理部门的资源权限和使用配额,合理规划和使用云资源。

5.7 多维度计量统计


Animbus® CMP 3.0支持以区域、云平台、资源池、部门、项目等维度对物理和虚拟资源的使用情况进行统计分析,定期生成计量报表,以满足管理人员和部门用户的数据统计、用量分析、资源规划等需要。

5.8 灵活的计费服务


Animbus® CMP 3.0支持灵活设置虚拟资源(CPU、内存、存储、网络)的使用价格,并支持对不同部门、云平台类型差别定价。通过对全平台统一的计费管理,定期生成部门费用账单、成本分析和优化建议,为企业用户的云投资、云管理和费用回收提供支撑。

6

产 品 价 值

6.1 混合云资源统一管理


Animbus® CMP 3.0提供私有云、公有云资源的一站式管理,支持阿里云、腾讯云、AWS等主流公有云平台的统一管理。帮助企业在业务高峰期或突发的资源使用需求时,随需创建公有云资源,并结合原有的私有云场景,便捷、高效的使用和管理公有云资源,降低企业的IT基础设施成本。

6.2 助力云资源转售


通过云管理平台提供的企业租户功能,可以使资源转售方以企业的维度管理云资源,以企业的维度统计该企业使用的所有云资源的费用总计,以企业的维度统计该企业所使用的所有云资源详细信息。

6.3 随需申请云资源


Animbus® CMP 3.0提供简单易用的自服务门户。终端用户可以忽略底层平台的差异和复杂的资源配置要求,快速获取所需云资源,满足业务部门的个性化需求。同时使管理规范化,减少管理员工作量。

6.4 海量资源的精细化管理


Animbus® CMP 3.0提供一键式的大规模云资源纳管,海量资源统一管理。管理员可以忽略底层云平台的差异,根据业务和管理的实际需要,重新划分管理维度,对海量资源进行高效的精细化管理。当前CMP已实现快速纳管多管理域共30000+物理机。CMP还提供对云资源使用情况和云服务管理水平的统一分析,通过多维度的资源使用量、实际利用率的全面统计分析,管理员可以从全局视角管理和调整资源的分配策略,提高资源利用率。

通过多层级的组织管理,业务部门可以协助管理员更有针对性、更精细的管理云资源。各业务部门也可以根据CMP提供的部门资源统计分析和监控告警服务,结合自己的实际需要,更科学的规划资源建设。

6.5 支持行业云服务


对于需要对外提供行业云服务的企业,Animbus® CMP 3.0通过角色权限、服务目录等多层级的权限控制,帮助企业更精细的管理用户权限,提供多样化的云服务,降低人为的操作风险,保障底层平台的安全性。同时结合灵活的计量计费服务,提高云服务质量,降低运营成本。

6.6 加速业务创新


通过快速的资源部署和服务交付,缩短业务的上线和升级周期,助力企业的业务创新。对于有资源扩建需求的企业,CMP还可以助力新平台的建设,快速对新平台进行统一管理,降低运维人员的学习成本和管理成本,加快新业务的上线。

7

典 型 案 例

7.1 某大型物流公司


多云管理平台助力企业数字化转型


图 7 某大型物流公司云管平台架构图



7.1.1 客户需求和痛点

  • 私有云平台分散在全国二十多个地区,资源管理和运维难度大。
  • 用户遍布全国各地,需要能通过公网访问所需服务。
  • 需要对全国二十多个私有云平台统一运维,并快速响应异常事件。

7.1.2 解决方案


  • 合云管理平台和二十多个OpenStack平台一体化交付,并统一纳管、统一监控。
  • 混合云部署在公有云环境提供公网服务,并通过端口收敛纳管私有云环境的OpenStack平台,最小化CMP和OpenStack平台的端口互通数量,保障底层平台的安全性。
  • 提供统一的、多层级的监控告警服务,方便当地业务部门和统一运维部门快速响应异常事件。

7.1.3 客户收益


  • 对全国二十多个地区的私有云平台进行统一管理,提升资源管理效率。
  • 各地用户通过公网访问所需服务,满足业务需要的同时,通过端口收敛保障系统交互的安全性,满足等保规范要求。
  • 对多个私有云平台进行统一的、多层级的监控告警,提升运维规范性和管理效率。

7.2 某车联网运营商


多云管理平台助力企业数字化转型



图 8 某车联网运营商云管平台架构



7.2.1 客户需求和痛点


  • 实现对阿里云、腾讯云、AWS、华为云的统一资源管理,统一计费管理,统一运维管理。
  • 结合实际的用户组织结构,实现企业级的多租户管理,并尝试对PaSS层容器资源的管理。
  • 需解决多云环境下,资源无法统一管理,无法统一计费,运维管理效率低下的问题。

7.2.2 解决方案

  • 通过CMP实现多公有云资源统一纳管。
  • 通过CMP实现公有云账号、账单信息同步,统一计费管理。
  • CMP支持企业级多租户管理。

7.2.3 客户收益


  • 实现阿里云、腾讯云、AWS、华为云的统一资源管理,统一计费管理和统一运维管理,助力用户运维效率的提升和运营管理效能的不断改进。


关于九州云:
九州云成立于2012年,是中国早期从事开放云边基础架构服务的专业公司。公司成立至今,始终秉承“开源·赋能云边变革”的理念,完成了从中心云到边缘云解决方案的拓展和积累,建立了完整的“云+边”生态体系和解决方案。九州云已先后为运营商、政府、金融、能源、制造业、商业、交通、物流、教育、医疗等各大行业的企业级客户提供了高质量的开放云边基础架构服务。目前拥有中国移动、中国电信、中国联通、国家电网、南方电网广东公司、中国人民银行、中国银联、中国人寿、中国资源卫星、Intel、国际陆港集团、一汽富晟等众多重量级客户。

多云管理平台助力企业数字化转型


Skyline 是新一代的 OpenStack 管理界面(Dashboard),由九州云于 2021 年 9 月捐献给 OpenStack 社区。同年 12 月末,Skyline 孵化完成,毕业成为 OpenStack 正式项目。


然后再经过近一年的努力,Skyline 开发团队完成了 OpenStacker 化的代码重构,并增加了对 Octavia、Manila、Swift、Barbican、Zun、Trove 等社区模块的支持(特别感谢来自土耳其工程师们的提交,关于 Manila、Magnum、Zun 和 Trove 模块支持)。Skyline 团队也通过企业微信群与社区开发者、社区用户进行了很多轮的互动讨论。2022 年 10 月 5 日,Skyline 第一个正式版本随 OpenStack Zed 正式发布。


OpenStack Zed:新一代仪表盘 Skyline 正式发布


更多 Skyline 发布信息,请参考 OpenStack 官网:


  1. OpenStack Zed 组件清单:

    https://releases.openstack.org/zed/index.html

  2. Skyline-apiserver 1.0.0 Release notes :

    https://docs.openstack.org/releasenotes/skyline-apiserver/zed.html

  3. Skyline-console 1.0.0 Release notes:

    https://docs.openstack.org/releasenotes/skyline-console/zed.html


你为什么需要 Skyline?


Horzion 是一个很成功的 OpenStack Dashboard 平台,但随着时间迭代,其 UI 简陋、技术栈陈旧(AngularJS 已经停止 Support)、性能和用户体验性较差等弱势与日俱显,被广大 OpenStack 用户诟病,可谓“天下苦 Horizon 久矣”。但社区一直没能对 Horizon 进行整体技术升级,或者推出另一款更优秀和现代化的 Dashboard 供用户选择,在此形势下,Skyline 应运而生。


01

丰富的功能:满足企业级云需求

Skyline 不仅提供了 OpenStack 基础组件:计算,存储,网络的操作界面,也支持许多增值组件:如文件存储,对象存储,负载均衡,数据库等服务。一旦完成部署,Skyline 不依赖任何插件,就能迅速调用各种云服务接口,满足企业级的生产需求。云上的虚拟机、容器,k8s 集群、RDS 数据库,负载均衡等各种资源,都能在Skyline 的平台上完成全生命周期管理。

Skyline 1.0.0 已完成以下组件的对接,并支持完整的图形化操作界面。

组件名称
服务类型
是否实现
Keystone
用户认证
Glance
镜像服务
Nova
计算服务
Placement
调度服务
Neutron
网络服务
Cinder
块存储服务
Zun
容器服务
Manila
文件存储
Heat
编排服务
Trove
数据库服务
Octavia
负载均衡
Magnum
K8S 集群服务
Prometheus
监控服务
Swift
对象存储
Barbican
证书管理
VPNaaS
VPN 服务


02

现代化界面:优秀的 UI 设计和交互设计

Skyline 以蓝色和黑色作为 UI 设计的主色调,相比于 Horizon,提供耳目一新的视觉体验。前端使用最新的 Antd 框架,实现了各种现代化前端组件,如多类型弹窗、进度条、级联选择器等,给用户提供现代化的交互体验。

OpenStack Zed:新一代仪表盘 Skyline 正式发布

Skyline 将控制台和管理平台分离,基于不同角色的账号(管理员、普通用户)展现不同的操作页面,相较于 horizon 将各个功能耦合,无疑是更合理、优秀的信息架构。

OpenStack Zed:新一代仪表盘 Skyline 正式发布

Skyline 提供更细颗粒度的配额展示,不仅支持项目整体的配额用量,而且支持创建某种资源的实时配额提醒。

OpenStack Zed:新一代仪表盘 Skyline 正式发布

OpenStack Zed:新一代仪表盘 Skyline 正式发布

03

持续升级:海纳百川,持续进步

Skyline 1.0.0 版本仅仅是开始,项目的贡献者在后续版本仍会持续开源,持续保证代码质量的前提下,我们会在版本迭代过程中,吸取市场上各个云厂商产品的优点,社区用户需求,增加 Skyline 的功能深度。

Skyline 的技术优势



01

轻量、高性能的框架

从 Skyline 官网可以看到,Skyline 分为两个模块:apiserver 和  console,前后端分别采用 ReactJS 和 Fastapi 框架,从源码层面,保证了强大的扩展性和兼容性。

OpenStack Zed:新一代仪表盘 Skyline 正式发布

Skyline apiserver 模块基于 Python Fastapi 框架(一个高性能的 Python 异步 Web 框架)实现,相当于 Horizon API,但简单得多。Skyline apiserver 将绝大多数 OpenStack API 直接透传给 OpenStack endpoints,而不像 Horizon API 一样增加适配层。这样一来,我们就可以轻松地从浏览器的开发者工具中看到绝大多数的 OpenStack API 请求被直接发送到 OpenStack endpoints,请求和返回信息都会非常直观,这样就大大降低了系统出错时 Trouble Shooting 的难度。

Skyline console 是一个 JavaScript React 纯前端框架,不包含 Node.js,完全运行在浏览器上,非常轻量,且保持无状态。

使用了市场上主流的框架和软件包,意味着更多的开发者能够轻松定制化 Skyline,前后端工程师能够各司其职,后端工程师专注开发或封装 API,前端工程师专注界面展示,Skyline 相比于 Horizon 更适合目前的 Web 技术的趋势。


02

快速部署、极简运维

Skyline 支持 Devstack 或者独立容器化部署。

为了实现生产级的 OpenStack 环境搭建,Skyline 将在下一个版本集成到官方项目 Kolla 和 Kolla-Ansible。

详细的部署方式,请查看:

  1. 实验性部署,基于 Sqlite:
    https://opendev.org/openstack/skyline-apiserver/src/branch/master#deployment-with-sqlite
  2. 基于 MariaDB:
    https://docs.openstack.org/skyline-apiserver/latest/install/docker-install-ubuntu.html
  3. DevStack:
    https://opendev.org/openstack/skyline-apiserver/src/branch/master/devstack/README.rst
  4. Kolla Ansible:当前的 Kolla-Ansible 集成以 patch 方式提供:
    https://opendev.org/openstack/skyline-apiserver/src/branch/master/kolla/README-zh_CN.md,Skyline 将在下一个版本集成到官方项目 Kolla 和 Kolla-Ansible。


合作与未来


九州云积极推广 Skyline 项目,与诸多厂商或高校完成了基于 Skyline 的项目合作,我们很高兴看到 Skyline 已经在很多实际生成环境中被使用。这对于 OpenStack 的推广而言,也无疑是积极的影响。Skyline 发布对于我们团队而言仅仅是开始,我们的下一目标是提高 Skyline 的行业影响力,让 Skyline 成为一款经得起行业考验的优秀项目。


OpenStack Zed:新一代仪表盘 Skyline 正式发布

Skyline 更多信息

  1. 官方组件:
    https://www.openstack.org/software/project-navigator/openstack-components#openstack-services
  2. OpenStack Map:
    https://www.openstack.org/software/
  3. 视频介绍地址1:
    https://v.qq.com/x/page/r32789sk9g3.html
  4. 视频介绍地址2:
    https://www.youtube.com/watch?v=Ro8tROYKDlE
  5. 视频介绍地址3:
    https://www.youtube.com/watch?v=pFAJLwzxv0A


小 结


Skyline 的吉祥物是九色鹿。九色鹿源自于敦煌壁画《九色鹿本生》,其寓意是佛理 因果和知恩图报,这与九州云自创办以来秉持的拥抱和反馈社区理念一致。我们也希望 Skyline 像九色鹿一样,轻巧、优雅,而又能力强大,为 OpenStack 社区和用户提供更优质的 Dashboard。

OpenStack Zed:新一代仪表盘 Skyline 正式发布

九州云始终坚持源于社区,拥抱社区,回馈社区的开源理念。在OpenStack社区Zed版本贡献中,九州云代码提交排名第四、代码评审排名第二、代码行数排名第三、BUG提交排名第四、BUG修复排名第三。

OpenStack Zed:新一代仪表盘 Skyline 正式发布

OpenStack Zed:新一代仪表盘 Skyline 正式发布

详细贡献数据可以参考官网:
https://www.stackalytics.io/?release=zed

我们很高兴看到国内的云计算企业开始向社区回馈贡献高质量的项目,希望这个项目能茁壮成长,也希望看到更多的优秀开源项目不断涌现出来。

如果您为社区 Skyline 贡献过代码并通过 Review 合入仓库,您将可以得到九州云赞助的精美 Skyline 文化衫,数量有限,快快参与吧~

OpenStack Zed:新一代仪表盘 Skyline 正式发布

OpenStack Zed:新一代仪表盘 Skyline 正式发布

关于九州云:
九州云成立于2012年,是中国早期从事开放云边基础架构服务的专业公司。公司成立至今,始终秉承“开源·赋能云边变革”的理念,完成了从中心云到边缘云解决方案的拓展和积累,建立了完整的“云+边”生态体系和解决方案。九州云已先后为运营商、政府、金融、能源、制造业、商业、交通、物流、教育、医疗等各大行业的企业级客户提供了高质量的开放云边基础架构服务。目前拥有中国移动、中国电信、中国联通、国家电网、南方电网广东公司、中国人民银行、中国银联、中国人寿、中国资源卫星、Intel、国际陆港集团、一汽富晟等众多重量级客户。

OpenStack Zed:新一代仪表盘 Skyline 正式发布

背 景


在国内数字化转型的浪潮下,越来越多的企业正在迈向数字化转型的道路上,云计算可以说是企业数字化转型的重要基础,多数企业已经使用了虚拟化、私有云、公有云等多种云平台,随着管理的云平台数量越来越多,在云平台管理上出现了不便。随着此类管理需求越来越多,国内多云管理平台也开始逐渐流行起来,多云管理平台可以解决企业多云管理上的问题,实现统一管理、运维、运营多种类型的云平台。

企业使用多云管理平台的场景多种多样,本文重点关注其中两个细分场景需求:

#1

集团性客户使用场景

集团性客户一般拥有多家子公司,在集团建设云管理平台后,集团需要对每个子公司以及子公司的部门做成本核算等,需要云管理平台能支持以子公司的维度统计各种资源费用信息。

#2

云资源转售使用场景

某些企业通过整合公有云或私有云资源为其生态伙伴或客户提供云资源转售服务,企业需要对其生态伙伴或客户做成本核算等,需要云管理平台能支持以公司的维度统计各种资源费用信息。


产 品 介 绍


2022年7月,九州云Animbus CMP(云管理平台)3.0正式发布,九州云针对集团型、云资源转售(AGG)等客户业务场景在Animbus CMP 3.0 中的组织架构中新增加了“企业”组织架构。

云资源转售解决之道
系统截图

企业作为 CMP 中的顶级组织架构,在企业下可以创建部门,在部门还可以创建子部门、在子部门下可以创建项目,可以根据企业实际组织架构灵活设置 CMP 组织架构,以满足企业项目需求,下图为组织架构示意图:

云资源转售解决之道
组织架构图

以企业维度统计该企业的费用信息,并能展示该企业下部门的消费 TOP10、消费趋势、消费分布、账单汇总等信息。

云资源转售解决之道

云资源转售解决之道

同时支持下载费用概览,支持下载该企业下部门的消费 TOP10、消费走势、消费分布、账单汇总等。

云资源转售解决之道

下表为该企业下部门消费 TOP 10样例:

云资源转售解决之道

下表为该企业下部门消费趋势

云资源转售解决之道

下表为该企业下部门账单汇总:

云资源转售解决之道

表为该企业下部门消费分布

云资源转售解决之道

支持针对公有云设置费用告警,设定一个最低费用值,当账号余额等于该值时会发送邮件通知。

云资源转售解决之道

账户总览可以展示每个企业下管理的云平台有哪些,每个云平台可用余额是多少。

云资源转售解决之道

收支明细可以展示每个企业、部门、账号在什么云平台消费或支持了多少金额,余额还有多少。

云资源转售解决之道

也支持导出收支明细为 excel 表格。

云资源转售解决之道

集成账单支持导出每个企业、部门、云商、账号下某个产品的消费详细信息,如使用什么产品、计费模式等信息。

云资源转售解决之道


云资源转售解决之道

客 户

案 例

九州云Animbus CMP 3.0

提高多云运维、运营效率

九州云的某客户使用九州云云管理平台极大的提高了多云的运维、运营效率,该客户在使用九州云云管理平台前,同时使用了 AWS 、阿里云、腾讯云、华为云等几个公有云平台,其业务场景为公有云资源转售、客户在同时使用这些公有云平台中逐渐发现了两个痛点:


1.同时使用多个公有云平台不便的地方就是每个公有云平台都有自己的管理界面,同时管理这些公有云,需要来回切换到不同的公有云管理平台执行云资源生命周期管理工作。

2.作为云资源转售方,需要定期对其客户进行费用统计,其中有可能客户同时使用了多家公有云平台,所以每当月底结算费用时,都需要先获取不同云平台上的消费明细再由人工统计汇总该企业当月所有云平台资源消耗的总费用。

云资源转售解决之道

现有市面上的云管理平台不能满足客户需求,客户选择了九州云云管理平台,九州云云管理平台支持企业租户功能,企业租户下可以有部门组织、部门下可以有项目组织,灵活的组织架构,可以分配不同的公有云资源到相应组织,使该客户可以以企业、部门、项目、云商、账号等维度灵活统计费用信息。

该客户使用九州云云管理平台统一纳管多家公有云平台,解决了多云统一管理的问题,使用九州云云管理平台费用管理实现了以”企业”维度自动统计汇总所有公有云费用,省去了人工汇总各公有云费用的流程,提升了用户运维运营多云的效率。

关于九州云:
九州云成立于2012年,是中国早期从事开放云边基础架构服务的专业公司。公司成立至今,始终秉承“开源·赋能云边变革”的理念,完成了从中心云到边缘云解决方案的拓展和积累,建立了完整的“云+边”生态体系和解决方案。九州云已先后为运营商、政府、金融、能源、制造业、商业、交通、物流、教育、医疗等各大行业的企业级客户提供了高质量的开放云边基础架构服务。目前拥有中国移动、中国电信、中国联通、国家电网、南方电网广东公司、中国人民银行、中国银联、中国人寿、中国资源卫星、Intel、国际陆港集团、一汽富晟等众多重量级客户。

云资源转售解决之道

KubeClipper 的起源

九州云(99cloud)致力于成为开放云边架构领导者,在大量 MEC 边缘计算项目建设过程中,KubeClipper 应运而生。


KubeClipper 旨在提供易使用、易运维、极轻量、生产级的 Kubernetes 多集群全生命周期管理服务,让运维工程师从繁复的配置和晦涩的命令行中解放出来,实现一站式管理跨区域、跨基础设施的多 K8S 集群。


2022 年 8 月,KubeClipper 正式开源,源代码托管在 GitHub,访问https://github.com/KubeClipper-labs 项目主页了解更多详情。KubeClipper 的吉祥物是一只帅气呆萌、轻盈矫健的小海鸥,logo 是在这只小海鸥的保驾护航下扬帆远航的帆船(Clipper)。帆船取自李清照《渔家傲》里“星河欲转千帆舞”,希望 KubeClipper 能乘风破浪会有时,“蓬舟吹取三山去”!


KubeClipper——轻量便捷的 Kubernetes 多集群全生命周期管理工具


你为什么需要 KubeClipper?



云原生时代,Kubernetes 已毋庸置疑地成为容器编排的事实标准。虽然有诸多辅助 K8S 集群安装和管理的工具,但搭建和运维一套生产级别的 K8S 集群仍然十分复杂。九州云在大量的服务和实践过程中,沉淀出一个极轻量、易使用的图形化界面 Kubernetes 多集群管理工具——KubeClipper。

KubeClipper 在完全兼容原生 Kubernetes 的前提下,基于社区广泛使用的 kubeadm 工具进行二次封装,提供在企业自有基础设施中快速部署 K8S 集群和持续化全生命周期管理(安装、卸载、升级、扩缩容、远程访问等)能力,支持在线、代理、离线等多种部署方式,还提供了丰富可扩展的 CRI、CNI、CSI、以及各类 CRD 组件的管理服务。
与现有的 Sealos、KubeKey、Kubeasz、KubeOperator、K0S 等 K8S 生命周期管理工具相比,KubeClipper 更贴近开放原生、轻量便捷、稳定易用。


KubeClipper
Sealos
KubeKey
Kubeasz
KubeOperator
K0S
图形化页面
轻依赖 – 不依赖 ansible 等
多区域、多集群管理
支持多版本 K8S、CRI
离线安装
基于 kubeadm 封装

更多功能列表和快速体验,请戳:KubeClipper-README

九州云自 2012 年创业以来,始终秉持拥抱开源、回馈社区的初心,先后开源了若干明星项目,诸如:

  1. 面向 AutoOps 的建木 
    https://jianmu.dev/
  2. OpenStack 全新仪表盘 Skyline
    https://opendev.org/openstack/skyline-apiserver
  3. 面向车路协同的 OpenV2X
    https://openv2x.org/

KubeClipper 是九州云推出的又一款优秀开源软件 https://github.com/kubeclipper-labs/,它致力于提供轻便易用、又稳定可靠的 K8S 生命周期管理工具,以降低企业规模化建设容器云的门槛,为企业用户与开发者提供更多便利。希望开源能吸引有兴趣的同学一起参与,与行业协同发展。


KubeClipper 的技术优势



1. 易使用:图形化页面


KubeClipper 提供向导式的图形化界面,运维工程师可以通过友好的界面,快速完成一个生产级 K8S 集群和所需组件的安装部署,一键完成集群的扩缩容、备份恢复、升级、插件管理等运维管理操作。KubeClipper 从实践中来,在细节上更懂用户。

以创建集群为例,节点配置时,KubeClipper 会自动为控制节点添加污点,同时允许用户更改节点污点、设置节点标签。在生产场景中,用户可以将常用配置保存为模版,在创建时简单配置节点后一键部署,实现集群的分钟级创建。

KubeClipper——轻量便捷的 Kubernetes 多集群全生命周期管理工具


2. 极轻量:架构简单,少依赖


部署实验用的 KubeClipper 集群,仅需两行命令,兼容多种常用的 Linux 操作系统(CentOS / Ubuntu)。

curl -sfL https://oss.kubeclipper.io/kcctl.sh | KC_REGION=cn sh -kcctl deploy  [--user root] (--passwd SSH_PASSWD | --pk-file SSH_PRIVATE_KEY)


KubeClipper 没有选择相对笨重的 Ansible(版本依赖复杂,速度较慢,内存占用多等),而是通过更轻量的 kcctl 命令行工具,作为图形化界面的补充工具,提供对 KubeClipper 平台自身的安装、清除和其他运维管理。在架构设计上,KubeClipper 追求轻量优雅,参考 K8S 架构设计,通过少量服务节点实现对大量工作节点和多 K8S 集群的管理。


3. 生产级:易用性和专业性兼顾


KubeClipper 为解决生产场景的问题而生,在追求使用简单的同时,提供更丰富、更灵活的功能和服务。比如 KubeClipper 提供了多种网络环境下、多版本的安装包和镜像拉取,支持 GCR 镜像代理、支持完全离线环境下的 K8S 集群部署和插件安装,支持用户自定义多版本的 K8S、CRI、CNI 部署安装。

KubeClipper——轻量便捷的 Kubernetes 多集群全生命周期管理工具

4. 面向边缘场景


边缘计算是一个重要的容器技术应用场景,也对 Kubernetes 集群快速部署和管理有更高要求。KubeClipper 通过区域对集群和节点进行逻辑或物理的隔离,更易适配边缘计算场景,同时也更符合企业多数据中心的生产场景。

KubeClipper——轻量便捷的 Kubernetes 多集群全生命周期管理工具


KubeClipper 的未来规划



KubeClipper 还处于快速成长阶段,未来我们会继续保持轻量化、易使用的设计风格,加强对边缘场景的支持,如提供对 K3S、K0S、Kube-Edge 等边缘场景 kubernetes 方案的支持,提供更成熟的生产级解决方案,如提供更丰富的 CNI、CSI 和其他管理插件的支持等。

我们希望能通过 KubeClipper 项目结识更多志同道合的朋友,和我们一起看到这个项目茁壮成长。

开启 KubeClipper 之旅



戳快速入门文档:立即体验

  //  

如果您喜欢我们的项目,请在 GitHub 仓库上点个 Star,我们需要您的鼓励和支持!

KubeClipper 项目仓库:

https://github.com/kubeclipper-labs/kubeclipper

KubeClipper-Console 项目仓库:

https://github.com/kubeclipper-labs/console


参与开发贡献或开源活动,有机会获得精美周边。

KubeClipper——轻量便捷的 Kubernetes 多集群全生命周期管理工具


KubeClipper 团队



联系我们


邮箱:contact@kubeclipper.io
微信交流群:
KubeClipper——轻量便捷的 Kubernetes 多集群全生命周期管理工具

关于九州云:
九州云成立于2012年,是中国早期从事开放云边基础架构服务的专业公司。公司成立至今,始终秉承“开源·赋能云边变革”的理念,完成了从中心云到边缘云解决方案的拓展和积累,建立了完整的“云+边”生态体系和解决方案。九州云已先后为运营商、政府、金融、能源、制造业、商业、交通、物流、教育、医疗等各大行业的企业级客户提供了高质量的开放云边基础架构服务。目前拥有中国移动、中国电信、中国联通、国家电网、南方电网广东公司、中国人民银行、中国银联、中国人寿、中国资源卫星、Intel、国际陆港集团、一汽富晟、爱立信等众多重量级客户。
KubeClipper——轻量便捷的 Kubernetes 多集群全生命周期管理工具

据 Github 2021 年度报告显示,目前 Github 用户数已超 7300 万,中国 Github 开发者 755万,开源吞噬世界的当下,越来越多中国开发者和企业积极参与开源建设。


有一位从事开源 10 多年的从业人员,戏称自己为未来希望成为三线城市艺术家,打造“田园程序猿的乌托邦”。抱着对开源的热情,为国内开发人员和 DevOps 人员提升开发、上线、运维的效率,建木团队研发并开源了“建木”。他就是九州云的联合创始人章津楠,为什么他这么说?“建木”具体是什么项目?


“建木”萌芽


“建木”是基于九州云多年来在项目上的思考与实践:


时间滑回 2015 年,九州云为征信中心研发测试云咨询和落地实践项目时,当时团队的设计方案是从底层基于 OpenStack 的IaaS私有云的构建,到上层基于 Jenkins 的CI/CD流水线,在实践的过程中体会到了 DevOps 的优美和不足,并开始从开发者视角来审视 DevOps,内心埋下自研“建木”的种子。


2018 年,九州云参与金融机构的自动化运维项目,通过从运维人员视角的思考来从业务的角度理解 DevOps 对运维人员的价值,更加理解金融领域对 DevOps 的述求和管理者视角——稳字当头的“敏捷”。“建木”种子在实践的土壤里默默潜伏,于 2020 年真正萌芽起来。


伴随云计算的快速发展,如何自动化运维和管理云 IT 设施成为企业新的技术挑战,随着九州云业务飞速迭代,九州云本身同样面临人员危机。通过对自身“能不能自己革自己的命”,让 DevOps 更简洁,自研工具并在其上搭建需求场景,将业务流程固化,提高运维效率,从而赋能开发、运维人员。2020 年底,“建木”应用而生。得益于九州云一直以来的开源经验,从诞生的第一天起,建木便决定以开源的形式回馈社区。


建木优势:简洁、流程配置可视化


传说中,“建木”是上古先民崇拜的一种圣树,是用作沟通天地人神的桥梁,伏羲、黄帝等均通过这梯子上下往来于人间天庭。《淮南子·墬形训》曰:“建木在都广,众帝所自上下。日中无景,呼而无响,盖天地之中也。”


因此建木团队希望“建木”成为开发人员、运维人员在不同业务场景下相互沟通的桥梁。建木以触发器、流程编排、任务分发等功能为平台核心,支持 SDK 管理、密钥管理、统一日志、统一存储、统一认证等服务,应用在 CI/CD、DevOps、自动化运维、多业务系统集成等场景中。目前建木已应用在九州云真实业务中。


从技术架构上,建木分为任务执行层、流转分发层、概念定义层、支持服务。


任务执行层:执行器管理和任务执行过程管理,目前建木项目会提供一些默认的执行器,社区的开发者也可以通过自身的需要扩展自己的执行器。后续建木项目也会提供一些更有意思的任务节点,现在以建木Hub的形式对外提供。


流转分发层:自研流程引擎,分发层根据触发器来触发流程的执行和执行过程中的分发策略的控制,来对所有的流程(或者 pipeline)的任务根据任务优先级、任务类型、执行器使用率等情况进行合理的分发和调度。


概念定义层:对任务通过流程的方式进行定义,考虑到在建木CI 场景中会比较多的采用pipeline 的形式出现,支持 pipeline 模式的定制。为了更加便于开发者使用,自定义了一整套以 YAML 为基础的 DSL,方便用 git 等版本管理工具对流程进行统一的版本管理,从而实现GitOps。


支持服务:包含自动化集成会使用的统一认证、秘钥管理、SDK 管理等基础支撑模块。


建木官网采用中国式的卷轴形式打开,官网介绍了配置即代码,提供声明式语法将流程代码化,通过代码库进行版本控制,快速实现幂等部署与故障恢复:


“建木”萌芽,聚木成林


建木项目流程配置可视化,让任务编排与执行状态一目了然:


“建木”萌芽,聚木成林


采访过程中快速演示了如何使用建木,通过简单在建木配置语句,就可在 IM 软件自动发布一条群消息。目前建木进入木兰开源社区孵化,并在 Gitee 上托管,感兴趣的同学可以下载使用:

jianmu(建木): 建木持续集成平台基于建木,致力于为国内开发者与DevOps人员提供极致用户体验,提升开发、上线、运维的效率,让软件用户专注于提供业务价值。
https://gitee.com/jianmu-dev 

 

未来发展


谈及后续发展推广,章津楠表示,一是以产品的方式在社区推广使用,二是坚持开源,让用户以简洁地方式打开,不断吸引和积累用户。


建木团队的愿景是希望建木像组成物质的原子、组成DNA的基因、组成数字字节那样成为IT服务的一个个积木,开发者或者软件使用者可以像乐高积木一样创造自己都为止惊叹的“艺术品”。让 更多 IT 从业人员从体力劳动解放出来,从而真正实现田园程序猿的乌托邦——写代码是一种创作。


通过建木项目我们发现,作为国内较早一批提供开放云边基础架构技术开发和服务的九州云,以“开源·赋能云边变革”为核心,今年对外推出 Skyline、建木等开源项目,同时积极参与OpenStack、StarlingX、Kubernetes、OpenNess以及EdgeGallery等开源社区建设,不断在云计算及边缘计算领域建立深厚的技术储备和开源贡献。

————————————————

版权声明:本文为CSDN博主「CSDN云计算」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。


关于九州云:
九州云成立于2012年,是中国早期从事开放云边基础架构服务的专业公司。公司成立九年,始终秉承“开源·赋能云边变革”的理念,完成了从中心云到边缘云解决方案的拓展和积累,建立了完整的“云+边”生态体系和解决方案。九州云已先后为运营商、政府、金融、能源、制造业、商业、交通、物流、教育、医疗等各大行业的企业级客户提供了高质量的开放云边基础架构服务。目前拥有中国移动、中国电信、中国联通、国家电网、南方电网广东公司、中国人民银行、中国银联、中国人寿、中国资源卫星、eBay、国际陆港集团、万达信息、东风汽车、爱立信等众多重量级客户。

“建木”萌芽,聚木成林