Windows中使用eBPF

背景

也挺有意思的,前年念叨着Windows内的SDN方案咋做,去年微软终于就搞了个eBPF for Windows,如此以来结合Windows新版本自带的NVGRE/VxLAN网络,安全组、EIP、LB啥的在纯软裸金属里都好说了。

另外,迫于适配智能与半智能网卡的压力,ZStack已经提供了ovs与linux bridge两个技术栈的网络(新建集群的时候可以选,虽然不是第一个但早些时候收到的需求确实不硬开发也忙。。),所以现在看起来一切都很合理。

当然,产品的东西跟新技术并不是什么强绑定关系,技术只是锦上添花实现产品的工具,稳定优先。

测试

编译eBPF for Windows

测试程序

VxLAN/NVGRE集成

实时操作系统中应用K8S

背景

想做这个东西的背景也很简单,就是KVM虚拟化里配上国产还是VxWorks的实时操作系统,实时性都比物理机差好几倍,无法满足某些客户的需求,常规的一些优化手段抓破头也不行了。看过WindRiver的StarlingX觉得它们的无论延迟还是抖动的控制都相对好一些,但是VxWorks本身是个黑盒子(可能对于某些有源码的人不是。。),所以就只能跳出来看这个问题,为了满足客户的需求,批量管理运维、快速发布回收、状态实时监控,都21世纪了我为什么要用虚拟化呢?(后来事实证明大家也很少用虚拟化做这个事儿。。)

那就实时Linux系统配K8s,满足大规模、边缘、嵌入式场景,雷达、舰载、攻防。。。而且这个场景下想象空间比虚拟化大点。

准备

OS:RHEL 8.4 with rt kernel

测试

懒了,直接上测试结果以演示容器配RTLINUX是否值得投入,如果性能满足需求,那做这个市场还需要个牌照和资质,不过问题不大。

 

ZStack Glusterfs 超融合方案

ZStack 2.1版本中已经支持了NFS作为MNHA节点的存储,那么我们可以按照之前glusterfs组件oVirt超融合的方式直接使用,过程如下。

实验环境
服务器3台,双千兆网口,均已安装ZStack专家模式操作系统。

部署三节点无条带双副本分布式glusterfs存储
节点安装ZStack计算节点后,分别在三台上使用如下命令安装glusterfs。

部署ZStack HA管理节点
将glusterfs的路径分别挂载至/zstack/glusterfs/mnha/,但要注意NFS/glusterfs的IP,因为glusterfs到服务端的连接不同于

在ZStack中集成OpenStack Neutron组件

以笔者目前对ZStack源码的掌握,并不能较为产品化地集成Neutron,所以只能用点稍微hack的技巧将其用起来。

实验材料:ZStack单机版,OpenStack Neutron with Dashboard and OVS bridge

实验目的:通过修改ZStack实例的开机xml(或者新建主机时修改网络为openvswitch bridge),调用Neutron API,并将实例网络桥接至OVS网桥。

实验步骤:

1. 搭建ZStack,略。

2. 搭建OpenStack Neutron实例,参考脚本https://…

3. 编写hook脚本

4. 开机测试

5. 通过OpenStack Dashboard查看

实验思考:

这就是KVM平台的好处,互操作性杠杠的。另外,Neutron可作为VM Appliance单独提供,加上Cloud-Init就更好了。

实验过程:

1. 集成oVirt与Neutron

2. 集成ZStack与Neutron

3. Neutron与其产品的集成

参考链接:

http://www.ovirt.org/develop/release-management/features/cloud/neutronvirtualappliance/

TBD

在LinuxBridge/OVS中使用VxLAN组网以及创建VTEP

这是一篇入门文章,帮助初学者理清VxLAN的基本原理与使用,ovs只是工具,新版本内核也可使用ip命令直接创建。

本篇内容分为两篇,第一篇是使用简单VxLAN通道网络,第二篇会接入OVS模拟的VTEP设备。

一、使用VxLAN通道

原理是在网络命名空间上(仅测试环境),创建对端接口(peer/patch,虚拟化环境中即是虚拟机veth设备接口与OVS tun接口),以通过VxLAN通道与彼此通信。

host1拥有物理接口eth0(192.168.0.101),host2拥有物理接口eth0(192.168.0.102),两者在同一局域网中。

实验拓扑如下图。

在host1上创建veth与对端接口,对端接口会与ovs网桥相连,其中veth1代表虚拟机接口(地址为10.0.0.1),veth1p代表与ovs网桥相连的接口。

