¿Cómo automatizar la instalación de servidores con virtualización/LAMP (pequeño IaC)?

¿Cómo automatizar la instalación de servidores con virtualización/LAMP (pequeño IaC)?

¿Cómo automatizar la instalación del servidor? ¿Qué infraestructura/sistemas se ajustan a nuestras necesidades?

Contamos con más de 10 servidores físicos con más de 100 VM, en su mayoría LAMP. No demasiados, pero tampoco nada que pueda seguir funcionando por sí solo. Todos los servidores cuentan con una virtualización KVM. Organizamos varias aplicaciones personalizadas para nuestros clientes que modificamos con frecuencia. Por lo tanto, esta no es una aplicación única que deba escalarse. Los equipos de proyecto trabajan directamente con los clientes y con las máquinas virtuales y esto es un requisito.

El problema en el que nos encontramos habitualmente es que la reinstalación de una VM/máquina se vuelve complicada ya que nadie controla los cambios recientes en ellas, plantea un riesgo de inestabilidad, la gente lo pospone el mayor tiempo posible y los problemas aumentan con el tiempo.

Me gustaría establecer un procedimiento de reinstalación al menos cada 3 meses y bajo demanda. La reinstalación debería comenzar con un repositorio de código y una copia de seguridad. Esto no debería ser una duplicación de VM.

Estimamos que esto nos costará alrededor de 6 meses-hombre cada 3 meses en la configuración actual si se hace a mano. ¿Cómo podemos reducir este tiempo y también aumentar la repetibilidad del proceso?

La pregunta es qué software puede ayudarnos a automatizar esta tarea. Debe ser lo más ligero posible. No necesitamos la asignación automatizada de nodos. Sólo necesitamos realizar reinstalaciones para que sean lo más automatizados posible. Asumimos la supervisión humana de cada reinstalación.

Nuestros nodos son en su mayoría LAMP con dos sistemas que tienen más de 1 TB de datos de base de datos estructurados, varios >200 GB y alrededor de 50 máquinas virtuales pequeñas y personalizadas. Podemos programar fácilmente un tiempo de inactividad planificado de cada sistema, por lo que no se trata de una alta disponibilidad durante la reinstalación.

Sólo necesitamos automatizar la reinstalación tanto como sea posible.

Respuesta1

Necesita un marco de gestión de configuración como Ansible, Saltstack, Puppet o Chef.

Esa es la herramienta a utilizar para gestionar y aplicar configuraciones. Sin embargo, seleccionar la herramienta real es una parte menor del proyecto.

Debe diseñar e implementar el proceso, donde todos los cambios en la infraestructura se gestionan a través de esta herramienta.

Esto requiere:

  • capacitar a las personas para utilizar la herramienta
  • Cambiar la arquitectura del sistema para que no se puedan realizar cambios sin la herramienta.
  • Lidiar con la resistencia a cambiar el modo de operación fundamental de las personas.

También debería considerar unificar la infraestructura de la pila de software.

Si cada VM tiene una configuración de software un poco diferente, tendrá

  • Una gran cantidad de código duplicado en su código de gestión de configuración para diferentes instalaciones.
  • Lógica compleja para elegir cómo aplicar qué configuración.

Cualquiera de estos factores añade muchos gastos generales de mantenimiento y el resultado final puede llegar a ser tan doloroso como su situación actual.

Respuesta2

¿Su nube tiene una clave API?

La mayoría de las nubes tienen imágenes LAMP con un solo clic, por ejemplo

Vultr:https://www.vultr.com/apps/lamp/

Océano digital:https://marketplace.digitalocean.com/apps/lamp

Linodo:https://www.linode.com/docs/guides/lamp-stack-marketplace-app/

Si no, mi opción absoluta es VestaCPhttps://vestacp.com/install/

Yhttps://hestiacp.com/

Ambos agregan backend de Apache, front-end de nginx, MySQL/mariadb/postgres y php/php-fpm. Todos los opcionales también.

Para las actualizaciones, crearía un servidor separado, colocaría una clave pública SSH común /root/.ssh/authorized_keysque tiene el servidor separado, que puede iniciar sesión automáticamente en cada servidor, algo como:

INSTANCES=(
10.0.0.5
10.0.0.6
10.0.0.7
...
)


for INSTANCE in "${INSTANCES[@]}"; do
    ssh root@${INSTANCE} /bin/bash -c "apt update -y && apt upgrade -y"
done

Esto es más o menos Terraform, Kubernetes, etc. DIY.

También en GitHub hay muchas guías específicas de la nube, por ejemplo:

Otro Océano Digital:https://github.com/ethanbeyer/DigitalOcean-Droplet-Setup

Uno de AWS:https://github.com/elionaz/aws-LAMP/blob/master/install_lamp.sh

información relacionada