end to end network func - juancamilocc/virtual_resources GitHub Wiki

End-to-End for Automated Deployment of Network Functions

En esta práctica obtendrá una breve introducción a la creación de maquinas virtuales (VM) y consumo de servicios sobre el tenant de OpenStack de la nube nativa de ID:Tolu. Se crean dos VM, la primera llamada Bastión que contiene Node.Agent y tiene como función principal saltar entre los recursos, mientras que la segunda VM contiene los servicios de Prometheus y Grafana.

A continuación, se muestra el escenario general.


Escenario general de la practica

  • Node-exporter: Utilizado para generar métricas de consumo en tiempo real de los recursos virtuales de la VM Bastión.

  • Prometheus: Utilizado para obtener las métricas generadas por el node.agent de la VM Bastión de forma periódica en el tiempo.

  • Grafana: Utilizado para visualizar de forma grafica las métricas en tiempo real de la VM Bastión.


A partir de la descripción del escenario general, se realiza el proceso paso a paso de instalación y puesta en marcha de la práctica.

Primera parte, Creación de VM Bastión e instalación de node-exporter

Como primer paso es necesario logearse, una vez dentro del tenant de OpenStack, dirigirse a la parte izquierda en la opción Instancias y posteriormente a Lanzar instancia

Proceso de creación de VM

Allí se le da las caracteristicas a la VM, inicialmente en Detalles se le asigna el nombre a modo de ejemplo "uq-training-colorado-bastion" con una descripción opcional, en Origen se elige la versión del sistema operartivo, en este caso ubuntu server 20.04 focal.

Selección de sistema operativo

Paso seguido en Sabor se le asigna los recursos m2.small que consta de 1 VCPU, 2 GB de RAM y 20 GB de disco.

Asignación de recursos

En Redes se selecciona la opción de internal-qts.

Selección de red

Por último en la opción de Configuración se le indica la contraseña para tener acceso a la VM por medio de ssh y que esta nunca expire.

#cloud-config
password: <contraseña> # contraseña de acceso ssh
chpasswd: { expire: False } # indica que la contraseña no va a expirar
ssh_pwauth: True # el protocolo siempre esta activo

Para finalizar la creación de la VM hacemos clic en la opción Ejecutar Instancia.

Una vez la VM este creada, se le debe asignar una ip flotante con el proposito de darle visibilidad al host de los recursos del Bastion por medio del protocolo ssh. En la sección actions se selecciona la opción de asignar ip flotante.

Asignacion de ip flotante

Ya con la ip flotante asignada, se abre un terminal y se accede a la VM Bastión por medio de ssh.

ssh ubuntu@<ip_flotante_VM_Bastion>

Como paso inicial en la terminal, se le debe dar el nombre al host de la Bastión de la siguiente forma.

sudo nano /etc/hosts # modifica el archivo hosts

Una vez abierto el sript se coloca el nombre asignado a la Bastión al lado del localhost de la siguiente forma.

127.0.0.1 localhost <uq-training-colorado-bastion>

Despues se procede a instalar el node-exporter.

wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz 

tar xvfz node_exporter-1.4.0.linux-amd64.tar.gz 

cd node_exporter-1.4.0.linux-amd64 

./node_exporter # ejecuta el node-exporter

En el siguiente link encontrara toda la información referente a la instalación de node-exporter.

Una vez este corriendo el node-exporter, hacemos Ctrl+z para resumir el servicio, se ejecuta el comando bg para enviarlo al background y por último disown para desasociarlo de mi sesion, de modo que se siga ejecutando en caso de cerrar la terminal o salir del servidor.

Después se valida que se esten generando las métricas de los recursos, tal como se indica en la documentación.

curl http://localhost:9100/metrics

Para validar que puerto esta utilizando y que el servicio se esta ejecutando correctamente se debe utilizar los siguientes comandos.

sudo apt update
sudo apt install net-tools
sudo netstat -tulpn | grep LISTEN

NOTA: Debería verse el servicio ejecutandose por el puerto 9100.

Segunda parte, instalación de Docker, Prometheus y Grafana.

Se debe crear una VM adicional, siguiendo los mismos pasos del primer punto, con las caracteristicas correspondientes al Sabor m2.medium, a modo de ejemplo con nombre de "uq-training-colorado-prometheus-grafana" para esta práctica.

