el 03-20-2024 10:55 PM
Introducción
Este documento describe como implementar iperf sobre un contenedor Docker en plataformas IOS-XR corriendo version eXR (x86-64).
IPERF es una herramienta de pruebas de red que mide el desempeño generando y analizando flujos de TCP y UDP, entre otras cosas.
En este articulo te queremos mostrar como instalar iperf, sobre un contenedor Docker en tu router eXR.
Colaboración: Daniel Gomez y Adán De la luz Cisco TAC Engineers.
Antes de proceder con los pasos señalados en este articulo, por favor, consulte los siguientes prerequisitos:
La informacion in este documento, esta basada en el siguiente software y hardware:
La informacion in este documento fue creada en dispositivos de laboratorio. Todos los dispositivos usados en este docuemento, fueron iniciados desde cero, con configuracion por defecto.
Este documento puede ser usado con hardware y software
La tecnología Docker revoluciona el mundo de la implementación de software y la contenedorización. En esencia, Docker simplifica la gestión de aplicaciones al encapsular las aplicaciones y sus dependencias en contenedores ligeros y portátiles.
Estos contenedores pueden ejecutarse de manera consistente en diversos entornos, asegurando que las aplicaciones se comporten de manera predecible, independientemente de la infraestructura subyacente. Docker logra esto mediante el uso de imágenes de Docker, que sirven como plantillas para los contenedores. Estas imágenes no solo son apilables y versionables, sino que también se distribuyen y comparten fácilmente. Docker Hub, un prominente repositorio basado en la nube, juega un papel fundamental al albergar una extensa biblioteca de imágenes de Docker. Desarrolladores y administradores de sistemas aprovechan Docker Hub para descubrir, descargar y colaborar en imágenes preconstruidas, acelerando el proceso de desarrollo e implementación. Para crear estas imágenes de Docker, se emplean Dockerfiles, que son archivos de texto simples que contienen una serie de instrucciones para configurar el entorno contenedorizado y la aplicación. Los Dockerfiles permiten a los usuarios crear imágenes de Docker personalizadas adaptadas a sus necesidades específicas, proporcionando flexibilidad y eficiencia en el mundo de la contenedorización
Asegurate de tener Docker instalado en tu maquina de desarrollo. Consulta la documentación de la instalacion de Dockers para instrucciones especificas en tu sistema de operación.
[tester@devtestenv ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux release 9.1 (Plow)
[tester@devtestenv ~]$ docker --version
Docker version 24.0.5, build ced0996
1. ingresa al CLI de tu equipo eXR.
RP/0/RP0/CPU0:NCS-5504-B#show version | i Version
Cisco IOS XR Software, Version 7.8.2
Version : 7.8.2
2. Checa el estado del Serivicio Docker, corriendo el siguiente commando:
RP/0/RP0/CPU0:NCS-5504-B#bash
[NCS-5504-B:~]$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/docker.service; disabled; vendor preset: enabled)
Active: inactive (dead) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
[NCS-5504-B:~]$ systemctl start docker
[NCS-5504-B:~]$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/docker.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2023-09-20 00:09:13 JST; 2s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 39980 (dockerd)
Tasks: 35 (limit: 4915)
Memory: 196.3M
CGroup: /system.slice/libvirtd.service/system.slice/docker.service
├─39980 /usr/bin/dockerd --cgroup-parent=/machine/tp_app.partition/docker --bridge=none -H=unix:///misc/app_host/docker.sock --pidfile=/misc/app_host/docker.pid --data-root=/misc/app_host/docker --iptables=fa>
└─40039 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
Sep 20 00:09:13 NCS-5504-B exr_systemd_docker_start.sh[39980]: time="2023-09-20T00:09:13.572466976+09:00" level=warning msg="Your kernel does not support cgroup blkio throttle.read_bps_device"
Sep 20 00:09:13 NCS-5504-B exr_systemd_docker_start.sh[39980]: time="2023-09-20T00:09:13.572474723+09:00" level=warning msg="Your kernel does not support cgroup blkio throttle.write_bps_device"
Sep 20 00:09:13 NCS-5504-B exr_systemd_docker_start.sh[39980]: time="2023-09-20T00:09:13.572482249+09:00" level=warning msg="Your kernel does not support cgroup blkio throttle.read_iops_device"
Sep 20 00:09:13 NCS-5504-B exr_systemd_docker_start.sh[39980]: time="2023-09-20T00:09:13.572489666+09:00" level=warning msg="Your kernel does not support cgroup blkio throttle.write_iops_device"
Sep 20 00:09:13 NCS-5504-B exr_systemd_docker_start.sh[39980]: time="2023-09-20T00:09:13.574029686+09:00" level=info msg="Loading containers: start."
Sep 20 00:09:13 NCS-5504-B exr_systemd_docker_start.sh[39980]: time="2023-09-20T00:09:13.577648355+09:00" level=info msg="Loading containers: done."
Sep 20 00:09:13 NCS-5504-B exr_systemd_docker_start.sh[39980]: time="2023-09-20T00:09:13.669041669+09:00" level=info msg="Docker daemon" commit=afacb8b7f0d8d4f9d2a8e8736e9c993e672b41f3 graphdriver(s)=overlay2 version=19.0>
Sep 20 00:09:13 NCS-5504-B exr_systemd_docker_start.sh[39980]: time="2023-09-20T00:09:13.669295662+09:00" level=info msg="Daemon has completed initialization"
Sep 20 00:09:13 NCS-5504-B exr_systemd_docker_start.sh[39980]: time="2023-09-20T00:09:13.685182808+09:00" level=info msg="API listen on /misc/app_host/docker.sock"
Sep 20 00:09:13 NCS-5504-B systemd[1]: Started Docker Application Container Engine.
2. Para verificar que la imagen del contenedor Docker ha sido importada al eXR, use el siguiente comando:
RP/0/RP0/CPU0:NCS-5504-B#bash
[NCS-5504-B:~]$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
Las imágenes de Docker pueden diseñarse para ejecutarse en múltiples arquitecturas, lo cual es crucial para dar soporte a diversos entornos de hardware. Cuando descargas una imagen multiplataforma desde un registro de Docker, como Docker Hub, la imagen puede contener múltiples capas específicas de arquitectura, y Docker se encarga de seleccionar las capas apropiadas basadas en la arquitectura de tu sistema, así que si tu entorno de desarrollo es x86-64, la imagen heredará la arquitectura.
[tester@devtestenv ~]$ docker search iperf
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
networkstatic/iperf3 IPerf3 Docker Build for Network Performance … 196 [OK] <<<<<<<<<<<<<
[tester@devtestenv ~]$ docker pull networkstatic/iperf3
Using default tag: latest
latest: Pulling from networkstatic/iperf3
1d5252f66ea9: Pull complete
832b3072ce67: Pull complete
Digest: sha256:79afcd17d056897a7a1d5948b32d9557ca03c2e52a0bbe759388a7c1aa807851
Status: Downloaded newer image for networkstatic/iperf3:latest
docker.io/networkstatic/iperf3:latest
[tester@devtestenv ~]$ docker inspect docker.io/networkstatic/iperf3:latest | grep "Architecture"
"Architecture": "amd64",
[tester@devtestenv ~]$ docker save -o ubuntu-iperf-image.tar networkstatic/iperf3
[tester@devtestenv ~]$ ll ubuntu-iperf-image.tar
-rw-------. 1 tester tester 85332992 Sep 19 11:28 ubuntu-iperf-image.tar
[tester@devtestenv ~]$scp ./ubuntu-iperf-image.tar dangome2@172.18.104.14:/harddisk:
ubuntu-iperf-image.tar 100% 81MB 5.8MB/s 00:13 $
1. Accesa a tu dispositivo eXR via CLI.
RP/0/RP0/CPU0:NCS-5504-B#dir harddisk:ubuntu-iperf-image.tar
Directory of harddisk:ubuntu-iperf-image.tar
162 -rw-------. 1 3866624 Sep 20 00:39 ubuntu-iperf-image.tar
35944064 kbytes total (15782772 kbytes free)
2. Importa la imagen del Docker de tu archivo .tar transferido, ejecutando el siguente command:
RP/0/RP0/CPU0:NCS-5504-B#bash
Wed Sep 20 00:48:32.672 JST
[NCS-5504-B:~]$ docker load -i /misc/disk1/ubuntu-iperf-image.tar
8ce178ff9f34: Loading layer [==================================================>] 84.03MB/84.03MB
1b9aa83ebcfe: Loading layer [==================================================>] 1.291MB/1.291MB
Loaded image: ubuntu-iperf-image:latest
[NCS-5504-B:~]$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-iperf-image latest f2633a30407f 15 mins ago 81.8MB
iPerf CLIENT
============
RP/0/RP0/CPU0:NCS-5504-B#bash
[NCS-5504-B:~]$ docker run --net host --rm -t ubuntu-iperf-image -c 10.222.252.40
Connecting to host 10.222.252.40, port 5201
[ 5] local 22.22.22.22 port 62036 connected to 10.222.252.40 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 5.63 MBytes 47.3 Mbits/sec 216 1.40 KBytes
[ 5] 1.00-2.00 sec 2.45 MBytes 20.6 Mbits/sec 141 2.79 KBytes
[ 5] 2.00-3.00 sec 2.95 MBytes 24.7 Mbits/sec 155 25.1 KBytes
[ 5] 3.00-4.00 sec 2.95 MBytes 24.7 Mbits/sec 144 8.38 KBytes
[ 5] 4.00-5.00 sec 2.70 MBytes 22.7 Mbits/sec 141 6.98 KBytes
[ 5] 5.00-6.00 sec 2.70 MBytes 22.7 Mbits/sec 137 4.19 KBytes
[ 5] 6.00-7.00 sec 2.45 MBytes 20.6 Mbits/sec 130 2.79 KBytes
[ 5] 7.00-8.00 sec 2.70 MBytes 22.7 Mbits/sec 131 6.98 KBytes
[ 5] 8.00-9.00 sec 2.95 MBytes 24.7 Mbits/sec 128 47.5 KBytes
[ 5] 9.00-10.00 sec 2.95 MBytes 24.7 Mbits/sec 153 14.0 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 30.4 MBytes 25.5 Mbits/sec 1476 sender
[ 5] 0.00-10.00 sec 29.9 MBytes 25.1 Mbits/sec receiver
iperf Done.<<<<<<<
2. Analizar el resultado de la prueba y medida de IPER puede ayudar a idetificar cuellos de botella en la red
iPerf SERVER
=============
[NCS-5504-A:/]$ docker run -it --rm --net host --name iperf3-server -p 5201:5201 ubuntu-iperf-image -s
WARNING: Published ports are discarded when using host network mode
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 22.22.22.22, port 62034
[ 5] local 10.222.252.40 port 5201 connected to 22.22.22.22 port 62036
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 5.08 MBytes 42.6 Mbits/sec
[ 5] 1.00-2.00 sec 2.63 MBytes 22.1 Mbits/sec
[ 5] 2.00-3.00 sec 2.71 MBytes 22.8 Mbits/sec
[ 5] 3.00-4.00 sec 3.16 MBytes 26.5 Mbits/sec
[ 5] 4.00-5.00 sec 2.60 MBytes 21.8 Mbits/sec
[ 5] 5.00-6.00 sec 2.62 MBytes 22.0 Mbits/sec
[ 5] 6.00-7.00 sec 2.59 MBytes 21.7 Mbits/sec
[ 5] 7.00-8.00 sec 2.59 MBytes 21.7 Mbits/sec
[ 5] 8.00-9.00 sec 3.09 MBytes 25.9 Mbits/sec
[ 5] 9.00-10.00 sec 2.80 MBytes 23.5 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 29.9 MBytes 25.1 Mbits/sec receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
1. Recomendamos remover la imagne de Docker de los equipos eXR con el siguiente comando:
[NCS-5504-B:~]$ docker image rm ubuntu-iperf-image
Untagged: networkstatic/iperf3:latest
Deleted: sha256:f2633a30407fcde63ffd23a4a0ba4bb8c7551c3e2b2d75b753d8cec4b5cf1452
Deleted: sha256:aec414c3206c046e08148eb96fd958a54d0fc68732464385751830e47f924795
Deleted: sha256:8ce178ff9f343a37169f68dd0df03099524afb71a879551c5f17e493c7b1d3ec
2. Puedes desactivar el "Docker daemon" para ahorrar recursos de memoria en tu eXR.
[NCS-5504-B:~]$ systemctl stop docker
[NCS-5504-B:~]$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/docker.service; disabled; vendor preset: enabled)
Active: inactive (dead)
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
En este artículo, exploramos cómo utilizar la herramienta iperf dentro de un dispositivo eXR utilizando el contenedor Docker integrado. Al aprovechar Docker, puedes realizar pruebas de rendimiento de red y solución de problemas de manera conveniente directamente desde tu dispositivo eXR. Cubrimos la configuración del entorno de desarrollo, la verificación del estado de Docker, la importación y ejecución de la imagen de Docker de iperf, la ejecución de pruebas de iperf y la limpieza del entorno. Siguiendo estos pasos, puedes obtener información valiosa sobre el rendimiento de tu red y resolver cualquier problema relacionado con el rendimiento de manera efectiva.
Ahora que has aprendido a usar iperf con Docker en un dispositivo eXR, puedes mejorar aún más tus habilidades de prueba de red explorando características avanzadas de iperf y experimentando con diferentes escenarios de prueba. Además, considera explorar otras herramientas de red basadas en Docker, como implementar un contenedor tcpdump o configurar un TIG telemetry stack.
¡Conecte con otros expertos de Cisco y del mundo! Encuentre soluciones a sus problemas técnicos o comerciales, y aprenda compartiendo experiencias.
Queremos que su experiencia sea grata, le compartimos algunos links que le ayudarán a familiarizarse con la Comunidad de Cisco:
Navegue y encuentre contenido personalizado de la comunidad