De SysAdmin a DevOps: Parte I. Claves para la transición

27 mayo
Hugo Bernachea, Senior Developer en DataArt
De SysAdmin a DevOps: Parte I. Claves para la transición
Nadie puede negar que, hoy en día, DevOps es un tema candente y con una gran potencialidad. En este artículo, contaré un poco sobre las ventajas y oportunidades de incorporar esta metodología y las herramientas que permiten desplegarla.

Por qué DevOps


Si bien un administrador de sistemas o un administrador de bases de datos puede continuar operando en el nivel de habilidad que utilizaba en el pasado, es una realidad que resulta mucho mejor evolucionar hacia DevOps. No es lo mismo aprovisionar o configurar servidores uno por uno de manera manual, que crear automatizaciones que permitan hacerlo rápidamente y sin errores.

Este camino de incorporar las metodologías DevOps implica un cambio de mentalidad o mindset, así como también la incorporación de nuevos conocimientos. A la vez, involucra tratar de descubrir oportunidades de automatización ante cada tarea que se presenta ante nosotros. No es fácil cambiar la forma en la que se han estado haciendo las cosas en los últimos 10 o 20 años. Sin embargo, creo que es necesario y hasta obligatorio.

Para comenzar, hay que abrazar la idea de que DevOps no es una posición, sino un conjunto de prácticas que conducen a la cohesión, rompiendo silos, mitigando errores, permitiendo ciclos de vida de software más frecuentes y oportunos, mejorando la comunicación entre Dev y Ops, y realizando constantes pruebas y reevaluaciones no solo del código, sino de todo el proceso de integración continua.

Un SysAdmin puede carecer de conocimientos de programación o de habilidades de codificación. ¿Cuál es la solución? Aprender al menos un lenguaje. Puede resultar difícil sacarse de encima la sensación de que la programación es solo para desarrolladores, pero no es necesario adquirir conocimientos de programación expertos y sin duda será ventajoso saber cómo escribir. No hace falta decir que además hay una gran variedad de cursos gratuitos, por ejemplo: https://www.learnpython.org/es/

En mi caso, conozco Powershell y estoy en el proceso de dominar Python. Este último da la sensación de ser más flexible y es más nativo de Linux, mientras que a Powershell lo siento más integrado a Windows y al framework de .NET. Pero esta es mi impresión personal.

img

Aprender programación será útil también para mejorar el trabajo con los desarrolladores del equipo de DevOps, o quizás con un cliente como consultor. Asimismo, sería recomendable aprender comandos del Shell de Linux y agregar este conocimiento al toolset. Esto exigirá algo de tiempo, pero considero que aprender estas habilidades es una prioridad.

Eventualmente, podrías ser el único SysAdmin y por tanto el “hombre orquesta”, que haga desde el mantenimiento de las impresoras hasta las tareas relacionadas con la red, como configurar y administrar enrutadores y conmutadores, así como establecer políticas y reglas de firewall; actualización del hardware, auditoría de la seguridad, parchar servidores, solucionar problemas, realizar análisis de causa raíz y automatizar, generalmente a través de secuencias de comandos PowerShell, Python o secuencias de comandos Bash. 

Repasemos algunos conceptos

  • DevOps es un conjunto de prácticas, procesos y herramientas de desarrollo de software, que combinan el desarrollo de software (Dev) con operaciones de tecnología de la información (Ops) para facilitar el ciclo de vida del desarrollo de software.
  • Juega un papel importante en brindar automatización en el área de construcción, prueba y lanzamiento, a equipos de desarrollo de software, los actualmente son llamados como: Integración continua (CI), comprobación continua (CT) y entrega continua (CD).
  • Necesita un ciclo de entrega que incluya planificación, desarrollo, prueba, implementación, lanzamiento y monitoreo con la cooperación activa de los diferentes miembros del equipo.
img
  • Usualmente, es llamado pipeline, haciendo referencia a un flujo lineal de trabajo que se mueve desde la prueba de compilación hasta el lanzamiento. La “tubería” muestra una visualización total de la aplicación desde el control de origen hasta la producción. No se enfoca en Integración Continua, sino en Entrega Continua. Las empresas están dedicado tiempo en entender más sobre la automatización del proceso completo que se lleva a cabo con el desarrollo de software.

Buscando la oportunidad de automatizar

Siempre que se presenta una tarea repetitiva, no estaría mal evaluar la posibilidad de automatizarla y documentar dicha automatización de manera que, la siguiente vez que se presente, sea todo más rápido. Esto liberaría tiempo para enfocarse en realizar labores más significativas para el entorno, menos monótonas y rutinarias.

Un ejemplo de cosas a scriptear podría ser la administración de cuentas de usuarios y grupos: crear usuarios y establecer permisos puede ser una tarea tediosa ya que los usuarios van y vienen casi todos los días. La creación de secuencias de comandos significa liberar más tiempo para proyectos de infraestructura a mayor escala, como actualizaciones de conmutadores y servidores, y otros proyectos que generan ingresos, aunque se suele considerar que TI es un centro de costos.

Desarrollo y operaciones se vuelven uno

DevOps se considera una filosofía en la que se realiza TI, operaciones (Ops) y desarrollo. Esta forma de ver las cosas es sin duda el mayor cambio de mentalidad: bajo el paraguas de DevOps hay un equipo de desarrolladores de software a un lado del pasillo y un equipo de personal de operaciones al otro; además, acurrucados en la misma área, es probable que exista un equipo de gestión de productos, un equipo de control de calidad y un equipo de diseño de UX. Todos ellos combinan fortalezas para racionalizar y estabilizar las operaciones para implementar nuevas aplicaciones, y actualizan el código para respaldar y mejorar todo el negocio.

El núcleo de DevOps es el proceso de desarrollo del ciclo de vida del software. Como las operaciones son responsables de apoyar a los desarrolladores, éstos tienen la tarea de saber más que solo las API que se ejecutan en los sistemas y sus sistemas operativos. También deben comprender qué más hay y ejecutar su software, el hardware y los sistemas operativos, para poder manejar mejor los problemas de errores, resolver problemas y comunicarse con las operaciones.

De SysAdmin a DevOps

Los administradores de sistemas tienen la capacidad de hacer la transición a un equipo DevOps, siempre que estén dispuestos a aprender sobre tecnologías actuales y emergentes, y estén abiertos a nuevas ideas y soluciones innovadoras. 

Como dijimos anteriormente, no tienen por qué ser programadores completos si provienen de un entorno de operaciones tradicional, pero aprender un lenguaje de programación como Ruby, Python o Go ayudará a fortalecer su lugar en el equipo. Por otro lado, si bien los SysAdmin han sido tradicionalmente más solitarios en su trabajo diario, esta es una experiencia completamente opuesta y necesaria para que un equipo ágil aplique los principios de DevOps.

Tanto los administradores de sistemas como DevOps están interesados ​​en escalar rápidamente, reducir errores, encontrar y resolver errores existentes ágilmente, entonces la automatización es una similitud entre estos dos campos. 

Los administradores de sistemas son responsables de los servicios en la nube como AWS, Azure y Google Cloud Platform. 

Deben comprender los pipelines CI / CD y cómo llevarlas a cabo utilizando Jenkins. Estos conceptos implican la integración continua (CI), la distribución continua (CD) y la implementación continua.

img

Además, deben usar herramientas de configuración y aprovisionamiento como Ansible, que se usa para implementar diez o veinte servidores en paralelo. La premisa es infraestructura como código: todo es software, y el software lo es todo. Esencialmente, es necesario un cierto replanteamiento para que el administrador del sistema del futuro siga siendo relevante. Los SysAdmins vienen del lado de Ops y tienen que poder trabajar de manera efectiva con los desarrolladores y viceversa. Dos cabezas son, en definitiva, mejores que una.

Una última pieza importante del rompecabezas es Git . Tradicionalmente, Git no ha sido parte de las responsabilidades cotidianas de un administrador. Este sistema de gestión de control de versiones es muy utilizado por los equipos de ingeniería de software, DevOps, equipos de desarrollo, equipos ágiles y más. Si se trabaja dentro del proceso de desarrollo del ciclo de vida del software, sin dudas se trabajará con él.

El administrador de sistemas necesitará subir su nivel de conocimiento de Git, comprender control de versiones y aprender esos comandos comunes como git status, git commit -m, git add, git pull, git push y más allá. Hay muchos cursos de capacitación en línea, algunos incluso con simulaciones de ejecución de estos controles. Personalmente, recomiendo este que me parece muy bueno, interactivo y sencillo: https://learngitbranching.js.org/?locale=es_AR.

También hay hojas de trucos de Git, así es que no es necesario memorizar cada comando, aunque cuanto más se use más se recordarán. El Visual Studio Code de Microsoft (como una alternativa al Notepad++) es una herramienta gratuita, pero que tiene la posibilidad de ejecutar comandos git directamente desde el entorno de Visual Studio Code.

img

Ansible, por su parte, es una gran herramienta de aprovisionamiento en entornos de múltiples servidores, porque permite automatizar configuraciones y aprovisionamientos escribiendo playbooks en yaml de una manera totalmente configurada.

img

Utilizando Ansible podríamos tener un entorno nuevo en la nube levantado, incluso con alta disponibilidad de una manera automatizada y sin tener siquiera que loguearnos al portal de Azure, GCP o AWS.

Conclusión

img

Unas palabras finales

En última instancia, depende de cada uno si se desea seguir siendo un administrador de sistemas tradicional o hacer la transición hacia DevOps. Hay una curva de aprendizaje, pero realmente es un buen momento para comenzar. 

Hay que elegir un lenguaje de programación para aprender (a mí Python me resulta quizás el mejor y más adoptado) y, paralelamente, hay que aprovechar la oportunidad de formarse también en Git, una herramienta de CI/CD como Jenkins y una herramienta de configuración y automatización de TI como Ansible o similar. 

Sea cual sea, aquello que decidamos aprender nos convertirá en profesionales más productivos para cualquier empresa.

Fuentes: