Automatice la implementación de máquinas virtuales con Ansible: Automatización

Hacer manualmente cualquier tarea no es el enfoque más eficiente o consistente; lo mismo ocurre cuando se crean muchas máquinas virtuales (VM) en Red Hat Virtualización. Cuanto mayor sea su implementación de virtualización, más crítico se vuelve un proceso automatizado. Ansible es una gran solución precisamente para este escenario.

En el Primer artículo En esta serie, discuto el diseño y los requisitos previos para este proyecto de implementación de VM automatizado. el tercer articulo proporciona dos libros de estrategias de Ansible de muestra que puede usar para comenzar con sus implementaciones.

En este artículo, cubro el uso de plantillas y archivos de valores separados por comas (CSV) para administrar variables. Asegúrese de leer la primera parte primero y no olvide la tercera parte cuando termine este artículo.

Índice

automatizando

Modelo

Los playbooks de Ansible pueden implementar máquinas virtuales a partir de imágenes ISO. Sin embargo, uno de los objetivos de la automatización es acelerar el proceso de implementación y, de hecho, el uso de plantillas es más rápido. Si tiene máquinas virtuales existentes, puede crear plantillas a partir de ellas. También puede implementar una instalación barebone y usarla como base para su modelo.

Utilice los siguientes pasos para crear una plantilla a partir de una máquina virtual base.

  1. Implemente una máquina virtual instalando el sistema operativo manualmente desde una imagen ISO o descargando un qvache2 imagen de una fuente confiable. El uso de una imagen ISO le permite configurar la máquina virtual con aprovisionamiento de disco pesado.
  2. Poder en la máquina virtual.
  3. Instalar nube-init paquete.
  4. Sellar la máquina virtual para prepararlo para su implementación como plantilla.
  5. Apaga la máquina virtual.
  6. crear una plantilla (Cubro los modelos con más detalle a continuación).

Diseño

Ansible usa lenguaje declarativo para describir una configuración de sistema deseada. Antes de comenzar a codificar y escribir el libro de jugadas, debemos definir el estado final que debemos lograr y cómo podemos lograrlo.

En este artículo, quiero lograr los siguientes objetivos:

  1. Las máquinas virtuales se crean en base a archivos de configuración CSV, que se editan y modifican fácilmente.
  2. Los archivos de configuración CSV se definen adecuadamente para máquinas virtuales con diferentes casos de uso.
  3. Las máquinas virtuales se implementan mediante plantillas.
  4. Los privilegios apropiados se asignan a las máquinas virtuales recién creadas. A menudo, el equipo de infraestructura que crea la VM es diferente del equipo que administra la VM y la aplicación alojada, por lo que se deben establecer los privilegios adecuados.
  5. Administre cualquier configuración adicional de máquinas virtuales después de la implementación (es decir, instalación de paquetes, creación de cuentas, administración de servicios, etc.).

Estos objetivos se pueden lograr con tres juegos:

  1. Juegue para crear una máquina virtual y enciéndala con la API de RHVM.
  2. Juega para realizar la configuración posterior de una máquina virtual mediante SSH.
  3. Juegue para iterar sobre los dos juegos para crear varias máquinas virtuales si es necesario.

El primer y el segundo juego ejecutan la misma VM, por lo que se colocan en el mismo libro de jugadas. La tercera pieza recorre este libro de jugadas.

Los siguientes diagramas de flujo siguen los pasos para lograr los objetivos de una implementación de una sola máquina virtual.

Juega 1:

jugar 1

Juego 2:

jugar 2

El siguiente diagrama de flujo muestra los pasos para lograr los objetivos de muchas máquinas virtuales.

Juego 3:

jugar 3

Archivos variables

En este artículo se utilizan dos tipos de archivos de variables:

  • Variables de contraseña.
  • Variables relacionadas con la máquina virtual.

Echemos un vistazo más de cerca a los dos tipos de variables.

Variables de contraseña

A menudo se requiere información confidencial durante la automatización para realizar ciertas tareas. Las contraseñas son un ejemplo de este tipo de información. Las contraseñas deben guardarse de forma segura para evitar que se vean comprometidas. En el caso de Ansible, se utiliza Ansible Vault.

En este artículo, se necesita la siguiente información confidencial:

  1. Usuario y contraseña creados para la RHVM en nuestro ejemplo anterior. esta cuenta fue usuario-ansible y la contraseña era sombrero rojo.
  2. El nombre de usuario y la contraseña que serán definidos por un cloud-init script durante el inicio de la máquina virtual.

Crear un archivo de Ansible Vault

Cree un archivo de Ansible Vault para proteger la información de usuario y contraseña.

Primero, cree un nuevo archivo de Ansible Vault e ingrese una contraseña que se use para cifrar y descifrar este archivo. Utilizar el ansible-vault comando para lograr esto.

$ ansible-vault create passwords.yml
New Vault password:
Confirm New Vault password:

Luego ingrese las siguientes variables (en formato YAML).

username: [email protected]
password: redhat
cloud_init_username: root
cloud_init_password: redhat

El libro de jugadas que utiliza el archivo creado por ansible-vault lo descifra en tiempo de ejecución, por lo que se requiere la contraseña utilizada para cifrar el archivo. Existen diferentes métodos para proporcionar la contraseña. Las formas más fáciles son:

Método 1: Solicitar una contraseña.

# ansible-playbook --ask-vault-pass playbook.yml

Método 2: Guarda la contraseña en un archivo de texto. Coloque el archivo en un directorio seguro con los permisos adecuados para protegerlo. Haga que el libro de jugadas use este archivo durante la ejecución.

# ansible-playbook --vault-password-file /path/to/my/vault-password-file playbook.yml

Consulte este enlace para obtener más información sobre ansible-bóveda gestión de contraseñas.

Variables relacionadas con la máquina virtual

La mayoría de las variables necesarias para la implementación son proporcionadas por equipos distintos al equipo de infraestructura. Ansible proporciona varias formas de almacenar las variables llamadas cuando se ejecuta el libro de jugadas. Los archivos de variables CSV son una manera fácil de administrar variables.

Los archivos CSV son:

  • Interoperable entre diferentes sistemas operativos.
  • Editado con diferentes editores sin problemas.
  • Extendido horizontalmente para incluir nuevas variables si es necesario.

Todas las variables se pueden incluir en un solo archivo CSV. Sin embargo, para facilitar la gestión de las variables, cree archivos CSV más pequeños que cubran cada uno de los aspectos específicos de la configuración. En este artículo, tengo cuatro archivos CSV principales.

Analicemos cada uno de los cuatro archivos CSV.

el vms.csv El archivo tiene el siguiente encabezado:

name,vmflavour,type,site,cluster,class,os,nic,ip,gw,mask,system,fqdn,dns1,dns2,dns_domain
vm01,medium_vm,generic,first,Cluster01,server,rhel_8x64,eth0,10.10.10.10, 10.10.10.1,255.255.255.0,webserver,vm01.example.com,10.10.10.2, 10.10.10.2,example.com

O:

  • nombre: el nombre de la máquina virtual.
  • vmflavour - el vmflavour a usar.
  • tipo: tipo de máquina virtual, que puede ser genérica, de desarrollo, de producción u otra.
  • sitio - en caso de que su RHVM administre diferentes centros de datos.
  • clúster: nombre del clúster de RHV que aloja la máquina virtual.
  • class: clase de máquina virtual (servidor o escritorio).
  • os - SO del modelo.
  • nic - el nic que el cloud-init configurará. En este caso lo es eth0.
  • ip: dirección IP para asignar a eth0.
  • gw - puerta de enlace para asignar eth0.
  • mask - máscara de red para asignar a eth0.
  • system: la aplicación alojada en esta máquina virtual, que en este caso es el servidor web.
  • fqdn - FQDN para la máquina virtual.
  • dns1: primer servidor DNS que utilizará la máquina virtual.
  • dns2: segundo servidor DNS que utilizará la máquina virtual.
  • dns_domain - Zona de búsqueda de DNS.

el vmflavours.csv archivo utiliza el siguiente encabezado:

name,memorysize,guaranteedmemory,cpusockets,cputhreads,cpucores
medium_vm,16,16,1,1,8

O:

  • nombre - nombre del sabor.
  • memorysize: tamaño de la memoria de la máquina virtual.
  • Guaranteememory: tamaño de memoria garantizado de la máquina virtual.
  • cpusockets - número de zócalos de CPU.
  • cputhreads - número de subprocesos de la CPU.
  • cpucores - número de núcleos de CPU.

el vmtemplates.csv El archivo tiene el siguiente encabezado:

name,version,site,system
webserver-image-2206,1,first,webserver

O:

  • nombre: nombre de la plantilla creada en RHVM.
  • version - versión del modelo, si tiene varias versiones.
  • sitio: centro de datos donde se alojan la máquina virtual y el modelo.
  • sistema: aplicación alojada en la máquina virtual.

Nota: El modelo y dimensionamiento de la máquina virtual se puede colocar en el vms.csv. Sin embargo, para disociar las actividades del equipo de aplicación y el equipo de infraestructura, esta información se almacena en diferentes archivos.

el permisos.csv archivo utiliza el siguiente encabezado:

user,domain,role,system
newuser,internal,UserVmManager,webserver

O:

  • usuario: nombre de usuario asignado a roles específicos en este tipo de aplicación. El usuario ya está creado en RHVM.
  • dominio - dominio del usuario, que en este caso es internoporque es un usuario local.
  • rol - rol que se asignará al usuario.
  • sistema: nombre de la aplicación que se alojará en la máquina virtual.

Personalice estos archivos CSV para su propio entorno.

Estructura de directorios

Es útil visualizar cómo se organizan los archivos y los playbooks. Aquí está la estructura de directorios de libros de jugadas y archivos variables:

Conclusión

Como puede ver, la automatización comienza con una base sólida en diseño y modelos. También incluye la flexibilidad para reflejar los requisitos de gestión de su organización (equipo de infraestructura versus equipo de gestión de sistemas, por ejemplo). Las variables para definir configuraciones se pueden almacenar en archivos CSV. Cada archivo CSV gestiona un grupo discreto de parámetros.

En la tercera parte, lo reuní todo proporcionando dos ejemplos de libros de jugadas de Ansible basados ​​en la configuración descrita aquí. También proporciono consejos de depuración y solución de problemas.

Continuar con esta serie

Automatice la implementación de máquinas virtuales con Ansible: diseño (parte 1)

Automatice la implementación de máquinas virtuales con Ansible: Playbooks (Parte 3)

Las referencias

Documentación para Red Hat Virtualización 4.3

Documentación de Ansible

Artículos de interés

Subir