cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 
cancel
729
Visitas
0
ÚTIL
0
Comentarios
adelaluz
Cisco Employee
Cisco Employee


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.

Prerequisitos

Requerimientos

Antes de proceder con los pasos señalados en este articulo, por favor, consulte los siguientes prerequisitos:

  • Un ambiente de desarrollo con Docker instalado.
  • Conocimiento básico de trabajo con contenedores Docker.
  • Acceso a la interfaz de linea de consola (CLI)  del dispositivo eXR con los privilegios administrativos necesarios.
  • Estar familiarizado con conceptos de redes, tales como TCP y UDP.
  • Conocimiento de eXR(XR86-64) y su configuracion
  • Entender algunas técnicas de análisis y desempeño de red, como iperf. 

Componentes Usados

La informacion in este documento, esta basada en el siguiente software y hardware:

  • NCS-5504 running 7.8.2 eXR code version
  • NCS-5504 running 7.6.2 eXR code version
  • eXR built-in Docker version 19.03.8-ce

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. 

Productos relacionados

Este documento puede ser usado con hardware y software

  • Desde IOS-XR Release 6.1.1, Cisco introdujo soport para 64-bit Linux-based basado en IOS XR 
  • Cualquier plataforma corriendo eXR  (x86-64) tiene el Docker engine instalado para habilitar la creacion de contenedores.

Contexto

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

Configuración

Diagrama de red

adelaluz_0-1710449113212.png

 

Paso 1: Configurando el ambiente de desarrollo.

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

Paso 2: Verificando el estado del Docker container en eXR.

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

Paso 3: Iniciando contenedor Docker

1. Inicia el Docker en dispositivos corriendo eXR, con el siguiente comando:

[NCS-5504-B:~]$ systemctl start docker

Paso 4: Explorando la imagen del contenedor Docker.

1. Verifique el estado del Docker en su eXR con el siguiente commando:

[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

Paso 5: Cargando la imagen del contenedor Docker en el dispositivo eXR

1. Ubique la imagen Docker que soporta arquitectura amd64/x86-64 compatible con plataformas eXR.

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",

Paso 6: Exportando la imagen del contenedor Docker al dispositivo eXR

1. Exporte la imagen del Docker elegida a su maquina de desarrollo corriendo las siguientes lineas.

[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

Paso 7: Iniciando el cliente/servidor IPER dentro de contenedores Docker en un eXR

1. Transfiere la imagen iper-image.tar a tu dispositivo eXR, usando el método apropiado, por ejemplo SCP, SFTP.

[tester@devtestenv ~]$scp ./ubuntu-iperf-image.tar dangome2@172.18.104.14:/harddisk: 
ubuntu-iperf-image.tar                                                                                                                                                                        100%   81MB   5.8MB/s   00:13 $ 

Paso 8:Importando la imagen del Docker en eXR

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

Paso 9: Inicia el IPERF cliente/servidor

1. Inicia tu IPER en un contenedor en eXR, usando:

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
----------------------------------------------------------- 

Paso 10: Limpiando directorio.

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

Conclusiones:

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.

Siguientes pasos:

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.

Información relacionada

Vamos a comenzar

¡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: