Estos dias con el desarrollo de tantos tipos de software basados en la nube, es necesario un tipo de profesional que entienda muy bien como funciona el despliegue, el escalado y la administracion de grandes infraestructuras de aplicaciones, por lo que el rol de DevOps se vuelve relevante y es uno de los mejores pagados actualmente.
Asi que si lo que quieres aprender DevOps o quieren aumentar tu conocimientos y dirigirlos a este rol, en este video te dare una ruta de temas que puedes ir estudiando para convertir en este profesional tan demandado hoy en dia.
Empecemos.
Ok empecemos con los fundamentos en Linux.
Fundamentos en Linux
Linux es la columna vertebral de los servicios de la nube y los entornos de desarrollo y produccion actuales.
Y como en un entorno de DevOps debes configurar y mantener la infraestructura donde las aplicaciones se ejecutan, el conocer las bases de este sistema operativo es crucial para poder ser competente. sobre todo porque la gran cantidad de servidores actuales lo usan, incluido el propio Microsoft Azure.
Ahora tampoco es que debes conocer a profundidad el sistema operativo, con conocer los siguientes conceptos te basta para una base, entre estos estan:
- Conceptos basicos de la terminal o shell y como interactuan con el sistema operativo usando comando para:
- Sistema de archivos: ls, cp, mv, rm
- Permisos: chmod, chown
- Procesos: ps, top, kill
- Administradores de paquetes del sistema operativo, estos sirven para instalar mas programas y dependencias
- Bash Script, estos son scripts que te permiten conbinar comandos de terminal pero desde un archivo, uniendolos a un lenguaje de programacion enfocado en ejecutar tareas de; servidor.
Y para empezar en todo esto te recomendaria instalar una maquina virtual o usar Window Subsystem for Linux (WSL) y empzar a probar con algunas distros populates para servidores, como podrian ser Ubuntu, Fedora, CentOs, entre otros. y empezar a probar los comandos desde alli.
Dedicale de 2 a 3 semanas a estudiar Linux.
Lenguajes de programación
Usando comandos de terminal y Bash script puedes automatizar tareas, pero no todas realmente, o en ocasiones es necesario hacer tareas mas complejas, por lo que necesitas profundizar en los lenguajes de programacion.
de hecho siendo DevOps, es probable que muchas veces veas muchos proyectos de distintos lenguajes, por lo que dominar aunque sea uno, te puede ser util para entender como funcionan mucho otros mas.
Ahora hay muchos lenguajes de progrmaacion, pero entre los que tipicamente se usan estan Python, Ruby, Go, Java, C#, o Javascript con Nodejs, y la lista continua.
Pero no te preocupes no es necesario conocerlos todos, de hecho una buena idea es iniciar con un lenguaje que sea facil de aprende y a partir de alli es ir conociendo otro a medida que se vayan presentando en proyectos. En mi opinion uno recomendado para empezar es Python, es simple de aprender, hay mucha informacion de como usarlo y es bastante versatil por lo que aprenderlo te servira para casi toda tu carrera.
Entre las cosas que debes saber del lenguaje que escojas, por ejemplo Python, estan los sisuiente conceptos:
- Sintaxis Basica del lenguaje: condicionales, bucles, tipos de datos, funciones
- Estructuras de datos: clases, listas, sets, tuplas, etc
- modulos o paquete, para trabajar con archivos, el sistema operativo, la memoria, redes, y demas
- Crear y conocer paquetes de terceros, usando administrador de paquetes (por ejemplo en Python esta pip)
- Crear scripts automatizados para el sistema con Python al mismo estilo que lo hacias con Bash Script
- Manejar Errores
Dedicale de 4 a 6 semanas para iniciar tus estudios en el lenguaje. Aunque no te preocupes en entender todo el lenguaje porque este es muy amplio asi que aprende las bases crea algunos proyecots pequeños y continua.
Git
Ahora como vas a estar escribiendo algunos scripts con bash script o usando lenguajes como Python, basicamente vas a conocer las bases de un lenguaje de programacion y vas a escribir codigo que va a ir cambiando a lo largo del tiempo, entonces para poder manejar los distintos cambios que vas a ir haciendo te recomendaria tambien empezar a estudiar Git.
Git es un programa que se cataloga como un sistema de control de version, basicamente permite controlar el historial de cambios de cualquier proyecto de software, y como tu trabajo sera desplegar multiples versiones en multiples entornos, y este a su vez es posible que este desarrollado por un equipo de desarrollo, es necesario dominar esta herramienta.
Entre las cosas que debes saber estan los siguientes conceptos:
- Clone, commit, push y pull
- Branching y merging
- Resolver conflictos en un merge
- Manejar distintos pull Request
- Trabajar con repositorios remotos
Hay mucha informacion para aprender Git, asi que puede tomarte 2 semanas aproximadamente para aprender esto.
Redes de Computadores o Networking
Cuando hablamos de Networking hablamos de computadores interconectados de multiples formas comunicandose entre si, usando conceptos como son los protocolos de Red y las direcciones IP, pero esto es solo el comienzo porque hay mucho mas, asi que debes dominiar como los datos se mueven entre estos computadores, como funciona la seguridad de estos protocolos, y saber resolver los problemasde redes qe aparezcan
Entre las cosas que debes saber estan los sisuiente conceptos:
- Direcciones IP y Subnnetting
- modelo OSI y TCP/IP
- DNS y DHCP
- Protocolos de Red como: HTTP, HTTPS, Telnet, FTP, y SSH
- Firewals y grupos de seguridad
- Resolucion de problemas de Red: con herramientas como ping, traceroute, y netstat, que son comando tipicos de linux
Aunque relacionado a todo esto hay una herramienta que te puede ayudar a ver como funcionan muchos de estos protocolos y datos que se transfieren en redes, llamado Wireshark.
Asi que tomando de referencia estos temas puedes tomarte de 3 a 4 semanas estudiar todo lo relacionado a Redes.
Proveedores Cloud
Ok hasta aqui tienes las bases que muchos programadores pueden llegar a aprender, pero lo que realmente empieza a encaminarte como un DevOps, es el estudiar un proveedor de la nube.
Entre estos estan Amazon Web Services o muy conocido por las siglas AWS, luego esta Google Cloud y tambien Azure.
Estos ofrecen servicios para construir y desplegar aplicaciones de todo tipo.
Aunque como vas a estar emepzando la recomendacion es que te enfoque solo en uno, y en donde AWS, es el mas recomendao, al ser el servicio mas grande y mas popular en este sector.
Entre las cosas que debes saber estan los sisuiente conceptos:
- Configurar, lanzar y administrar Servidores privados virtuales (VPS), usando servicios como EC2
- Almacenar y administrar datos, usando servicios como RDS y S3
- Administrar usuarios, roles, y grupos de usuarios, usando su servicio de IAM
- Configurar y administar redes, usando servicios como AWS Virtual Private Cloud (VPC) o AWS VPN
aunque estos son solo algunos, de hecho son tantos que he creado un video dedicado a todos los servicios que AWS provee asi que revisalo para tener mas idea de todo o que ofrece.
Puedes dedicarles desde 5 a 7 semanas aqui.
Contenerizacion
La contenerizacion trata acerca de empaquetar tu aplicacion junto con las dependencias que necesita como sus bibliotecas, paquetes del sistema operativo, y hasta el mismo sistema operativo.
El objetivo es crear un paquete reutilizable de software que funcione en cualquier sistema similar a los contenedores de la vida real que son relativamente faciles de trasnportar.
Y para esto hay varios software que permiten crear contenedores, pero el mas popular es Docker, asi que es el que debes aprender.
Entre las cosas que debes saber de Docker:
- Crear imagenes de Docker
- Familiarizate creando, iniciando, parando y eliminando contenedores
- Crea Dockerfiles
- Aprende a crear multiples contenedores usando docker-compose
- Desplegar imagenes usando servicios de la nube como AWS Elastic Container Service y Elastic Container Registry, u otros mas.
Dedicale de 3 a 4 semanas a estudiar Docker.
Continuous Integration & Continuous Deployment (CI/CD)
CI/CD es un conjunto de practicas que permiten automatizar el proceso de subir cambios constantes a un proyecto y tambien automatiza el despliegue de un proyecto. Gracias a el se pueden hacer cambios constantes y que sean confiables.
Uno de las herramientas CI/CD mas populares es Jenkins, pero tambien estan Github Actions, Gitlab CI/CD, Circle CI, Travis CI.
Aunque si estas empezando puedes empezar conociendo Jenkins, debido a que es un proyecto muy versatil, y tiene una comunidad muy grande.
Entre las cosas que debes saber estan los sisuiente conceptos:
- Crear y administrar pipelines de Jenkins
- Escribir Jenkinfiles
- Integrar test automaticos
- automatizar la construccion y el despliegue de tu proyecto.
Dedicale de 2 a 3 semanas de estudio.
Orquestacion y Administracion de Contenedores
Aqui entran Herramientas de Orquestacion como Kubernetes y HELM, siendo Kubernetes la herramienta recomendada para estudiar.
Estas herramientas permiten automatizar el despleigue, el escalado y administar aplicaciones que estan contenerizadas, lo que son necesarias para manejar infraesturas de aplicacioens muy grandes en produccion.
Entre las cosas que debes saber estan los sisuiente conceptos:
- Diseño y manejo de Arquitectura, conceptos como el master node, y worker node y como interactuan
- Enter los compontentes basicos como pods, services y deployments
- Administrar recursos
- Escalar aplicaciones
- Networking model
Infraestructura de Servicios
Esta involucra configurar y administrar servicios como: Reverse Proxies, Forward Proxies, Firewalls y balanceadores de carga (Load balancers).
Y para esto hay muchos software como Nginx, apache o Traefik, pero el mas popular es Nginx, asi que es una buena opcion empezar con este.
Entre las cosas que debes saber estan los sisuiente conceptos:
- Configurar Nginx como un reverse proxy, y forward proxy
- Estrategias de Caching
- configura Firewalls y grupos de seguridad
Decicale de 2 a 3 semanas para estudiarlo.
Configuracion Gestionada
Entre algunas herramientas de Configuration Management podemos encontrar a Ansible, Puppet, y Chef. Siendo Ansible el recomendado debido a que es simple y tiene muchas caracteristicas.
Permiten automatizar el despliegue la configuracion y la administracion de servidores y aplicaciones
Entre las cosas que debes saber estan los siguiente conceptos:
- Crear Ansible Playbooks
- Como usar roles y modulos
- administra variables y templates
Dedicale de 3 a 4 semanas de estudio.
Infraestructure as a Code (IaC)
Iac permie crea la infraesturucta de todo un proyecto en la nube, a traves de un archivo de configuracion.
Entre las herramientas populares podemos encontrar a Terraform, Cloudformation, y Pulumi. Siendo Terraform la herramienta mas usado debido la flexibilidad y su uso ampliado.
Entre las cosas que debes saber estan los siguiente conceptos:
- Conceptos basicos como: Proveedores y recursos
- Archivos de configuracion de Terraform
- Modulos de Terraform
- Conceptos avanzados: Workspaces y remote State
Dedicale de 3 a 4 semanas.
Monitorizacion
Prometheus, Grafana, ELK, Fluentd hacen un seguimiento del rendimiento y la ejecucion de tus aplicaciones e infraestructura. Y si estas emepznado Prometheus y Grafana son los recomandos
Entre las cosas que debes saber estan los siguiente conceptos:
- Arquitectura y modelo de datos de Prometheus
- recolectar metricas
- Escribir Queries
- Configurar Alertas
Dedicale de 2 a 3 semanas.
Conclusion
Y bueno si llegaste hasta aqui conociendo estas herramientas es muy probable que puedas optar por un puesto como DevOps.
Adicionalmente tambien debes saber que muchos servicios de la nube tienen certificaciones,
Finalmente para poder estudiar todo esto es recomendado dedicarle dentro de 3 a 5 horas diaras para poder avazar, realmente, haciendo esto es probable que en 5 o 6 meses estes listo para poder participar de esta area.