Feature Value
OS Used Ubuntu 20.04
CPU 4
RAM (GB) 2
Disk 30

Para acceder a la VM de promteheus-grafana se debe hacer desde la terminal del bastión de la siguiente forma.

ssh ubuntu@<ip VM prometheus-grafana>

NOTA: En este caso no se cuenta con ip flotante por lo que es necesario acceder desde el Bastión, el cual sirve como salto a la interfaz de la VM prometheus-grafana.

Una vez dentro de la VM prometheus-grafana, es necesario tambien asignarle el nombre de host.

sudo nano /etc/hosts # modifica el archivo hosts

Dentro del script hacer la siguiente modificación.

127.0.0.1 localhost <uq-training-colorado-prometheus-grafana>

Después se procede a instalar Docker siguiendo su documentacion.

sudo apt-get update

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Una vez instalado Docker, se ejecuta el siguiente comando para evitar el uso de sudo y hacer más sencillo su uso.

sudo usermod -aG docker $USER

NOTA: Para que el anterior cambio tenga efecto es necesario reiniciar la sesion.

A continuación se crea un archivo prometheus.yml que va a contener la configuración del servidor de Prometheus.

sudo mkdir -p /etc/prometheus
sudo touch /etc/prometheus/prometheus.yml
sudo nano /etc/prometheus/prometheus.yml

El script debe contener lo siguiente.

global:
  scrape_interval: 15s

scrape_configs:
- job_name: node
  static_configs:
  - targets: ['<IP_BASTION>:9100'] #ip del Bastion (192.168.50.X), pero no la flotante

NOTA: Al ser un archivo .yml es de vital importancia el manejo de los espacios.

Seguido lo anterior, se ejecuta el contenedor del prometheus usando el siguiente comando.

docker run -d --name=prometheus -p 9090:9090 -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

Se valida que el contenedor este corriendo.

docker ps -a

Para verificar que el Target este activo es necesario implementar un tunel ssh por medio del siguiente comando.

ssh ubuntu@<IP_FLOTANTE_BASTION> -L 9091:<IP_VM_PROMETHEUS_GRAFANA>:9090

NOTA: En el anterior comando debe realizarse sobre una terminal en limpio, que este fuera tanto de la VM Bastión como de la prometheus-grafana, es decir sobre la terminal de mi computador local, ya que le estamos indicando a nuestro computador que traiga el servicio del puerto 9090 de la VM Bastión para esucharlo localmente por mi puerto 9091 en mi navegador.

Para mas información sobre tuneles ssh acceder a este link.

Seguido esto, ingresar al navegador web por medio de: http://localhost:9091

Dentro de la interfaz de prometheus, hacer clic en Status seguido de Targets y comprobar que la VM Bastión este en modo UP.

Status - Targets

Targets UP

Por último se corre grafana, para ello se sigue el siguiente comando ejecutando el contenedor.

docker run -d --name=grafana -p 3000:3000 grafana/grafana

para verficar que esta corriendo se ejecuta docker ps -a

Para acceder a la interfaz de grafana también es necesario la creación de un tunel ssh, de la siguiente forma.

ssh ubuntu@<IP_FLOTANTE_BASTION> -L 3001:<IP_VM_PROMETHEUS_GRAFANA>:3000

Despues de ello, se accede al navegador web utilizando http://localhost:3001

Interfaz grafana

NOTA: Las credenciales por defecto son admin tanto para el usuario como la contraseña, una vez ingresadas las credenciales le pedirá cambiar la contraseña, asigne la contraseña de su preferencia.

Una vez dentro de la interfaz, diríjase a la opción de configuración y después a Data sources, allí deberá seleccionar el servicio de prometheus el cual se esta ejecutando sobre el puerto 9090 y posteriormente hacer clic en save and test.

Data soruces

Como paso final se le debe asignar un dashboard a grafana, para ello nos dirigimos a la sección de Import allí se le asigna el ID 1860.

Import dashboard grafana

Para mas información sobre dashboards en grafana consultar el siguiente enlace.

Y finalmente se pueden observar las métricas de consumo en tiempo real de la VM Bastión.

Metricas en tiempo real con grafana

⚠️ **GitHub.com Fallback** ⚠️