- Enhanced orchestration
- Установка VyOS
- Начальная настройка VyOS
- Настройка и тестирование VyOS(Virtio)
- Настройка и тестирование VyOS(SR-IOV)
В первой части я делал общий обзор функционала и принципов работы NFX250, а так же проводил тест производительности JCP.
Теперь настало время использовать NFX по назначению и запустить виртуальный роутер.
Из доступных open source проектов, которые можно использовать в качестве роутера, я выбрал VyOS. Так же можно попробовать FRR.
Enhanced-orchestration и hugepages
В тесте используется архитектура V2 и версия софта 18.4R3.
Для развертывания виртуалок из JDM нужно включить функционал enhanced-orchestration и hugepages.
При этом придется удалить все интерфейсы и перезагрузить JDM. Понадобится доступ через консоль.
На моем тестовом NFX250 всего 16Gb памяти. Для корректной работы JCP, JDM и гипервизора необходимо 6-8 Gb памяти. Значит, можем выделить 8Gb на пользовательские виртуалки.
{master:0}[edit]
root@jdm# set system services enhanced-orchestration
root@jdm# set system memory hugepages page-size 1024 page-count 8
## Warning: bridges stanza not allowed if system services enhanced-orchestration is configured
## Warning: interface stanza not allowed if system services enhanced-orchestration is configured
## Warning: route stanza not allowed if system services enhanced-orchestration is configured
root@jdm# delete interface eth0br
root@jdm# delete route
root@jdm# delete interface jmgmt0
root@jdm# delete apply-groups 1604-config
root@jdm# delete groups 1604-config
{master:0}[edit]
root@jdm# commit and-quit
commit complete
root@jdm> request system reboot
Reboot the system ? [yes,no] (no) yes
System reboot operation started, please wait...
После перезагрузки настраиваю заново менеджмент:
{master:0}[edit]
root@jdm# set interfaces jmgmt0 unit 0 family inet dhcp
root@jdm# commit
commit complete
Установка VyOS
После включения enhanced-orchestration становится доступен функционал настройки VNF из JDM. Фактически это просто создание XML из Junos оболочки.
VyOS версии Rolling доступен для свободного скачивания на официальном сайте.
{master:0}
root@jdm> start shell
jdm:~#cd /var/third-party
jdm:/var/third-party# wget https://downloads.vyos.io/rolling/current/amd64/vyos-rolling-latest.iso
Создаю HDD диск для установки VyOS:
jdm:/var/third-party# qemu-img create -f qcow2 vyos.qcow2 2G
Formatting 'vyos.qcow2', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off
Конфиг для VyOS VNF:
[edit]
virtual-network-functions vyos {
image {
/var/third-party/vyos.qcow2;
image-type qcow2;
bus-type virtio;
}
virtual-cpu {
count 6;
features {
hardware-virtualization;
}
}
no-default-interfaces;
interfaces eth0 {
management internal;
}
memory {
size 4096000;
features {
hugepages {
page-size 1024;
}
}
}
storage sdb {
type {
cdrom {
source {
file /var/third-party/images/vyos-rolling-latest.iso;
}
}
}
}
}
В Junos 18.4R3.3 я не нашел функционала для установки cd-rom в качестве загрузочного диска. Добавляю строчку с опцией загрузки с cd-rom с помощью virsh:
jdm:~#virsh edit vyos <os> <type arch='x86_64' machine='pc-i440fx-1.7'>hvm</type> + <boot dev='cdrom'/> <boot dev='hd'/> <smbios mode='sysinfo'/> </os>
Перезапускаю виртуалку, что бы загрузиться с iso образа.
jdm:~# virsh destroy vyos
Domain vyos destroyed
jdm:~# virsh start vyos
Domain vyos started
Теперь подключаюсь virsh консолью и устанавливаю VyOS. После установки нужно выключить виртуалку для редактирования опций загрузки:
jdm:~# virsh console vyos
#boot sequence omitted
vyos login: vyos
Password:
Linux vyos 5.10.14-amd64-vyos #1 SMP Tue Feb 16 09:38:59 UTC 2021 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
vyos@vyos:~$ install image
Welcome to the VyOS install program. This script
will walk you through the process of installing the
VyOS image to a local hard drive.
Would you like to continue? (Yes/No) [Yes]:
Probing drives: OK
Looking for pre-existing RAID groups...none found.
The VyOS image will require a minimum 2000MB root.
Would you like me to try to partition a drive automatically
or would you rather partition it manually with parted? If
you have already setup your partitions, you may skip this step
Partition (Auto/Parted/Skip) [Auto]:
I found the following drives on your system:
vda 2147MB
Install the image on? [vda]:
This will destroy all data on /dev/vda.
Continue? (Yes/No) [No]: yes
How big of a root partition should I create? (2000MB - 2147MB) [2147]MB:
Creating filesystem on /dev/vda1: OK
Done!
Mounting /dev/vda1...
What would you like to name this image? [1.4-rolling-202102162107]:
OK. This image will be named: 1.4-rolling-202102162107
Copying squashfs image...
Copying kernel and initrd images...
Done!
I found the following configuration files:
/opt/vyatta/etc/config/config.boot
/opt/vyatta/etc/config.boot.default
Which one should I copy to vda? [/opt/vyatta/etc/config/config.boot]:
Copying /opt/vyatta/etc/config/config.boot to vda.
Enter password for administrator account
Enter password for user 'vyos':
Retype password for user 'vyos':
I need to install the GRUB boot loader.
I found the following drives on your system:
vda 2147MB
Which drive should GRUB modify the boot partition on? [vda]:
Setting up grub: OK
Done!
vyos@vyos:~$ poweroff
Are you sure you want to poweroff this system? [y/N] y
[ 298.141695] systemd-shutdown[1]: Failed to parse (null): No such file or directory
[ 298.142995] systemd-shutdown[1]: Failed to deactivate swaps: No such file or directory
[ 298.148160] [1960]: Failed to unmount /usr/lib/live/mount/medium: Device or resource busy
[ 298.208396] reboot: Power down
error: One or more references were leaked after disconnect from the hypervisor
Возвращаю порядок загрузки в исходное положение и запускаю VyOS:
jdm:~#virsh edit vyos <os> <type arch='x86_64' machine='pc-i440fx-1.7'>hvm</type> - <boot dev='cdrom'/> <boot dev='hd'/> <smbios mode='sysinfo'/> </os> jdm:~#virsh start vyos
На этом установка VyOS завершена, прейдем к настройке и тестированию.
Начальная настройка VyOS
Начну с настройки менеджмента.
При настройке VNF для VyOS был выделен только один интерфейс — management internal. Он отвечает за связность с JDM.
Для корректной работы, на этом интерфейсе нужно включить DHCP клиент.
Так же, добавлю интерфейс для менеджмента, который подключен к бриджу out-of-band управления .
{master:0}
root@jdm> configure
root@jdm# set virtual-network-functions vyos interfaces eth1 management out-of-band
root@jdm# commit and-quit
commit complete
root@jdm> request virtual-network-functions console vyos
Connected to domain vyos
Escape character is ^]
vyos login: vyos
Password:
Linux vyos 5.10.14-amd64-vyos #1 SMP Tue Feb 16 09:38:59 UTC 2021 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
vyos@vyos# set interfaces ethernet eth0 address dhcp
vyos@vyos# set interfaces ethernet eth1 address dhcp
vyos@vyos# set service ssh
vyos@vyos# commit
Теперь можно использовать JDM для управления VyOS, а так же подключиться по SSH из сети менджмента.
root@jdm> show virtual-network-functions
ID Name State Liveliness
--------------------------------------------------------------------------------
6 vyos Running alive
1 vjunos0 Running alive
10216 jdm Running alive
root@jdm> ssh vyos@vyos
Welcome to VyOS
vyos@vyos's password:
Linux vyos 5.10.14-amd64-vyos #1 SMP Tue Feb 16 09:38:59 UTC 2021 x86_64
vyos@vyos:~$
Виртуалка доступна из сети менеджмента, теперь нужно настроить связь в внешним миром.
На NFX250 это можно сделать двумя способами:
-Virtio (service chaining using vlans)
-SR-IOV ( Service Chaining with SR-IOV (Single Root Input/Output Virtualization)).
Настройка и тестирование VyOS(Virtio)
Начну тестирование с варианта, в котором используются Vitrio интерфейсы.
Virtio самый простой и быстрый вариант для развертывания сервисов. Однако, при этом вся нагрузка ложится на гипервизор и зависит, в основном, от производительности CPU.
Схема лабы для тестирования VyOS и virtio:
Для связи с внешним миром требуется настроить JCP:
{master:0}[edit]
root#set vlans vlan100 vlan-id 100
root#set vlans vlan200 vlan-id 200
root#set interfaces xe-0/0/12 unit 0 family ethernet-switching interface-mode access
root#set interfaces xe-0/0/12 unit 0 family ethernet-switching vlan members vlan100
root#set interfaces xe-0/0/13 unit 0 family ethernet-switching interface-mode access
root#set interfaces xe-0/0/13 unit 0 family ethernet-switching vlan members vlan200
root#set interfaces sxe-0/0/0.0 family ethernet-switching interface-mode trunk
root#set interfaces sxe-0/0/0.0 family ethernet-switching vlan members vlan100
root#set interfaces sxe-0/0/1.0 family ethernet-switching interface-mode trunk
root#set interfaces sxe-0/0/1.0 family ethernet-switching vlan members vlan200
root# commit
commit complete
Вся конфигурация, которая касается связности виртуальных машин, выполняется в JDM.
Нужно добавить интерфейсы для VyOS и создать вланы на гипервизоре:
{master:0}[edit]
root@jdm#set host-os vlans vlan100 vlan-id 100
root@jdm#set host-os vlans vlan200 vlan-id 200
root@jdm#set virtual-network-functions vyos interfaces eth3 mapping vlan mode access
root@jdm#set virtual-network-functions vyos interfaces eth3 mapping vlan members vlan100
root@jdm#set virtual-network-functions vyos interfaces eth4 mapping vlan mode access
root@jdm#set virtual-network-functions vyos interfaces eth4 mapping vlan members vlan200
root@jdm# commit
commit complete
Конфиг VyOS:
interfaces {
ethernet eth0 {
address dhcp
description internal Management
hw-id b0:33:a6:33:f3:cf
}
ethernet eth1 {
address dhcp
description OOB Management
hw-id b0:33:a6:33:f3:d0
}
ethernet eth2 {
address 172.16.23.2/30
description BGP-to-ext-network
hw-id b0:33:a6:33:f3:d2
}
ethernet eth3 {
address 10.223.0.1/24
description S2-test-server
hw-id b0:33:a6:33:f3:d3
}
}
protocols {
bgp 65234 {
address-family {
ipv4-unicast {
network 10.223.0.0/24 {
}
}
}
neighbor 172.16.23.1 {
address-family {
ipv4-unicast {
route-map {
export export
}
}
}
remote-as 65230
}
}
}
Тест iperf3 на интерфейсах virtio:
[root@s2]# iperf3 -c 10.222.0.2 -p 5201
Connecting to host 10.222.0.2, port 5201
[ 4] local 10.223.0.2 port 58654 connected to 10.222.0.2 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 340 MBytes 2.85 Gbits/sec 57 331 KBytes
#######OMMITED############
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 3.53 GBytes 3.03 Gbits/sec 918 sender
[ 4] 0.00-10.00 sec 3.53 GBytes 3.03 Gbits/sec receiver
iperf Done.
[root@s2]# iperf3 -c 10.222.0.2 -p 5201 -R
Connecting to host 10.222.0.2, port 5201
Reverse mode, remote host 10.222.0.2 is sending
[ 4] local 10.223.0.2 port 58662 connected to 10.222.0.2port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 330 MBytes 2.77 Gbits/sec
#######OMMITED############
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 2.98 GBytes 2.56 Gbits/sec 637 sender
[ 4] 0.00-10.00 sec 2.98 GBytes 2.56 Gbits/sec receiver
Результат на Virtio:
2.56Gbit/3.03Gbit
Неплохо.
Попробуем тоже самое с SR-IOV.
Настройка и тестирование VyOS(SR-IOV)
С помощью SR-IOV предоставляется общий доступ к ресурсам PCI-Experss. Физический интерфейс делится на определенное количество VF (Virtual Functions), каждый из которых можно подключить к виртуальной машине. В зависимости от модели оборудования, доступно разное количество VF.
SR-IOV меньше нагружает CPU и обеспечивает меньшее время отклика.
Схема лабы для тестирования VyOS и SR-IOV:
Меняю конфигурацию портов виртуальной машины на SR-IOV:
root@jdm#delete virtual-network-functions vyos interfaces eth3 mapping vlan
root@jdm#delete virtual-network-functions vyos interfaces eth4 mapping vlan
root@jdm#set virtual-network-functions vyos interfaces eth3 mapping hsxe0 virtual-function vlan-id 100
root@jdm#set virtual-network-functions vyos interfaces eth4 mapping hsxe1 virtual-function vlan-id 200
root@jdm# commit
commit complete
Тест iperf3 на интерфейсах SR-IOV.
[root@s2]# iperf3 -c 10.222.0.2 -p 5201 -R
Connecting to host 10.222.0.2, port 5201
Reverse mode, remote host 10.222.0.2 is sending
[ 4] local 10.223.0.2 port 58626 connected to 10.222.0.2 port 5201
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 458 MBytes 3.84 Gbits/sec
#######OMMITED############
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 4.53 GBytes 3.89 Gbits/sec 312 sender
[ 4] 0.00-10.00 sec 4.53 GBytes 3.89 Gbits/sec receiver
iperf Done.
[root@s2]# iperf3 -c 10.222.0.2 -p 5201
Connecting to host 10.222.0.2, port 5201
[ 4] local 10.223.0.2 port 58630 connected to 10.222.0.2 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 513 MBytes 4.30 Gbits/sec 54 645 KBytes
#######OMMITED############
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-10.00 sec 5.08 GBytes 4.37 Gbits/sec 186 sender
[ 4] 0.00-10.00 sec 5.08 GBytes 4.37 Gbits/sec receiver
iperf Done.
Результат на SR-IOV:
3.89Gbit/4.37Gbit
Значительно лучше.
Напомню, что тест проводится на NFX250-ATT-LS1, который является самой младшей моделью в линейке NFX250.
По результатам теста можно сказать, что Juniper выпустил интересный продукт, на базе которого можно быстро развернуть практически любой сервис. На базе старших моделей можно ожидать значительный прирост производительности.