GitOps: todo sobre esta infraestructura informática automatizada

GitOps es un concepto que gestiona infraestructuras y aplicaciones mediante un enfoque declarativo y las controla con Git. El objetivo de esta idea es automatizar los procesos, ahorrar tiempo y garantizar una mejor y más segura colaboración entre los distintos equipos en los repositorios.

¿Qué es GitOps?

La automatización desempeña un papel fundamental en el ámbito del desarrollo de software. Esta es una de las razones por las que DevOps ha tenido un éxito tan rotundo. La base de esto es la idea del “Infrastructure as Code (IaC)”, que pretende mapear las infraestructuras y configuraciones de un sistema informático y de esta manera hacerlas reproducibles. GitOps es una extensión lógica de este enfoque. Desde 2017, el software de código abierto Git controla todo el proceso de gestión de una aplicación, desde la administración hasta el desarrollo final del software, como un “Single Source of Truth”. Para ello, GitOps define un estado objetivo, comprueba y, si es necesario, ajusta la infraestructura hasta alcanzar dicho estado.

Weaveworks proporciona un conjunto de buenas prácticas para unificar los métodos individuales de supervisión de los contenedores. Estos pueden aplicarse a Kubernetes y otras tecnologías con un trasfondo en la nube, lo que facilita su gestión. Git se remonta a un sistema de control de versiones desarrollado por Linus Torvald en 2005. Permite que diferentes equipos de desarrolladores trabajen juntos en un mismo proyecto en paralelo. Los cambios solo se adoptan tras un acuerdo conjunto y se conservan los estados de desarrollo más antiguos. Los desarrolladores pueden trabajar en diferentes aspectos simultáneamente y combinarlos al final. En nuestra Digital Guide puedes acceder a un tutorial de Git completo.

¿Cómo funciona GitOps en la práctica?

Con GitOps, el estado objetivo de un sistema se describe primero de forma declarativa. Los cambios se realizan según el principio de Git a través de pull requests. Si se llevan a cabo, modifican el repositorio Git. Cuando se realiza un pull request en un entorno con GitOps, el operador GitOps se activa, captura el commit y solicita el estado actual a través de Git. Lo compara con el estado deseado en el repositorio. Una vez aprobados los cambios, se fusionan con el estado anterior y se adoptan directamente para la infraestructura en directo. Esto permite que los procesos sean más rápidos y fluidos, además de garantizar la estabilidad y fiabilidad del sistema.

¿Por qué principios se rige GitOps?

Gracias a unos principios claramente definidos e inalterables, los flujos de trabajo de GitOps deberían funcionar siempre de forma fiable. En primer lugar, se trata de los sistemas declarativos que se han descrito anteriormente, ya conocidos por otros cloud natives. La descripción declarativa garantiza que todo el sistema pueda ser tratado como código y versionado. Esto sirve para la seguridad y la estabilidad de todo el sistema, ya que las desviaciones de la versión Git también pueden reconocerse y notificarse inmediatamente. Además, las SSH Keys garantizan que siempre se pueda rastrear y averiguar el origen de un código. Gracias a la declaración previa, los cambios también pueden automatizarse, detectarse las posibles fuentes de error y corregirse en una fase temprana.

GitOps, DevOps y Continuous Delivery

El enfoque principal de DevOps es, y siempre ha sido, acercar el desarrollo a la ejecución para simplificar los flujos de trabajo. Dado que los equipos individuales colaboran más estrechamente, el producto final mejora y los cambios pueden realizarse con mayor rapidez y precisión. GitOps adopta este enfoque y lo aplica de forma coherente a la parte de ejecución (operaciones). GitOps se centra completamente en Git, mientras que DevOps y DevSecOps son más bien una idea fundamental que impulsa la colaboración entre áreas antes separadas y se basa en pipelines de CI y CD. Sin embargo, ambos enfoques también pueden combinarse.

A diferencia del Continuous Delivery y Continuous Integration, GitOps extrae toda la información necesaria directamente de Git según el principio de pull y prescinde del despliegue a través de un servidor CI. El servidor CI puede seguir utilizándose con GitOps, pero solo es responsable de la construcción y las pruebas. Puedes encontrar más información sobre el tema Continuous Integration vs. Continuous Delivery vs. Continuous Deployment en la Digital Guide.

GitOps y Kubernetes

Debido a su versatilidad, Kubernetes es probablemente la plataforma más importante para gestionar aplicaciones basadas en contenedores. Kubernetes también trabaja de forma declarativa y tiene en cuenta el estado de destino de un sistema. Por lo tanto, Kubernetes puede trabajar muy bien con GitOps y también hacer las veces de operador. Sin embargo, es importante que el código fuente y la configuración estén separados por motivos de seguridad y para una mejor visión de conjunto. El estado actual puede ser almacenado en un repositorio Git separado. También es importante utilizar las herramientas de sincronización adecuadas que impidan el acceso no autorizado y los posibles errores.

¿Qué herramientas tiene a su disposición GitOps?

Mientras tanto, existen numerosas herramientas para GitOps que pretenden simplificar y mejorar significativamente la automatización, por ejemplo, herramientas para trabajar con Kubernetes que actúan como operadores y se encargan de la implementación de GitOps. El operador (o controlador personalizado) más conocido es Flux. Algunas alternativas son ArgoCD o Fleet. Las herramientas más importantes para una mayor seguridad son SOPS de Mozilla y Sealed Secrets de Bitnami. Cluster API o Fleet son ideales para combinar con clústeres de Kubernetes. En general, el mercado es relativamente amplio, por lo que hay una herramienta adecuada para casi todas las aplicaciones.

Ventajas y desventajas de este concepto

Si quieres saber cómo de bueno y adecuado es GitOps para lo que lo necesitas, vale la pena echar un vistazo a sus ventajas y desventajas.

Ventajas

  • Productividad: Gracias a la automatización, se pueden realizar muchos más cambios en un menor tiempo. De este modo, los desarrolladores sacan los proyectos adelante con mucha más eficiencia.
  • Seguridad y estabilidad: Gracias a la precisión de los controles, los errores se detectan más rápidamente e incluso se corrigen automáticamente. Esto contribuye a una mayor seguridad y estabilidad. Gracias a los rollbacks resistentes, la restitución de estados anteriores también es mucho más fácil y el enfoque pull evita complicaciones no deseadas.
  • Unidad: Los flujos de trabajo están unificados a través de GitOps. Esto conduce a una colaboración mejor y más fácil, al igual que permite a los nuevos empleados empezar a trabajar más rápidamente.

Desventajas

  • Separación de CI y CD: Debido a la estricta separación entre CI y CD en el enfoque GitOps, puede ser difícil realizar pruebas después de ser desplegado.
  • Resumen: Especialmente cuando se trabaja con múltiples entornos, puede resultar confuso utilizar GitOps. Los numerosos repositorios y configuraciones pueden contribuir a esa confusión.