# 添加网络命名空间
ip netns add ns-host1
# 添加对端接口
ip link add name veth1 type veth peer name veth1p
# 将虚拟机接口放入命名空间
ip link set dev veth1 netns ns-host1
# 设置虚拟机接口IP
ip netns exec ns-host1 ifconfig veth1 10.0.0.1/24 up

# 添加ovs网桥
ovs-vsctl add-br ovs-vxlan
# 将虚拟机的对端接口放入命名空间
ovs-vsctl add-port ovs-vxlan veth1p
# 激活接口
ip link set ovs-vxlan up
ip link set veth1p up

同样在host2上创建。

ip netns add ns-host2
ip link add name veth1 type veth peer name veth1p
ip link set dev veth1 netns ns-host2
ip netns exec ns-host2 ifconfig veth1 10.0.0.2/24 up

ovs-vsctl add-br ovs-vxlan
ovs-vsctl add-port ovs-vxlan veth1p
ip link set ovs-vxlan up
ip link set veth1p up

然后,分别在host1与host2上创建VxLAN通道。

host1,将VxLAN的对端指向host2的eth0,VNI(VXLAN Network Identifier)为123。

ovs-vsctl add-port ovs-vxlan vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.0.102 options:key=123

host2,将VxLAN的对端指向host2的eth0。

ovs-vsctl add-port ovs-vxlan vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=192.168.0.101 options:key=123

这样即可完成最简单的OVS VxLAN实验准备,在host2上的虚拟机尝试ping host1上的虚拟机。

ip netns exec ns-host2 ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=1.74 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.734 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.669 ms

这里可以将主机上的物理接口,比如eth1加入到ovs-vxlan中,从而使得与其相连的主机或者网络设备能够接入此VxLAN网络;
当添加第三台主机时,使用gre网络需要在每个gre0中设置remote_ip以两两相连,可以是星形或者环形(打开ovs生成树协议,ovs-vsctl set bridge ovs-gre stp_enable=true),而VxLAN网络

二、使用VxLAN通道连接虚拟机与物理机

三、接入OVS VTEP设备

参考:
brctl与bridge命令对比
在oVirt中使用ovs gre网络
搭建基于Open vSwitch的VxLAN隧道实验
Connecting VMs Using Tunnels (Userspace)

VMWare vCenter Converter SDK

看到有公司专门做P2V、V2V,看了一下他们做了一些管理与适应各平台的边边角角工作,其技术原理是使用iotap或者VMWare Hypervisor层的 VAIO(感谢黄老师指导),从而达成CDP效果。

但这种技术的现在的缺点有两点:

1. 没法支持任何的并行IO类应用,比如GPFS,Oracle RAC等;

2. 本质上没法做consistent group。

更多具体内容可以查看Falcon与Commvault的相关专利,但这篇文章中2V的话还可以玩玩,那么我们试一下Converter SDK吧,也可直接下载Converter

首先去下载最新的VMware vCenter Converter Standalone SDK 6.1

虚拟化平台镜像去冗测试(opendedup)

OpenDedup,是一款开源去重文件系统,https://github.com/opendedup/sdfs,可以分布式,支持NFS、iSCSI等,感觉非常厉害,作者是Veritas的银堡(Sam Silverberg)。

可以去官网下载镜像,或者是笔者认为更加实用的NAS系统。

简单测试

目的是减少更多本地环境占用,使用opendedup测试。

1. 首先测试我新闻服务器上的数据,以索引文件为主,经常变动,有大有小。

2. 然后选择一款kvm软件平台。

安装:

wget http://www.opendedup.org/downloads/sdfs-latest.deb
sudo dpkg -i sdfs-latest.deb

sudo su
echo "* hardnofile 65535" >> /etc/security/limits.conf
echo "* soft nofile 65535" >> /etc/security/limits.conf
exit
sudo mkfs.sdfs --volume-name=pool0 --volume-capacity=256GB
sudo mkdir /media/pool0 
sudo mount.sdfs pool0 /media/pool0/

数据拷贝进去后,原9.3GB索引数据降为8.5GB,效果不如想象中好。

可能原因:

sdfs提供了丰富的命令行选项,我没有使用,使用后可能会达到预期,比如更小的block。

平台测试

这里选择的平台包括oVirt、OpenStack、PVE、ZStack企业版,来分别感受一下。