Tras unas cuantas semanas más, casi que dos meses ya, ¡creo que es hora de escribir otra pequeña entrada para el blog! En esta ocasión hablaré del puesto al que me han asignado así como algunas de las herramientas con las que he tratado durante mi primera semana y media en el mismo.
En AtoS necesitaban
cubrir un puesto de Ingeniero DevOps Junior y como dicho puesto buscaba gente con
experiencia en scripts y conocimientos propios de un Administrador de Sistemas, decidí lanzarme a la piscina. Curiosamente acabé siendo elegido y asignado al equipo, pero...
¿Que es un
Ingeniero DevOps?
He aprendido que... depende mucho de a quién le preguntes. Esto es así porque
no se tiene muy claro cómo definir a un DevOps. Por eso la manera más sencilla creo que sería "
una especie de Administrador de Sistemas 2.0".
Básicamente una gran parte del trabajo es la de
ayudar a los equipos de desarrollo a que puedan tener un entorno idóneo para la creación de Software y para ello es necesario tener ciertas nociones tanto del lado de un Desarrollador de Aplicaciones como del lado del Administrador de Sistemas.
Pero también nos dedicamos a
automatizar las infraestructuras utilizadas por nuestro propio departamento, así como la
monitorización de las distintas herramientas que utilizamos a diario: si algo cae, es muy difícil que no nos demos cuenta.
Otra gran tarea que estamos llevando es la
dockerización de estas herramientas: existe un software llamado
Docker que
permite levantar una máquina virtual mínima con aquello que necesites...
Docker, como he dicho antes, se trata de un
Software dedicado a la construcción rápida y sencilla de todo tipo de máquinas a través de imágenes e instrucciones que la misma aplicación es capaz de leer:
estas máquinas son llamadas "contenedores" y estos mismos contenedores son
capaces de incluir docker y crear un subcontenedor dentro... Como una matrioska (muñeca rusa), básicamente.
Me recuerda un poco a vagrant, cuando lo utilizamos para utilizar aquel Framework de PHP con Andrés en Implantación de Aplicaciones...
A grandes rasgos, son casi lo mismo, solo que seguramente
Docker lo tenga más fácil por la gran cantidad de imagenes que tiene disponibles en
https://hub.docker.com/ (echadle un ojo, ¡no tiene desperdicio!).
Hasta la fecha he sido capaz de crear una
máquina con un nginx que mostrara una página index.html muy simple, pero
he incluso llegado a montar un contenedor con mysql que,
al crearse, crea una base de datos en base a un fichero sqldump alojado en mi propia máquina: a Ricardo, desde luego, esto último le libraría de algunos quebraderos de cabeza a la hora de instalar los entornos para clase (como dato:
tardó menos de 2 minutos en crearse y estar funcionando).
También Javi podría intentar integrarlo en las asignaturas de Sistemas, aunque no se si querrá volver muy loco a nadie con esto... Al principio puede ser un poco extraño, pero eso sí,
una vez se le pilla el truco es muy sencillo de usar y las máquinas se generan con una facilidad y velocidad que uno se queda loco (si os aventuráis y os surge alguna duda... ya sabéis donde encontrarme, a ver si puedo ayudaros después de pegarme tanto con él)...
Mi próximo reto con este Software será crear un contenedor con httpd (Apache) dentro y aplicarle la configuración que utiliza el servidor actual, que no está dockerizado...
Ya os comentaré qué tal.
Por tal y como están puestas las letras de su logo, parece el título de una nueva película de éxito, pero no,
Ansible es simple y llanamente una solución para automatizar distintas tareas típicas de un Administrador de Sistemas.
Imaginaos que tenéis que montar un servidor Apache en distintas máquinas, y todas ellas están conectadas en red y son accesibles desde una máquina maestra, donde tenemos instalado Ansible. Gracias a esta solución, podría ser capaz de
automatizar la instalación y configuración del propio httpd, que por ejemplo tendría tareas secuenciales como estas:
- apt-get update
- apt-get upgrade
- apt-get install httpd
- crear ficheros de configuración para 5 url
- configurar los distintos módulos a utilizar (SSL, PHP)
- crear las páginas html/php de esas 5 url
- reiniciar el servidor
Si tuvieramos que realizar estos 7 pasos en varias máquinas, posiblemente tardaríamos bastante, sobretodo porque tendríamos que ir una a una...
Pues bueno, Ansible es capaz de recoger todas estas tareas en un fichero y en base a otro en el que le demos las direcciones IP (o nombres DNS) de los distintos hosts, con una simple ejecución empezará a realizar estas tareas una a una, en todos y cada uno de los equipos... ¡sin tener que estar toqueteando en el ordenador correspondiente! Todo desde la comodidad de tu silla, en el equipo maestro ;)
Además, permite dividir tareas por "roles", que vendrían a ser las funciones de una clase. Estos roles pueden ser llamados desde cualquier fichero playbook (que es como se les llama a los ficheros principales en Ansible) que se encuentre en el mismo árbol de directorios, de la siguiente forma:
Como se puede observar en la misma imagen, Ansible permite incluso la automatización no solo de comandos de instalación, copiado o movimiento de ficheros... También permite ejecutar otros comandos más complicados, como vagrant o el mismo docker...
Toda una gama de posibilidades a nuestro alcance... A ver si Andrés puede encontrarle algún hueco dentro de sus asignaturas: Ansible últimamente está cogiendo fuerza y al menos en AtoS se utiliza bastante... Y normal, he descubierto yo mismo que es MUY útil.
No se si habréis oido hablar de él alguna vez... pero os presento a Jenkins :).
Es un mayordomo muy simpático que está ahí para hacerle la vida más sencilla a los Desarrolladores y Administradores de Sistemas por igual... Aunque al principio puede que la cosa sea a la inversa, pero como es normal la primera toma de contacto siempre suele ser extraña y complicada.
Jenkins es una aplicación que, por medio de un fichero llamado "Jenkinsfile", es capaz de realizar una serie de tareas que se le especifiquen: entre ellas ejecutar un Playbook de Ansible. Y esto, la verdad, es para lo que más se le suele utilizar.
Gracias a Jenkins, somos capaces de ejecutar distintos Playbooks de Ansible de una sola vez y aplicarle a cada uno una serie de credenciales y parámetros específicos.
El lenguaje de programación utilizado por su fichero se conoce como "Groovy", orientado a objetos e implementado sobre Java... Su sintaxis me recuerda a veces a Perl y otras a Python... Es normal: tienen características muy similares.
Otro punto curioso de Jenkins es que gracias a su interfaz gráfica la gestión de todo es muy rápida, y además acepta obtener los ficheros que necesita desde cualquier plataforma que utilice GIT. Esto hace que no tengamos que estar recargando los ficheros cada vez que modifiquemos algo: ya se encargará él mismo de bajarlo de las fuentes que le hayamos proporcionado (es muy listo él...).
Incluso muestra el tiempo que se ha tardado en ejecutar cada una de las tareas que le damos.
Suele ser utilizado, más allá del uso que le damos como Ingenieros DevOps, para hacer el deploy y el testing de una aplicación e incluso puede encargarse de ponerla en producción... A eso se le llama Software potente.
Si queréis probarlo, solo os digo que existen imagenes de Docker para crear un contenedor rápido con él dentro... Puede ser interesante echarle unas cuantas pruebas.
Eso sí, estad preparados para leer y programar mucho en Groovy ;)
Y eso sería todo por ahora... Mucha tecnología nueva, muchas horas utilizadas en aprender a utilizarlas lo mejor posible para no romper nada, pero todo muy útil así que se agradece.
¡Si consigo tiempo ya os contaré más de mis aventuras por el mundo de DevOps!