¿Qué es GITOPS?

El termino GITOPS comienza a darse a conocer en 2017, en paralelo a la creciente popularización de nuevas tecnologías como Contenedores, Docker, Cloud, etc.

Este nuevo concepto derivado de la palabra GIT (sistema de control de versiones) y OPS (operaciones) es un conjunto de buenas prácticas y el concepto de que todo gira en torno a GIT. GITOPS se considera una evolución de infraestructura como código (Infrastructure as Code o IaC) incorporando las buenas prácticas de DevOps, chocando así con el modelo tradicional establecido de CI/CD (Integración Continua/Distribución Continua).

Este modelo tradicional de CI/CD trazaba una línea continua desde la subida de código al repositorio, seguido de la complicación de la imagen y el despliegue en su parte final.

Jorge Andrada Prieto
Jorge Andrada PrietoTécnico de sistemas Cloud y DevOps en Viewnext

Este proceso lineal que se usa en CI/CD se divide en 2 cuando aplicamos las prácticas GitOps:

  • Por un lado, se compilará la imagen y por otro se actualizará un repositorio de git, donde se indicará que se ha subido de versión la imagen para un despliegue.
  • La herramienta usada en GitOps se encargará de que el despliegue en el clúster coincida con este nuevo estado deseado registrado en Git.

Una de las normas básicas de GITOPS es que «Si no está en GIT, no debe ser desplegado; y si está debe ser desplegado en el mismo estado que indica GIT». Esto nos permite tener un mecanismo para tener versionada la creación, eliminación y modificación de cualquier objeto que compone una aplicación.

LineasGIT

Fuente de la imagen: https://www.adictosaltrabajo.com/2020/05/25/implementando-gitops-con-argocd/

Hablamos de objetos ya que GitOps y Kubernetes van de la mano, como veremos más adelante.

Principios de GitOps

  • El entorno se escribirá en lenguaje declarativo: Permite leer fácilmente el código desde el repositorio.
  • Git como fuente de la verdad: Cualquier modificación de configuración debe de estar almacenada en el repositorio. Git se convierte en la única fuente de la verdad (single source of truth). Simplifica el proceso de subida, reversiones o rollbacks, seguimiento de las modificaciones, recuperación rápida en caso de desastre (puede desplegarse en otro clúster fácilmente). TODO queda registrado, cualquier transacción.
  • Aprobación de cambios: cualquier cambio necesita ser gestionado por Git, usando pull request, ramas protegidas, etc. Es un modelo abierto a la personalización de cada organización. Lo importante es la necesidad de aprobación y una vez aprobado debe de poder aplicarse automáticamente en el sistema.
  • Uso de agentes: un agente se encargará de revisar el repositorio en busca de cambios y controlará que el sistema esté en el estado solicitado en GIT. El sistema avisará de cualquier discrepancia o error.

Ventajas

  • Subidas de versiones.
  • Auditoría.
  • Marcha atrás en caso de fallo: todo está en Git.
  • Observabilidad: Despliegues siempre en el estado deseado, modificar o borrar un objeto es posible, pero automáticamente será recreado.
  • Facilidad gestión y administración.
  • Todas las ventajas que implican usar GIT apoyándose en las ventajas que aportan los contenedores.

Inconvenientes

Existe un gran inconveniente que es el almacenamiento de objetos tipo Secrets en Git. Recordemos que un valor cifrado de un secret, realmente ha sido convertido a base64, por lo que es muy fácil descifrarlo. Hay empresas que han puesto solución a este problema, como Bitnami al desarrollar “Sealed Secret” y que cualquiera puede implementar fácilmente en su clúster.

Con toda seguridad otras empresas ofrecerán su sistema de GitOps y darán solución a esta problemática.

GitOps en Kubernetes

Como se ha mencionado con anterioridad, GitOps y Kubernetes están ligados, ya que todo en Kubernetes está definido como objetos. Estos objetos vienen definidos en yaml o json, por lo que son fáciles de gestionar en Git. Por ejemplo, un configmap registrado en Git, debe de coincidir con el desplegado en el clúster.

GITOPSpipeline

Fuente de la imagen: https://www.weave.works/technologies/gitops/

GitOps en OpenShift

RedHat ha apostado por ArgoCD para añadir GitOps con soporte empresarial.

Ha desarrollado un operador (RedHat OpenShift GitOps) que despliega argo y está totalmente integrado en OpenShift, por ejemplo, si un objeto no está en el estado deseado, alertmanager enviará una notificación de ArgoCD.

También se integra con OpenShift Pipelines (tekton) para CI. Tekton es una herramienta de CI / CD que maneja todas las partes del ciclo de vida del desarrollo, desde la creación de imágenes hasta la implementación de objetos de clúster.

Desde ayer día 3 de mayo, RedHat anunció la «Disponibilidad General» (GA) de Openshift GitOps y OpenShift Pipelines.

Herramienta de GitOps: ArgoCD

Es una de las herramientas más populares para GitOps perteneciente a la CNCF, extiende la API de Kubernetes mediante CRDs (Custom Resource Definitions), por lo que podemos definir la configuración de las aplicaciones de argocd y las instancias como objetos de Kubernetes.

Ofrece una interfaz clara y sencilla de gestionar, pinta de forma automática todos los objetos y sus dependencias.

Una vez desplegado se encarga de ir realizando pull a los repositorios agregados para comparar el estado deseado de los objetos, con los desplegados en el clúster o los clústers.

Nos va a permitir desplegar fácilmente una aplicación en varios clústers de forma centralizada, asegurando que cada aplicación está correctamente desplegada en todos los clústers.

Es capaz de desplegar manifiestos tradicionales como yamls, json, pero también procedentes de herramientas como Helm, Kustomize, Ksonnet, etc.

Es compatible con autenticación: OIDC, OAuth2, LDAP, SAML 2.0, GitHub, GitLab, Microsoft , etc. Y usa política basada en roles.

Para la gestión de secrets, ese gran problema que comentamos anteriormente, ofrece compatibilidad con: Bitnami Sealed Secrets, Godaddy K8S External Secrets, Vault, Banzai Cloud Bank Vaults, Helm Secrets, Kustomize secret, AWS secret operator.

GitOps ARGOCD

Fuente de imagen: https://argoproj.github.io/

Conclusiones

El uso de GitOps se ha convertido en algo esencial para mi trabajo. Al administrar y gestionar varios clústers de varios clientes, mantengo el control de qué, cuándo y cómo se ha modificado ese objeto que ha derivado en una incidencia y su rápida resolución debido al uso de Git.

El despliegue de objetos usando herramientas de CI/CD tradicionales no puede equipararse al uso de GitOps. Por ejemplo, puedes desplegar un configmap en un namespace usando Jenkins, pero nadie te asegura que tras varios meses ese configmap esté en el estado correcto.

Da igual si eres desarrollador, administrador… En el momento que empieces a usar GitOps, descubrirás que no puedes trabajar sin estas facilidades que otorga.

Otros artículos relacionados

2023-11-21T15:06:44+01:005 mayo, 2021|

¡Compártelo en tus redes sociales!

Ir a Arriba