Fundamentos de Orquestación y Operaciones IT
Documento escrito por: Fernando Lucendo García
Puedes ver todos los documentos de este autor aquí.
Es necesario antes de entrar en materia conecer detalladamente cómo funciona el proceso de automatización, en qué se basa y cómo está formado. Hay que tener claros estos conceptos antes de adentrarse de lleno en el tema o tecnología en cuestión.
Introducción general
La infraestructuras pasadas comparadas con las actuales quedan muy desactualizadas, todos recordamos las típicas salas llenas de racks de telecomunicaciones (o también llamadas CPDs, sitio en el cuál hace bastante frío debido a que deben conservarse bien refrigeradas), donde empezaba a aparecer la virtualización y automatización aunque fuese bastante primitiva.
Por ese entonces se usaban tareas programadas como crontabs y ejecución de scripts dentro de estas mismas crontabs. También se usaban plantillas de MVs y contenedores. En cuanto a la monitorización se usaban herramientas como scripts en NRPE, que ofrecían una monitorización proactiva de incidencias y consultas. También se usaba Zabbix, para las alertas y triggers, que ejecutaban diversas funciones proactivas. Más tarde aparecieron herramientas de configuración centralizada como cfengine.
Todas estas tecnologías estaban en constante evolución e innovación con un rumbo muy claro, la computación en la nube o el cloud computing, no solo a nivel de infraestructura si no también a nivel de automatización. Uniendo dos sectores que estaban claramente diferenciados, la administración de sistemas con el desarrollo, lo que daría lugar al nacimiento de los DevOps.
Gracias todo lo anterior, la automatización se haría un hueco muy importante en la administración de los sistemas IT. Conocer estos procesos será fundamental hoy en día ya que las infraestructuras que se manejan son muy complejas, servidores virtualizados, instancias en cloud, etc. Esto hace que exista una gran variedad en la automatización y por eso juega un papel muy importante en los procesos de un administrador de sistemas o un desarrollador.
Por todo ello, es vital conocer la automatización existente, como implementarla y como ejecutarla de la mejor forma.
Automatización
Definición
Podemos definir la automatización como, la técnica, método o conjunto de procesos que se usa para reducir la intervención del humano al mínimo. Es muy importante entender que, a nivel de trabajo, una máquina es incansable, no se queja por nada, solamente hace lo que se le ordena y tal cuál se le ordena. Es por eso que cuando estas tareas las lleva a cabo un humano, pueden producirse problemas, el error humano estará presente en cualquier trabajo que pueda desempeñar, mientras que una máquina si está bien programada, puede realizar ese trabajo sin parar.
La automatización evita este error humano, llevando los procesos a realizar a su punto más óptimo.
Cómo implementar la automatización
Debemos identificar la entrada de información. Por ejemplo, imaginemos que queremos dar de alta nuevos usuarios en una aplicación, sistema o programa.
Para ello debemos darlos de alta en el sistema en cuestión, lo que se conoce como la autenticación. Esto nos devolverá los datos que el usuario introduce y escoge en el sistema. Sabiendo cuáles son los datos que el usuario debe introducir o marcar podemos realizar el siguiente paso, el diseño del disparador de este proceso de automatización.
Realizar el diseño que lance la automatización. Una vez identificada toda la información, es necesario realizar una automatización que recoja la información proporcionada y sepa que hacer con dicha información.
Cuando se evaluan las tareas de automatización entonces se agregará al usuario dado de alta en el grupo necesario, con el rol que necesite y los permisos correspondientes.
Tipos de automatización:
Manual: Lanzar el proceso a mano, introduciendo la información nosotros mismos y ejecutando el disparador por nuestra propia cuenta.
- Beneficios:
- Reduce el tiempo que tardará en ejecutarse el proceso completo.
- No necesitamos solicitar información nueva cada vez, volviendo al ejemplo del usuario que se quiere dar de alta, sabemos los campos que necesita completar, no se requiere información extra.
- Este proceso puede repetirse tantas veces como queramos, por ejemplo, se repetirá el proceso cada vez que un usuario se quiera dar de alta en un sistema.
- Herramientas:
- RUNDECK (portal para ejecutar distintos procesos completando un proceso automático que podrá ejecutarse posteriormente).
- ANSIBLE
- COMANDO
- Beneficios:
Programada: Se basan en tareas rutinarias que serán repetidas en un periodo de tiempo específico y que podrán programarse para que se ejecuten solas.
Por ejemplo: Lanzar una actualización periódicamente cada fin de semana en el servidor con el fin de instalar los últimos parches de seguridad y evitar posibles ataques.
Beneficios:
- Existen unos procesos mejorados y mejor definidos, ya que este tipo de automatización requiere un mejor conocimiento de los procesos que se vayan a automatizar. Para esto se analizará qué procesos se van a automatizar, cómo se van a implementar y que consecuencias puede tener hacerlo al terminar su ejecución.
- Tendrá una mayor consistencia ya que se habrá pensado mucho mejor un proceso que necesita programarse periódicamente que otro distinto que se ejecute a mano.
- Por lo tanto, será más confiable esta tipo de automatización.
Herramientas:
- RUNDECK (portal para ejecutar distintos procesos completando un proceso automático que podrá ejecutarse posteriormente).
- ANSIBLE
- COMANDO
- Puppet
Por eventos: Este proceso se ejecutará cuando ocurra un problema o evento, para ello debe haber una monitorización proactiva que analice previamente el estado del sistema.
Por ejemplo: Ejecutar una limpieza del disco que borre archivos temporales o residuales del sistema cada vez que el disco esté al 90% de su capacidad.
Beneficios:
- Existe una proactividad mayor y por lo tanto una mejor respuesta ante el problema o evento por parte de este tipo de tareas. Cuanto mejor sea la monitorización, mejor respuesta se podrá dar en el sistema.
- Como consecuencia, este tipo de automatización tendrá más confianza ya que es más tolerable a fallos.
- Esta automatización hará creará menos incidencias y por lo tanto se podrá dedicar más tiempo en otras areas o tareas.
Herramientas:
- ZABBIX
- Kibana
Auto-servicio: Consiste en resolver de forma automática problemas cotidianos que surgen a menudo y tienen una fácil solución. Por ejemplo: Ejecutar un proceso automático que pueda renovar la dirección IP de un equipo específico.
Beneficios:
- La velocidad en la finalización de tareas es mucho mayor, debido a su respuesta casi instantanea.
- Esto produce que el cliente final esté mucho más satisfecho al no tener que esperar una respuesta manual de un técnico.
- Reduce la carga de trabajo considerablemente, por lo tanto se ahorrará mucho tiempo, que se podrá emplear en otras labores.
Herramientas:
- OTRS (Gestión de tickets)
- Zammad (Gestión de tickets)
- Puppet
- CHEF
No obstante, hay un gran problema a la hora de automatizar. A la hora realizar estos procesos, no suelen ser realizados por un solo operario, suele haber varios empleados encargados de las automatizaciones. Esto provocará, en caso de una mala orquestación, que se produzcan fallos en la automatización. La clave de una buena automatización es su orquestación.
Orquestación
Una buena orquestación permitirá tener un mayor control y auditoría sobre los automatismos realizados en un sistema, lo cuál nos da la posibilidad de gestionar mucho más rápido, en caso de fallo, un posible error.
Ventajas de la organización
- Administración centralizada. Por lo tanto, tendremos un mayor control sobre lo que estamos haciendo y los resultados obtenidos.
- Auditoria. Podremos evaluar la finalización del proceso automatizado, si se ejecuta correctamente, y en caso de error, podremos analizar este fallo.
- Mejora de el ritmo de trabajo. Brindará una mayor consistencia y fiabilidad a nuestro sistema.
- Interfaz de auto-servicio. Gracias a estos portales que se pueden generar, realizaremos diferentes procesos de forma automática, además de delegar estos procesos a otros usuarios con menos conocimientos.
Elementos de orquestación
Runbooks
Procedimientos agrupados con un fin concreto.
Workflows
El flujo de trabajo (traducido al español) ofrece runbooks agrupados y conectados, ofreciendo una solución de principio a fin.
Pipelines
Son bien conocidos en el mundo del desarrollo, se podría explicar como una tubería de procesos que realiza una comprobación de todo el código desarrollado, pudiendo obtener un lanzamiento en un entorno. Se usa para desarrollar una infraestructura como código.
Métodos de comunicación
- Local ( en el mismo equipo )
- Protocolo remoto ( a través de un servicio SSH por ejemplo )
- Agente
- Servicio
Tipos de orquestación
Tareas programadas
- Disparador
- Puede producirse a partir de un evento específico en el sistema operativo.
- Ejecución de los demonios en tareas cron o anacron.
- Acción
- Lo más común es ejecutar un script y lanzar una aplicación o proceso.
- Método de comunicación
- Esta orquestación se produce sin ayuda de ningún servidor, es decir, de forma local.
Integración continua
- Requiere
- Servidor que soporte la integración continua.
- Una base de datos
- Agente de construcción
- Provee automatización
- Proceso de construcción del software
- Testeo de la infraestructura
- Método de comunicación
- Agente
Cloud
- Provee como un servicio
- Puede ofrecer una API para realizar operaciones.
- Portal web donde se gestionará la orquestación.
- Coordina y controla ofrenciendo soluciones
- Coordinando runbooks y workflows.
- Realizando numerosas automatizaciones a bajo nivel.
- Controlando los recursos de la propia nube o cloud
- Método de comunicación
- A través del propio servicio cloud
Despliegue continuo
- Requiere
- Servidor que soporte el despliegue continua.
- Una base de datos
- Agentes
- Provee automatización
- Despligue del software en diferentes entornos (enfocado a microservicios).
- Método de comunicación
- Agente
Mantenimiento de la configuración
- Requiere
- Servidor centralizado
- Agente o protocolo remoto
- Infraestructura declarativa
- Cada herramienta tiene su propia DSL o lenguaje de programación para su infraestructura.
- Método de comunicación
- Agente o protocolo remoto
Conclusión
Una vez llegados a este punto, se habrá podido identificar los puntos clave de la automatización y de la orquestación de microservicios.