Home » Cómo empezar como DevOps – Parte 1
desarrollo profesional como devops

Cómo empezar como DevOps – Parte 1

En algunas oportunidades me preguntaron cómo empezar como DevOps o SRE, a lo cual yo con mucho gusto conté mi experiencia y consejos para seguir el camino que seguí. Por ello, me pareció buena idea compartir estas ideas como un post que espero sea de utilidad para más de uno.

Por si alguien aún no lo sabe, ya llevo algunos años ejerciendo el rol de Ingeniero DevOps, no sin antes haber pasado por Arquitecto Cloud, Ingeniero Cloud, Ingeniero Pre-Venta Cloud y Administrador de Sistemas Linux/UNIX.

Antecedentes

Inicié mis primeras prácticas pre-profesionales en el 2005 como un Administrador de Sistemas Linux Junior. Ya entonces tenía cerca 3 años de experiencia con Linux.

Casi hasta el 2016 trabajé solo como Administrador de Sistemas con sistemas Linux, UNIX, IBM Power, algo de Virtualización, Networking, Hardware y Storage. Fue una experiencia mixta en distintas empresas consultoras donde atendía a un gran número de clientes. Durante todo ese tiempo, siempre me gustó mucho el automatizar tareas con Shell scripting usando BASH.

A mediados del 2016 empecé mis primeras experiencias en Cloud con Amazon Web Services y con ello otras herramientas que poco a poco entraron en mi repertorio. Entre ellas Docker, Terraform, Ansible, Packer, etc.

De estos años de experiencia deseo resaltar algunos puntos clave que me sirvieron de base y los considero requisitos clave: Linux, Scripting y Networking básico.

Paso 1 – Aprender y acostumbrarse a programar

Este paso sí es indispensable, aunque podría no ser necesariamente el primero. Tarde o temprano se va a requerir esta habilidad, por lo que decidí colocarla en el primer lugar de la lista.

No hace falta convertirse en Desarrollador de Software, pero sí estar familiarizado y acostumbrado a resolver problemas usando la lógica de programación en código de algún lenguaje.

shell scripting

Empieza con Shell scripting

Mi recomendación sería empezar con algo sencillo, rápido y de amplio uso: Shell scripting. Si tienes trabajas la mayor parte del tiempo con Linux, entonces aprende BASH. En cambio, si trabajas más con Windows, aprende PowerShell.

¿Qué hacer con scripting? Empieza a programar cualquier tarea repetitiva, operativa o algo que requiera cierto tipo de lógica por mínima que esta sea. Por ejemplo, crea scripts sencillos que hagan tareas como:

  • Buscar y/o listar archivos por un criterio (nombre, fecha, tamaño, etc) y comprímelos.
  • Tareas programadas de respaldo de archivos.
  • Gestión de software, usuarios, grupos y permisos desde línea de comandos con argumentos personalizables.
  • Generación de reportes (de procesos, rendimiento, eventos, etc.) en archivos de texto plano. Mejor aún si son valores separados por coma (CSV) que se puedan enviar por correo como adjuntos.
  • Depuración de archivos o carpetas que crecen rápido en el tiempo. Esto es con el propósito de mantener un umbral de uso menor a cierto valor (Ejm: < 90% de disco).

Estas son algunas ideas, pero puedes buscar más alternativas en foros, canales o grupos de chat en Internet.

Avanza hacia Python

Luego que ya estés familiarizado con Shell Scripting, recomiendo encarecidamente aprender un lenguaje más completo y funcional como Python. Créate el reto de intentar automatizar las mismas tareas que antes hacías con Shell Scripting, pero esta vez con Python. Luego, ve un paso más allá y aprende a trabajar con distintas librerías y crea las tuyas propias.

Gana práctica

Como parte de tu continua labor de programación, acostúmbrate a trabajar con un editor de código como Visual Studio Code. Aprende a sacar provecho de sus funcionalidades (atajos de teclado, extensiones, personalizaciones, etc).

También, búscate desafíos adicionales de programación a través de plataformas como HackerRank u otras similares.

Versionamiento con Git

Por último, aprende Git y las operaciones más básicas y rutinarias para mantener tu código. Esto incluye git add, git commit, git push. Créate una cuenta en GitHub.com, y crea repositorios donde almacenes tus scripts de Shell y Python que hayas ido creando. Aprende a crear Pull Requests, invita a otras personas a revisar tu código en GitHub y que colaboren contigo. También, es bueno que tú colabores con el código de otros. Esto te ayudará a mejorar ingresar a comunidades y hacerte conocido en ellas. Con el tiempo, esto será de gran ayuda en tu desarrollo profesional. También, te haría bien leer lo básico de GitOps.

Paso 2 – Administrar Sistemas Operativos y Redes

Esto lo considero una habilidad fundamental, pero no creo que sea necesario convertirse en experto. Usualmente, Sistemas Operativos y Redes van de la mano, pues para configurar servidores es necesario que formen parte de una red.

Fundamentos sólidos de redes

Es indispensable conocer cómo configurar TCP/IP, modelo OSI (y la diferencia entre sus capas). Los conceptos de Routing, Subnetting, Puertos y Servicios no pueden faltar. Ten claro cómo funcionan los Firewalls y el sistema DNS. Los túneles VPN basados en IPSec son los más conocidos, pero investiga también sobre alterantivas como OpenVPN.

Más conceptos: ancho de banda, latencia, TTL, métricas, Caché DNS, VLANs, Bonding o Trunking, MTU y Jumbo Frames.

Además, es vital entender bien cómo realizar pruebas y descartes de conectividad. Entender qué uso tienen herramientas como ping, nslookup, dig, tracert, traceroute. Sobretodo, debes saber cómo usarlas en cada caso. También aprende a verificar los puertos locales abiertos de un servidor. De modo similar, investiga cómo probar si está abierto un puerto en un equipo remoto.

administrador de sistemas
Servidores y Linux en especial

En lo referente a Sistemas Operativos, sí considero absolutamente indispensable aprender Linux (en cualquiera de sus distribuciones). También es importante Windows Server. Sin embargo, este sistema no es el de mayor uso por parte de Desarrolladores, Ingenieros DevOps y empresas a la hora de automatizar gran parte de labores operativas.

En cualquiera de ambas plataformas considero indispensable conocer y dominar labores como: Gestión de usuarios, grupos y privilegios, Gestión de Software, Procesos y Tareas programadas, Rendimiento y optimización del sistema, Aseguramiento (hardening), Administración remota segura y Auditoría de eventos.

Servicios de red comunes

Aunque un paso más allá, también considero clave el tener cierta experiencia instalando y configurando algunos servicios de red básicos. Entre ellos están:

  • DNS
  • DHCP
  • Web, Servidor de archivos
  • Autenticación e Identidad (Active Directory y/o Samba)
  • Proxy Web

Ayuda mucho el saber cómo instalar y configurar (al menos en un nivel básico) una aplicación Web. Esto incluye configurar el servidor Web (Microsoft IIS, Apache httpd, nginx) junto con su certificado digital. También va de la mano el instalar y configurar un servidor de Base de datos básico (SQL Server, MySQL). Luego sigue la configuración configurar una zona y registros DNS para la aplicación. Por último, instalar los archivos de la aplicación Web (en PHP, .NET, Java, etc) y saber cuáles modificar para lograr una integración correcta. Esta es una experiencia súper enriquecedora y de las más importantes, a mi parecer.

Próximamente

Intento que el tema de este artículo sea lo más enriquecedor posible para el lector y esto no sería posible en un único post gigante. Por ello, crearé otras publicaciones como continuación de este documento tratando de ser lo más detallado y claro posible.

Segúnlo leído hasta este punto, ¿te sigue interesando cómo empezar como DevOps? Si es así, entonces puedes ya saltar a la parte 2 de este post.

Post navigation

Deja un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *