ALERTA DE SPOILER !!!
¡No es un viaje fácil convertirse en ingeniero de DevOps!
Uno de los principales desafíos o deficiencias de la nueva generación de ingenieros de DevOps se puede resumir con el dicho ” Jack de todos los oficios, maestro de ninguno. ”
Esto es muy cierto para los estudiantes de primer año o las personas del equipo de operaciones o desarrollo que están tratando de ingresar a la carrera de DevOps al ver la demanda actual de ingenieros de DevOps en el sector de TI.
No estoy tratando de decir que es muy difícil para alguien convertirse en ingeniero de DevOps. Es solo que necesita hacer mucha preparación, investigación y trabajo duro antes de que pueda ser reconocido como un buen ingeniero de DevOps.
Dónde empezar
Donde las personas generalmente fallan en su viaje DevOps es que ponen más esfuerzo en aprender las herramientas y los marcos de DevOps en lugar de comprender los principios de DevOps o ser conscientes de lo que es DevOps en sí. He revisado cientos de hojas de vida de candidatos interesados en los puestos de trabajo de DevOps en varias organizaciones y la mayoría de las veces destacan su conocimiento en las herramientas en lugar de DevOps en sí.
En segundo lugar, la gente piensa que DevOps tiene que ver con la automatización, aunque esto es cierto hasta cierto punto, no se dan cuenta de que herramientas como Hudson, Jenkins, scripting y Cron existían mucho antes de que DevOps se hiciera popular.
Mientras entrevistaba a candidatos para roles de DevOps, generalmente les hago esta simple pregunta.
” Explíqueme qué es DevOps sin jerga técnica” o “Imagínese que soy de un entorno no técnico: explique DevOps”
Solo unos pocos candidatos pudieron dar una respuesta satisfactoria. La mayoría de las veces la gente termina diciendo que es automatización, integración continua e implementación, DevOps es un marco, etc. Aunque algunas de las respuestas son verdaderas, quizás en un aspecto práctico, la mayoría de ellas no definen “Qué es DevOps” .
Solo si puede comprender DevOps desde un punto de vista holístico a partir de cuál fue la razón por la cual DevOps nació, cuál es la necesidad de DevOps, los desafíos que enfrentan los equipos de desarrollo y operaciones, etc., entonces solo usted puede comenzar a dar sentido a DevOps y dar una respuesta adecuada a tales preguntas.
Entonces, para resumir el primer punto, ¿Dónde comenzar? – Comprenda los principios de DevOps y por qué DevOps es una cultura antes de comenzar a centrarse en las herramientas para DevOps. Una forma de comenzar ese viaje es leyendo el libro / novela – The Phoenix Project. Aunque es una obra de ficción, ayuda a que el lector pueda obtener más información sobre los conceptos de DevOps de una manera muy práctica. Tanto en un punto de vista comercial como técnico, el lector comenzará a entender por qué tanto como individuo como organización necesita adoptar DevOps.
Métete en los zapatos de los desarrolladores
No hay forma de evitar esto y estoy seguro de que los ingenieros de DevOps que provienen de antecedentes de desarrollo estarán de acuerdo con esto. Debe ser consciente de lo que el desarrollador está haciendo realmente durante el proceso de codificación, desarrollo, prueba e implementación.
Para personas de operaciones, experiencia en administración de sistemas o novatos: no estoy diciendo que necesiten aprender el desarrollo en profundidad o convertirse en expertos en desarrollo / programación. Por el contrario, si desea implementar de manera efectiva dichas prácticas y herramientas de DevOps, debe pensar como los desarrolladores, comprender sus requisitos y darles la mejor solución.
El conocimiento básico a intermedio en varios lenguajes y marcos de programación lo ayudará en gran medida. Es por eso que muchos ingenieros de DevOps que trabajaron como desarrolladores durante algunos años tienen mucho éxito en su carrera.
Para resumir, comprenda lo que hacen los desarrolladores durante el proceso de desarrollo del software. Cómo gestionan sus versiones de código, integrando el código en la base de código existente, resolviendo conflictos de fusión y cómo están compilándolos y desplegándolos en los servidores (aunque el equipo de Ops maneja esto, los desarrolladores también hacen su parte).
Una vez que haya entendido cómo se hacen las cosas manualmente sin herramientas de automatización, puede incorporar las prácticas y herramientas de DevOps de manera más efectiva.
¡Conviértete en un experto en operaciones incluso antes de PENSAR DevOps!
No sé cuánto más puedo estresar o hacer que este punto sea importante para todos los aspirantes a ingenieros de DevOps. Debe ser un experto en administración y operaciones del sistema antes de convertirse en experto en DevOps. El mundo de TI existió y funcionó con éxito mucho tiempo antes de que DevOps apareciera en la imagen. Y esto se debió principalmente a los superhéroes nombrados como Sysadmins y Ops. Y estos eran una raza rara de ingenieros (ahora cada vez más raros gracias a todas las herramientas de automatización) que conocían varios lenguajes de script mejor que su lengua materna.
Tenían una buena experiencia en ingeniería de sistemas donde administraban servidores Linux / Windows, configuraban servidores web, implementaban artefactos en ellos a través de FTP y SSH, administraban n cantidad de servidores. Y conocían a Shell mejor que su esposa / novia. Incluso antes del amanecer de DevOps tenían experiencia en la creación de tareas automatizadas (a través de Scripts) para automatizar la implementación, las compilaciones y el monitoreo del servidor y las aplicaciones. Hoy en día existe una idea errónea de que usted no ‘ No necesita experiencia en la administración de estas herramientas, sistemas operativos y scripts para convertirse en un ingeniero de DevOps. No es verdad.
A menos que seas bueno en Ops, no te convertirás en un experto en DevOps. Debe familiarizarse y tener experiencia en ingeniería / administración de sistemas antes de emprender su viaje DevOps. Puedes comenzar esto,
- Instalación de aprendizaje y administración de varias distribuciones de Linux
- Comience a aprender a hacer scripts, aprenda bash, Perl, python, ruby, etc. (sea experto en al menos un lenguaje de scripting que no sea bash script)
- Sepa cómo configurar servidores web, servidores DNS, equilibradores de carga – Apache, Nginx
- Aprenda a configurar el monitoreo proactivo para la infraestructura y el software
- Comprensión profunda de los conceptos de red: ejemplo: puertas de enlace IP, TCP, CID, ARP, etc.
- Comprender cómo implementar manualmente varios artefactos en los servidores
- Obtenga experiencia en varios sistemas RDBMS como PostgreSQL
- Experiencia en gestión de sistemas de archivos como ext, ext4, NFS ext.
Sé que la lista se ve bastante exhaustiva. Pero confía en mí, no lo es. A medida que comience a adquirir experiencia en cada una de las herramientas, marcos, procesos y diversas tecnologías anteriores, comenzará a adquirir más conocimiento en herramientas más relacionadas / dependientes, sistemas operativos, aplicaciones de sistemas, etc.
Luego, aprenda cómo administrar su código
Las herramientas de gestión de configuración existían mucho antes de que DevOps fuera popular. Y una de las herramientas iniciales que se utilizaron para el mismo fueron SVN, ClearCase, Mercurial y Git para Control de versiones. Antes de continuar, déjame aclarar esto. Debe tener un buen comando en cualquier Sistema de control de versiones distribuido si quiere llamarse a sí mismo como ingeniero DevOps. Por VCS distribuido me refiero a herramientas como Git y Mercurial (prefiero Git – se explicará en otro artículo).
En cierto modo, fue el uso extenso y las características que ofrecían herramientas como Git lo que impulsó el crecimiento de las herramientas DevOps. Atrás quedaron los días en que el equipo de Ops usa FTP, WinSCP, rsync, etc. para transferir su código, artefactos y datos entre sus servidores.
Estas herramientas no solo son eficientes en la versión que controla su código, sino que también ayuda al equipo de operaciones a usar estas herramientas para permitir que el código y los artefactos se envíen, procesen e implementen utilizando otras herramientas de configuración como Jenkins, Chef, Puppet, etc. materia segura, más rápida y fácil de manejar.
Para resumir: conviértase en un experto en Git y aprenda los conceptos básicos de SVN, Mercurial y ClearCase (para usuarios heredados y requisitos de migración).
Que haya Jenkins ( o cualquier otro servidor de CI para el caso )
Como había dicho antes. Jenkins existió mucho tiempo antes de que DevOps se hiciera popular. Pero esta herramienta fue lo que le dio al equipo de Ops un gran éxito al permitir una compilación y lanzamiento más estables con sus características de automatización. Y durante mucho tiempo Jenkins y Hudson (Jenkins vino de Hudson) gobernaron el reino de la Integración Continua (CI) y el Despliegue Continuo (CD). Actualmente, herramientas como TeamCity, Bamboo, GoCD y actualmente muchas herramientas están inflando el dominio DevOps CI y CD. Pero personalmente, con el soporte comunitario masivo y los complementos disponibles, personalmente siento que Jenkins sigue siendo la mejor solución de CI y CD fácil de usar y confiable.
Entonces, ¿qué es Jenkins? Es una solución de Integración Continua y Entrega Continua. Lo que hace CI es fusionar el código de diferentes desarrolladores en un único repositorio / proyecto varias veces al día mientras se prueba continuamente la base del código para evitar problemas posteriores. Ahora CD es el siguiente paso más allá donde se asegurará de que todo el código combinado esté listo para la producción.
Tanto para los desarrolladores como para las operaciones, Jenkins fue una dicha. Ayudó a automatizar el proceso tanto como sea posible, desde empujar el código del sistema de desarrolladores hasta implementarlo en producción.
Por lo tanto, dedique un poco de tiempo y esfuerzo para adquirir experiencia en Jenkins primero. Y como dije anteriormente, solo puede usar Jenkins en todo su potencial una vez que haya reunido un conocimiento y experiencia significativos como ingeniero de operaciones / administradores de sistemas.
De nuevo, no estoy promocionando a Jenkins. Pero para los nuevos usuarios, Jenkins es mucho más fácil de aprender y administrar en comparación con la otra herramienta de CI / CD que existe en el mercado. (Por favor, corríjame si estoy equivocado)
Aprenda a tratar su “Infraestructura como código” – Gestión de la configuración
Aquí es donde te ensucias las manos con las herramientas DevOps. Y antes de continuar, permítame recordarle nuevamente que necesita adquirir una buena experiencia en todas las herramientas y procesos mencionados antes de comenzar a aprender estas herramientas de administración de configuración.
A menos que tenga un buen conocimiento en el lado de las operaciones (Administración de servidores Linux / Windows, Administración de servidores web, Redes), control de versión de código (git, svn) y CI y CD (Jenkins, Bamboo, etc.) no podrá comprender realmente donde las herramientas de gestión de configuración (de aquí en adelante llamadas CM) encajan.
Demasiado honesto, fueron las herramientas CM como Puppet, Chef, Ansible, SaltStack, etc. lo que atrajo la atención de DevOps al mercado. Lo que las herramientas CM aprovisionadas fue la capacidad de administrar su infraestructura como código. Ya sea todo el trabajo manual que había hecho antes para instalar un sistema operativo, instalar y configurar sus dependencias, configurar los diversos parámetros de red y configurar los niveles de acceso, copiar y desplegar los artefactos y administrar los recursos de hardware, todo esto se hizo manualmente, lo que siempre condujo a las posibilidades de fracaso. E imagine hacer esto varias veces para muchos servidores diferentes. Fue muy difícil hacer un seguimiento y tener una infraestructura confiable de esta manera. Aquí fue donde estas herramientas vinieron al rescate.
Sugeriría a los principiantes que comiencen con Ansible y luego aprendan Chef, Puppet y otras herramientas de CM según los requisitos.
Monitoreo proactivo en DevOps
El monitoreo continuo existió mucho tiempo antes de que DevOps entrara en escena. Pero comenzó a llamar la atención y recientemente llegaron más herramientas al mercado o al monitoreo proactivo del medio ambiente. Estas herramientas monitorean sus registros y recursos del sistema y pueden identificar posibles cuellos de botella y enviar alertas para evitar interrupciones y problemas de rendimiento.
Herramientas como Nagios, senSU, logstash, New Relic, etc. pueden ayudarlo a comenzar.
Entrando en el mundo de la virtualización (ahora evolucionando a la contenedorización)
La virtualización fue conocida por más de una década con herramientas como VirtualBox, KVM, VMware, etc. La diferencia que DevOps trajo aquí es la automatización de la configuración, configuración y administración de estas máquinas virtuales. Esto es posible a través de herramientas como Vagrant, Packer, etc.
Otro dominio que es de la mayor demanda que ayudó a muchas organizaciones a impulsar DevOps son los contenedores. Los contenedores son entornos de ejecución autónomos y livianos. En comparación con las soluciones de virtualización habituales, los contenedores son más eficientes de ejecutar y más fáciles de administrar. Además, lo que han hecho los contenedores es encapsular el software junto con el entorno adecuado donde debe ejecutarse con todas las dependencias requeridas. El desarrollador puede implementar su código en contenedores que ya tienen el entorno correcto donde el código puede ser probado y luego enviado al equipo de operaciones para verificarlo e implementarlo, todo en cuestión de minutos o menos en comparación con los métodos tradicionales.
Los contenedores se hicieron populares debido a Docker. También hay otras herramientas para administrar y escalar contenedores, como Kubernetes, Mesos, etc. Le sugiero que comience su viaje con Docker antes de tener en sus manos otras herramientas para escalar y administrar contenedores.
Mudarse a la nube
Junto con las herramientas de administración de configuración mencionadas anteriormente, fue la demanda de pasar a la nube y administrar la infraestructura de la nube lo que aumentó aún más la demanda de DevOps. Tener una experiencia profunda con varios proveedores de la nube y sus servicios es esencial para un ingeniero de DevOps. Se requiere mucho conocimiento y experiencia con proveedores de la nube como AWS, Azure, Google Cloud, etc. Además, obtener las certificaciones proporcionadas por estos proveedores agregará valor a su experiencia en DevOps.
Resumen
Bueno, como dije antes, en realidad es un viaje largo y difícil para obtener experiencia en DevOps y será más difícil para los principiantes y las personas sin experiencia en operaciones ni desarrollo. Pero una vez que haya comenzado a trabajar de manera práctica con dichas herramientas y procesos y comience a trabajar en proyectos en vivo donde se está implementando DevOps, obtendrá un buen conocimiento y podrá desarrollar su experiencia en él.
Aunque es muy importante fortalecerse en los principios y la cultura de DevOps, al final para que una persona o el equipo implementen o pongan en práctica DevOps, se necesitan las herramientas correctas y el proceso correcto para trabajar juntos muy bien.
PD: Sé que este artículo no es perfecto o una guía infalible para el camino de convertirse en un ingeniero de DevOps exitoso. Siéntete libre de corregirme si tienes algo mal o necesitas agregar más puntos. Gracias