Introducción

En el mundo actual, las máquinas de la infraestructura de servidores se encuentran en centros de datos locales, centros de datos privados o centros de datos en nubes públicas. Estas máquinas pueden ser máquinas físicas de metal desnudo, máquinas virtuales (VM) con hipervisores o pequeños contenedores como contenedores Docker sobre máquinas físicas o virtuales. Estas máquinas pueden estar físicamente en el laboratorio local. En un escenario de centro de datos privado, donde sus propios hosts adquiridos se colocan en un espacio físico compartido en un centro de datos de terceros y se conectan de forma remota. Mientras que en los centros de datos públicos como AWS, GCP, Azure, OCI las máquinas se reservan o se crean bajo demanda para las necesidades altamente escalables que se conectan de forma remota. Cada uno de ellos tiene sus propias ventajas en cuanto a escalabilidad, seguridad, fiabilidad, gestión y costes asociados a estas infraestructuras. 

Los equipos del entorno de desarrollo de productos pueden necesitar muchos servidores durante el proceso SDLC. Digamos que uno ha elegido el centro de datos privado con sus propias máquinas físicas junto con servidores Xen. Ahora, el reto es cómo se gestiona el ciclo de vida de las máquinas virtuales para el suministro o la terminación en entornos similares a la nube con procesos ágiles y sencillos.

 

El objetivo de este documento es proporcionar el modelo básico de infraestructura, la arquitectura, las API mínimas y fragmentos de código de ejemplo para que se puedan crear fácilmente entornos de infraestructura dinámicos.

 

Beneficios

Comprendamos primero la secuencia típica de los pasos seguidos en el proceso de infraestructura de este servidor. Puede recordarlo como se indica a continuación.

    1. Adquisición de las nuevas máquinas por IT
    2. Virtualización de host - Instalar servidor Xen y crear plantillas VM por TI
    3. Solicitud de máquinas virtuales estáticas por parte de los equipos de desarrollo y pruebas a través de tickets (por ejemplo, JIRA) a TI.
    4. Mantener las IPs de las máquinas virtuales recibidas en una base de datos o un archivo estático o codificadas en archivos de configuración o herramientas CI como en Jenkins config.xml.
    5. Supervisar las máquinas virtuales para comprobar que están en buen estado antes de utilizarlas para instalar los productos.
    6. Limpieza o desinstalación antes o después de la instalación de servidores
    7. Es posible que sea necesario limpiar el registro de Windows antes de instalar el producto.
    8. Se podría haber hecho una asignación fija de máquinas virtuales a un área o a un equipo o dedicarlas a un ingeniero

Ahora bien, ¿cómo puede hacer que este proceso sea más ágil? ¿Puedes eliminar la mayoría de los pasos anteriores con una simple automatización?

Sí. En nuestro entorno, tuvimos más de 1000 VMs y trató de lograr y sobre todo lo siguiente. 

"VMs desechables bajo demanda según sea necesario durante la ejecución de las pruebas. Resuelva los problemas de limpieza de Windows con ciclos de pruebas regulares".

Como se puede ver a continuación, utilizando el servicio API de gestión dinámica de servidores VM, se pueden eliminar 6 de los 8 pasos y ofrece una visión ilimitada de la infraestructura para todo el equipo de producto. Sólo son necesarios los 2 primeros pasos: adquisición y virtualización del host. En efecto, esto ahorra tiempo y costes.

Typical flow to get infrastructure

Flujo típico para obtener infraestructura

Modelo de infraestructura dinámica

La siguiente imagen muestra nuestra infraestructura propuesta para un entorno típico de productos de servidor donde 80% de contenedores Docker, 15% como VMs dinámicas y 5% como VMs estáticas agrupadas para casos especiales. Esta distribución se puede ajustar en función de lo que funcione mejor para su entorno.

Infrastructure model

Modelo de infraestructura

A partir de aquí, hablaremos más sobre la parte del gestor de servidores Dynamic VM.

 

Arquitectura del Gestor Dinámico de Servidores

En el gestor de servidores de máquinas virtuales dinámicas, un sencillo servicio de API en el que se pueden exponer las siguientes API REST y que se pueden utilizar en cualquier parte del proceso automatizado. Como muestra la pila de tecnología, python 3 y Python basado en Xen APIs se utilizan para la creación real de VMs con XenServer host. Flask se utiliza para la creación de la capa de servicio REST. El sistema operativo puede ser cualquiera de las plataformas soportadas por su producto como windows2016, centos7, centos8, debian10, ubuntu18, oel8, suse15.

Dynamic VMs server manager architecture

Arquitectura del gestor de servidores de máquinas virtuales dinámicas

Guardar el historial de las máquinas virtuales para realizar un seguimiento del uso y el tiempo de aprovisionamiento o terminación puede ser analizado más a fondo. Para almacenar el documento json, se puede utilizar Couchbase enterprise server, que es una base de datos de documentos nosql.

 

API REST sencillas

 

Método URI(s) Propósito
GET /showall Lista todas las máquinas virtuales en formato json
GET /getavailablecount/ Obtiene la lista de máquinas virtuales disponibles para el dado
GET /getservers/?os=

/getservers/?os=&count=

/getservers/?os=&count=&cpus=&mem=

/getservers/?os=&expiresin=

Disposiciones dadas VMs de .

También se puede admitir el recuento de cpus y el tamaño de mem.

parámetro expiresin en minutos para obtener la expiración (auto terminación) de las VMs.

GET /releaseservers/?os=

/releaseservers/?os=&count=

Termina dado VMs de

Requisitos previos para hosts Xen dirigidos a máquinas virtuales dinámicas

  • Identificar hosts Xen VM dinámicos específicos
  • Copiar/crear las plantillas VM 
  • Mueva estos Hosts Xen a una VLAN/Subred separada (trabaje con IT) para el reciclaje de IPs.

Aplicación

A alto nivel -

  1. Crear funciones cada API REST
  2. Llame a un servicio común para realizar diferentes acciones REST.
  3. Comprender la creación de Sesión Xen, obtener los registros, clonar VM desde plantilla, adjuntar el disco correcto, esperar la creación de VM e IP recibida; borrado de VMs, borrado de discos.
  4. Iniciar automáticamente un hilo para la expiración de las máquinas virtuales
  5. Leer la configuración común como el formato .ini
  6. Comprender el trabajo con la base de datos Couchbase y guardar documentos
  7. Pruebe todas las API con los sistemas operativos y parámetros necesarios.
  8. Solucionar problemas, si los hay
  9. Realice un POC con pocos hosts Xen

Los siguientes fragmentos de código pueden ayudarle a comprenderlo mejor.

Creación de API

 

Creación sesión Xen

 

Lista de máquinas virtuales

 

Crear VM

Borrar VM

 

Uso histórico de máquinas virtuales

Es mejor mantener el historial de todas las VMs creadas y terminadas junto con otros datos útiles. Aquí está el ejemplo de documento json almacenado en el Couchbase, un base de datos Nosql gratuita servidor. Inserte un nuevo documento utilizando la clave como el uuid de referencia de xen opac cada vez que se aprovisione una nueva VM y actualice el mismo cada vez que se termine la VM. Rastrea el tiempo de uso de la VM y también cómo se ha realizado el aprovisionamiento/desaprovisionamiento por cada usuario.

 

 

Configuración

La configuración del servicio Dynamic VM server manager, como el servidor couchbase, los servidores xenhost, los detalles de la plantilla, la caducidad por defecto y los valores de tiempo de espera de red se pueden mantener en un simple formato .ini. La configuración se carga dinámicamente sin necesidad de reiniciar el servicio Dynamic VM SM.

Archivo de configuración de ejemplo: .dynvmservice.ini

 

Ejemplos

Ejemplo de llamadas a la API REST mediante curl

 

Trabajos Jenkins con una única VM

 

Se necesitan trabajos Jenkins con varias máquinas virtuales

 

Consideraciones clave

He aquí algunas de mis observaciones anotadas durante el proceso y que es mejor manejar para hacerlo más fiable.

  1. Manejar el nombre/ID de Almacenamiento diferente entre diferentes Hosts Xen
    • Mantenga un registro del nombre del dispositivo de almacenamiento VM en el archivo de configuración de entrada de servicio.
  2. Manejar plantillas parciales sólo disponibles en algunos hosts Xen durante el aprovisionamiento.
  3. Cuando las IP de red no están disponibles y las API de Xen obtienen la dirección por defecto 169.254.xx.yy en Windows. Espere hasta obtener una dirección que no sea 169 o hasta que se agote el tiempo de espera.
  4. Los servidores de lanzamiento deben ignorar la plantilla os ya que algunas de las plantillas podrían no estar allí Xen Hosts
  5. Provisión en una referencia específica de host Xen determinada
  6. Manejar No hay IPs disponibles o not obtener IPs de red para algunas de las VMs creadas.
    • Plan para tener una subred diferente para VMs dinámicas dirigidas a Hosts Xen. La red por defecto DHCP IP arrendamiento expiración podría ser en días (digamos 7 días) y no se proporcionan nuevas IPs.
  7. Maneje la comprobación de capacidad para contar las IPs en progreso como IPs reservadas y debería mostrar un recuento menor que lleno en este momento. De lo contrario, tanto las peticiones en curso como las entrantes podrían tener problemas. Una o dos VMs (cpus/memoria/tamaño de disco) pueden estar en el buffer mientras se crea y comprueba si hay peticiones paralelas.

Referencias

Algunas de las referencias clave que ayudan mientras se crea el servicio de gestor dinámico de servidores VM.

  1. https://www.couchbase.com/downloads
  2. https://wiki.xenproject.org/wiki/XAPI_Command_Line_Interface
  3. https://xapi-project.github.io/xen-api/
  4. https://docs.citrix.com/en-us/citrix-hypervisor/command-line-interface.html
  5. https://github.com/xapi-project/xen-api-sdk/tree/master/python/samples
  6. https://www.citrix.com/community/citrix-developer/citrix-hypervisor-developer/citrix-hypervisor-developing-products/citrix-hypervisor-staticip.html
  7. https://docs.ansible.com/ansible/latest/modules/xenserver_guest_module.html
  8. https://github.com/terra-farm/terraform-provider-xenserver
  9. https://github.com/xapi-project/xen-api/blob/master/scripts/examples/python/renameif.py
  10. https://xen-orchestra.com/forum/topic/191/single-device-not-reporting-ip-on-dashboard/14
  11. https://xen-orchestra.com/blog/xen-orchestra-from-the-cli/
  12. https://support.citrix.com/article/CTX235403

Espero que hayan pasado un buen rato de lectura.

Descargo de responsabilidad: Por favor, vea esto como una referencia si usted está tratando con Xen Hosts. Siéntase libre de compartir si ha aprendido algo nuevo que nos pueda ayudar. Agradecemos sus comentarios positivos.


Gracias a Raju Suravarjjala, Ritam Sharma, Wayne Siu, Tom Thrush y James Lee por su ayuda durante el proceso.

Autor

Publicado por Jagadesh Munta, Ingeniero Principal de Software, Couchbase

Jagadesh Munta es Ingeniero Principal de Software en Couchbase Inc. EE.UU. Anteriormente, trabajó en Sun Microsystems y Oracle durante 19 años. Jagadesh tiene un máster en Ingeniería de Software por la Universidad Estatal de San José (EE.UU.) y un B.Tech. Computer Science and Engineering en JNTU, India. Es autor de "Software Quality and Java Automation Engineer Survival Guide" para ayudar a los desarrolladores de software y a los ingenieros de automatización de la calidad.

Dejar una respuesta