SONIC交换机作为软硬结合设备,在转发过程中是强依赖ASIC芯片的,因此在实际测试过程中,测试人员也都是先将软件系统安装更新在被测交换机设备上,再使用真实交换机搭建组网拓扑,来验证被测交换机的功能。这种方法显然非常适用于实际功能的验证,但在物理环境缺失的情况下,测试人员想提前进行自动化调试时,可以尝试用一种虚拟交换机的方法,节约环境资源,提前介入自动化开发调试。
拓扑及实现
对于使用基于 KVM 虚拟机构建自动化测试平台时,VM与vSONIC本质上都是同一服务器中运行的 KVM VM。以t0拓扑为例,用于连接服务器的 DUT 端口可以直接移动到 PTF docker 的网络命名空间,用于连接邻居虚拟机的 DUT 端口可以直接连接到相应的 OVS 网桥,被测的vSONIC通过PTF docker中启动exabgp进程建立ebgp邻居并进行路由交互。
环境搭建准备
测试平台主机要求
Ubuntu20.04 AMD64,部署T0拓扑,需要至少20GB内存
安装python与pip
sudo apt install python3 python3-pip openssh-server
下载sonic-mgmt并使用脚本初始化管理网络
在github官网下git clone sonic-mgmt代码
cd sonic-mgmt/ansible
sudo ./setup-management-network.sh
安装docker,配置docker组,允许以非root用户身份管理docker
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
下载VM image
社区推荐使用的是Arista的vEOS,镜像文件可以注册Arista官网后免费下载,社区推荐的版本如下,下载完成后将文件复制到测试平台~/veos-vm/images
Aboot-veos-serial-8.0.0.iso
vEOS-lab-4.20.15M.vmdk
下载SONIC-VS image
1.下载sonic-vs image
虚拟SONiC image作为被测的操作系统,可以在github主分支下载编译好的sonic-vs.img.gz文件,也可以自己开发编译产出。
2.解压image并将其复制到~/sonic-vm/images/ ~/veos-vm/images下
gzip -d sonic-vs.img.gz
mkdir -p ~/sonic-vm/images
cp sonic-vs.img ~/sonic-vm/images
mkdir -p ~/veos-vm/images
mv sonic-vs.img ~/veos-vm/images
设置sonic-mgmt docker
所有测试平台的配置步骤和测试都是从sonic-mgmt docker容器运行的。该容器包含用于SONiC测试的所有必需的软件包和工具,以使不同开发人员和实验室设置之间的测试行为保持一致。sonic-mgmt主要负责调配整个测试流程,包括启动协议VM、调用ptf等。
1、在sonic-mgmt存储库的根目录下运行setup-container.sh
cd sonic-mgmt
./setup-container.sh -n sonic-mgmt -d /data
2、进入sonic-mgmt docker,从这一步开始,除非另外说明,否则之后的每一步都在sonic-mgmt docker内运行
docker exec -it sonic-mgmt bash
3、在sonic-mgmt docker中设置主机公钥
修改/data/sonic-mgmt/ansible/veos_vtb,将内容替换为自己登录主机的用户名
STR-ACS-VSERV-01:
ansible_host: 172.17.0.1
ansible_user: use_own_value
vm_host_user: foo
修改/data/sonic-mgmt/ansible/group_vars/vm_host/creds.yml文件
vm_host_user: foo
vm_host_password: foo123
vm_host_become_password: foo123
取消注释这两行:/data/sonic-mgmt/ansible/ansible.cfg
become_user='root'
become_ask_pass=False
4、在/data/sonic-mgmt/ansible路径下创建一个password.txt文件,内容可以随便写,检查不为空就行
5、在主机运行sudo visudo,添加以下命令到文件末尾,确保可以在容器内无需密码登录主机,在主机上无需密码可以运行sudo
主机名 ALL=(ALL) NOPASSWD:ALL
拓扑部署
社区自动化将拓扑部署写成了脚本,可以一键进行部署:
1、启动VM虚拟机,脚本部署完成后可以通过ansible ping模块验证虚机是否启动:
./testbed-cli.sh -m veos_vtb -n 4 start-vms server_1 password.txt
验证指令:ansible -m ping -i veos_vtb server_1 -u root -k 默认密码:123456
2、部署t0拓扑
./testbed-cli.sh -t vtestbed.yaml -m veos_vtb add-topo vms-kvm-t0 password.txt
3、启动sonic vs
./testbed-cli.sh -t vtestbed.yaml -m veos_vtb -k vsonic add-topo vms-kvm-t0 password.txt
4、初始化SONIC配置
./testbed-cli.sh -t vtestbed.yaml -m veos_vtb deploy-mg vms-kvm-t0 veos_vtb password.txt
至此,基于KVM的虚拟机testbed就搭建完成了,可以进行环境检查看能否通过用户名与密码登录被测交换机设备,检查接口状态与bgp邻居关系等,若环境无问题,就可以运行pytest执行自动化脚本用例了!