end to end network func - juancamilocc/virtual_resources GitHub Wiki
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.
-
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.
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
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.
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.
En Redes se selecciona la opción de internal-qts.
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.
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.
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.
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
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.
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.
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.