¿Qué es GitOps?

Copiar URL

GitOps es un conjunto de prácticas para gestionar las configuraciones de las aplicaciones y las infraestructuras a fin de ampliar los procesos actuales y mejorar el ciclo de vida de las aplicaciones. Usa los repositorios de Git como única fuente de información para ofrecer una infraestructura como código (IaC)

La IaC permite gestionar y preparar la infraestructura a través del código, en lugar de hacerlo mediante procesos manuales. Con este tipo de infraestructura, se crean archivos de configuración que contienen las especificaciones que esta necesita y garantizan que siempre se implemente el mismo entorno. Es fundamental en la implementación de las prácticas de DevOps y de la integración y distribución continuas (CI/CD)

GitOps exige que se describa de manera declarativa el estado deseado del sistema. Si utilizas herramientas declarativas, podrás controlar la versión de todos tus archivos de configuración y códigos fuente en Git. Dado que se hace un seguimiento de todos los cambios en el código, resulta más sencillo implementar las actualizaciones. Además, se puede usar el control de versiones para restaurar el sistema, en caso de ser necesario.

GitOps ofrece:

  • un flujo de trabajo estándar para el desarrollo de las aplicaciones;
  • mayor seguridad gracias a la mejora del sistema de supervisión y auditorías;
  • confiabilidad mejorada con un sistema de supervisión y control de versiones a través de Git;
  • uniformidad en todos los clústeres, las nubes y los entornos locales.

Descubre los operadores de Red Hat OpenShift GitOps

GitOps te proporciona las herramientas y un marco para que apliques las prácticas de DevOps (como la colaboración, la CI/CD y el control de versiones) a la automatización de la infraestructura y la implementación de las aplicaciones, así como a las prácticas de la ingeniería de plataformas (por ejemplo, las plataformas internas para desarrolladores). Los principios básicos de GitOps respaldan la ingeniería de plataformas mediante la creación de una única fuente de información para las definiciones de la infraestructura y los ciclos de vida de desarrollo de las aplicaciones.

DevOps se concentra en el cambio cultural y en ofrecer a los equipos de desarrollo y de operaciones la posibilidad de trabajar juntos de manera colaborativa.

La ingeniería de plataformas amplía el alcance de estas prácticas con herramientas, servicios y flujos de trabajo estandarizados que permiten que los equipos de desarrollo diseñen soluciones de software con mayor eficiencia. Consiste en organizar los recursos y los servicios internos para que los desarrolladores puedan diseñar soluciones sin tener que gestionar directamente esos elementos fundamentales.

La ingeniería de plataformas se ha convertido en un elemento esencial y complementario para abordar los desafíos de la expansión de DevOps en toda la empresa. Los equipos de ingeniería de plataformas crean, mantienen y mejoran de modo permanente la plataforma interna para los desarrolladores de una empresa. Además, colaboran con los equipos de desarrollo como si fueran sus clientes, ya que les proporcionan herramientas, servicios y funciones comunes y reutilizables que aportan valor. Los ingenieros de plataformas facilitan el acceso fluido de los equipos de desarrollo a la infraestructura de la empresa y los servicios de backend necesarios para diseñar y distribuir aplicaciones de software. 

Comparación entre la ingeniería de plataformas y DevOps

GitOps utiliza las filosofías y los enfoques ofrecidos a quienes invierten en una cultura de DevOps y proporciona un marco para comenzar a obtener resultados tangibles. Potencia los procesos actuales, desde el desarrollo de las aplicaciones hasta su implementación, la gestión del ciclo de vida de las aplicaciones y la configuración de la infraestructura, de modo que las empresas pueden responder con mayor facilidad a los cambios en el competitivo entorno empresarial.

GitOps implica un cambio de proceso, de modo que los equipos pueden necesitar tiempo para adoptarlo, así como una mayor colaboración y comunicación entre los miembros. Una manera de reducir estos desafíos es fomentar una cultura de retroalimentación, pero aún así pueden surgir.

Al utilizar los mismos flujos de trabajo basados en Git que ya conocen, los desarrolladores pueden trabajar en sus repositorios de código habituales, mientras que los equipos de operaciones adoptan las mismas herramientas y técnicas para gestionar la infraestructura.

Cuando realizan cambios a través de Git, pueden programar a su propio ritmo sin tener que esperar a que los equipos de operaciones asignen o aprueben los recursos.

En cuanto a los equipos de operaciones, el hecho de que puedan obtener información sobre los cambios implica que les será posible rastrear y solucionar los problemas con rapidez para mejorar la seguridad general. Los registros de auditoría actualizados permiten que las empresas reduzcan el riesgo de enfrentarse a cambios no deseados y los corrijan antes de que lleguen a la etapa de producción.

El diseño de un marco de GitOps se basa en una combinación de repositorios de Git, Kubernetes y herramientas de integración y distribución continuas (CI/CD) y de gestión de la configuración. Para elegir el conjunto de herramientas adecuado, los desarrolladores deben identificar sus necesidades y las funciones que ofrecen una solución eficiente. 

Herramientas de CI

La integración continua (CI) consiste en integrar los cambios del código en un repositorio de código fuente compartido de forma automática y frecuente. A medida que se realizan estas actualizaciones, se activan los pasos de prueba automatizados para garantizar la confiabilidad de los cambios fusionados. 

Tekton: Un marco desarrollado para Kubernetes que permite establecer sistemas de CI/CD. Ofrece a los ingenieros y los desarrolladores de plataformas la flexibilidad, las prácticas recomendadas y la estandarización que necesitan para realizar los diseños, las pruebas y las implementaciones en proveedores en la nube y sistemas locales. 

Jenkins: Es un servidor de automatización open source basado en Java. Facilita a los desarrolladores la integración de sus cambios al realizar pruebas permanentes, diseñar e implementar los proyectos de forma sencilla y con una configuración mínima. Jenkins X es una extensión del ecosistema de Jenkins que permite automatizar los procesos de CI/CD en la nube. 

Herramientas de CD

La implementación o distribución continua (CD) es un proceso de dos partes que implica la integración, la prueba y la distribución de los cambios en el código. Una vez que se automatizan las compilaciones y las pruebas de unidad e integración en la CI, la distribución continua automatiza el lanzamiento del código validado en un repositorio. Se trata de una extensión de la distribución continua e implica el lanzamiento automático de los cambios del desarrollador, desde el repositorio hasta la producción, para ponerlos a disposición de los clientes.

Argo CD: Es una herramienta declarativa de distribución continua para Kubernetes. Permite que los equipos de desarrollo implementen y gestionen las aplicaciones sin necesidad de poseer amplios conocimientos sobre Kubernetes ni acceso completo a este sistema. Con la supervisión de todo el proceso de ejecución, Argo CD garantiza que tus aplicaciones nunca dejen de estar sincronizadas con los estados deseados. 

Primeros pasos en Argo CD

Flux: Se trata de una herramienta de GitOps que automatiza la implementación en clústeres de Kubernetes gracias a que mantiene los estados del clúster sincronizados con los repositorios de Git. Se basa en un conjunto de extensiones de la API de Kubernetes y admite la implementación de aplicaciones y la gestión de infraestructuras.

Lo primero que necesitas es una infraestructura que se pueda gestionar de manera declarativa. Por eso, GitOps suele utilizarse como modelo operativo para Kubernetes y para el desarrollo de aplicaciones en la nube, y permite que Kubernetes realice implementaciones constantes.

Sin embargo, GitOps no exige el uso de esta plataforma, ya que se trata de una técnica que puede aplicarse a otros canales de implementación e infraestructura. GitOps puede usarse para diseñar canales de desarrollo, programar aplicaciones, gestionar configuraciones, preparar clústeres de Kubernetes y realizar implementaciones en registros de contenedores o Kubernetes.

Utiliza GitOps en Red Hat OpenShift

Un flujo de trabajo de GitOps es un proceso de desarrollo en el que los cambios en la infraestructura y las aplicaciones se realizan mediante solicitudes de incorporación de cambios de Git, las cuales actualizan automáticamente el estado de los sistemas activos una vez que se aprueban y unifican.

GitOps puede considerarse una evolución de la infraestructura como código (IaC) que usa Git como su sistema de control de versiones para las configuraciones de la infraestructura. Por lo general, la IaC utiliza un enfoque declarativo para gestionar la infraestructura, es decir, define el estado deseado del sistema y realiza un seguimiento del estado actual. Al igual que con la IaC, GitOps exige que se describa de manera declarativa el estado deseado del sistema. Si utilizas herramientas declarativas, podrás controlar la versión de todos tus archivos de configuración y códigos fuente en Git.

Por lo general, los canales de CI/CD se activan por eventos externos, como la inserción de un código en un repositorio. En un flujo de trabajo de GitOps, los cambios se realizan utilizando solicitudes de incorporación de cambios, las cuales modifican el estado en el repositorio de Git. 

Para implementar una nueva versión mediante un flujo de trabajo de GitOps, se debe realizar una solicitud de incorporación de cambios en Git, que modifica el estado declarado del clúster. El operador de GitOps detecta la confirmación y extrae de Git la declaración con el nuevo estado.  

Una vez que se aprueban y unifican los cambios, se aplican automáticamente a la infraestructura actual. Los desarrolladores pueden seguir usando sus prácticas de CI/CD y flujos de trabajo estándares, ya que la CD recae únicamente en el motor de GitOps y puede funcionar de manera autónoma o integrarse en una solución coordinada de CI.

Por lo general, si utilizas GitOps con Kubernetes, el operador será un operador de Kubernetes. El operador compara el estado deseado, que figura en el repositorio, con el estado real de la infraestructura implementada. En caso de encontrar diferencias entre el estado real y lo que hay en el repositorio, actualizará la infraestructura y las aplicaciones.

Un concepto importante de GitOps es la capacidad de observabilidad de todos los sistemas que puedan analizarse, la cual permite garantizar que coincidan el estado deseado y el real (es decir, el que se observa). Aunque GitOps permite determinar el estado interno de los recursos que implementa, no funciona como una herramienta de supervisión general. En cambio, Red Hat® OpenShift® Observability ofrece un conjunto completo de herramientas que utilizan indicadores, registros, rastros y eventos para que puedas superar esas limitaciones y establecer bucles de retroalimentación entre los sistemas de aplicaciones y los repositorios de Git. La combinación de GitOps y OpenShift Observability proporciona información sobre los sistemas de aplicaciones a través de la supervisión, el análisis y la resolución de problemas. 

Si utilizas solicitudes de incorporación de cambios y sistemas de control de versiones, como Git, obtendrás un panorama completo del proceso de implementación: visualizará y rastreará los cambios que se realizaron en el sistema, obtendrá un registro de auditoría y podrá revertir los cambios si algo sale mal.

Los flujos de trabajo de GitOps pueden aumentar la productividad y la velocidad del desarrollo y de las implementaciones y, al mismo tiempo, mejorar la estabilidad y fiabilidad de los sistemas.

Obtén más información sobre los flujos de trabajo de GitOps

Red Hat cuenta con una variedad de productos que respaldan tu flujo de trabajo de GitOps. Red Hat OpenShift es una plataforma de aplicaciones unificada que los administradores pueden configurar y gestionar conforme a los principios de GitOps, lo cual garantiza la uniformidad entre los clústeres de Kubernetes y los ciclos de vida de desarrollo. Red Hat OpenShift permite consolidar la administración y la gestión de las aplicaciones que se encuentran distribuidas en recursos locales y de nube pública, lo cual permite:

  • comprobar que sea similar el estado de los clústeres (las configuraciones, la supervisión, el almacenamiento), para conocer las limitaciones de la aplicación al comienzo del ciclo de desarrollo;
  • restaurar un cambio en el código en varios clústeres recuperándolos desde un estado conocido;
  • implementar un cambio enviado a Git en varios clústeres de Red Hat OpenShift;
  • asociar las configuraciones en plantillas en toda la nube híbrida.

 

GitOps Red Hat OpenShift Kubernetes diagram
 

Red Hat OpenShift GitOps es un operador que proporciona un flujo de trabajo que integra los repositorios de Git, las herramientas de integración y distribución continuas (CI/CD) y Kubernetes para desarrollar sistemas de software con mayor agilidad, seguridad y flexibilidad, pero sin poner en riesgo la calidad. Permite diseñar e integrar flujos de trabajo declarativos de distribución continua impulsados por Git directamente en la plataforma de desarrollo de las aplicaciones. Antes, se usaba una sola herramienta para la CI/CD, como Jenkins o Tekton, pero ahora se utilizan dos. Por ejemplo, puedes utilizar Jenkins o Tekton para la CI, y además GitOps, que es un motor de CD. Red Hat participa en diversos proyectos open source (como Argo CD) a fin de implementar un marco para GitOps. Argo CD Agent, disponible en Red Hat OpenShift Platform Plus, permite ajustar la gestión de la flota empresarial de clústeres múltiples y mantener la experiencia unificada que ofrece una implementación concentrada. Instala el operador de Red Hat OpenShift GitOps y desarrolla las herramientas nuevas con Argo para gestionar GitOps dentro de las implementaciones actuales de Red Hat OpenShift.

OpenShift GitOps está disponible para servicios autogestionados, en la nube y de edge computing. Los servicios de nube gestionados, como Red Hat OpenShift Service on AWS (ROSA), Microsoft Azure Red Hat OpenShift y Red Hat OpenShift Dedicated, permiten que las empresas aumenten la eficiencia operativa, se centren nuevamente en generar innovaciones y diseñen, implementen y ajusten las aplicaciones en poco tiempo. 

Las versiones autogestionadas de OpenShift, como Red Hat OpenShift Virtualization Engine, brindan la función de virtualización de esta plataforma para implementar, gestionar y ajustar máquinas virtuales. Ya sea que elijas un entorno gestionado o uno autogestionado, Red Hat ofrece planes claros para actualizar OpenShift y mantener los clústeres actualizados y con soporte. 

OpenShift GitOps admite la implementación automatizada de las máquinas virtuales y, junto con OpenShift Virtualization Engine, facilita a los usuarios la migración y la gestión de estas unidades en función de sus necesidades de virtualización. En el extremo de la red, la compilación MicroShift de Red Hat ofrece toda la potencia y capacidad de ajuste de Kubernetes, lo cual permite que las aplicaciones se escriban una vez y se ejecuten en el lugar donde se necesiten, ya sea cerca de la fuente de datos o del usuario final.

Red Hat Advanced Cluster Management for Kubernetes ofrece la gestión del ciclo de vida de clústeres múltiples de Kubernetes. Utiliza un marco de suscripción y canal, junto con normas de ubicación, para implementar las aplicaciones de forma automática en un modelo de estado deseado en múltiples clústeres. Advanced Cluster Management for Kubernetes utiliza OpenShift GitOps como motor de GitOps. Cuenta con funciones que no solo facilitan la gestión de conjuntos de aplicaciones, instancias de Argo y configuraciones de clústeres de GitOps, sino que también permiten implementar políticas. 

Red Hat Ansible® Automation Platform se encarga de que tus sistemas alcancen el estado deseado, sin importar el actual. Los playbooks de Ansible, escritos en YAML, describen el estado deseado de los sistemas, que generalmente se conservan en el control de versiones. Ansible es una de las herramientas ideales para el flujo de trabajo de GitOps. Dado que Argo y GitOps solo tienen relación con la plataforma de Kubernetes, Ansible puede utilizarse para automatizar tareas externas a esta, sobre todo cuando se trata de acciones obligatorias. Con la integración de Red Hat Advanced Cluster Management, Red Hat OpenShift GitOps y Red Hat Ansible Automation Platform, los equipos de DevOps pueden asegurarse de que las configuraciones se gestionen y mantengan según sea necesario para mejorar los canales de CI/CD.

Descubre algunos ejemplos reales para aplicar las prácticas de GitOps en Kubernetes

Recurso

Agiliza el desarrollo de aplicaciones con Red Hat OpenShift

Red Hat OpenShift ayuda a tu empresa a diseñar, agilizar y ampliar las cargas de trabajo tradicionales y basadas en inteligencia artificial con seguridad y cumplimiento normativo. Obtén más información al respecto.

OpenShift GitOps

OpenShift GitOps permite a los clientes diseñar e integrar flujos de trabajo declarativos de distribución continua impulsados por Git directamente en la plataforma de desarrollo de las aplicaciones.

Más información

CI/CD: La integración y la distribución continuas

El objetivo de la CI/CD, que significa integración y distribución o implementación continuas, es optimizar y agilizar el ciclo de vida del desarrollo del software.

¿Qué es la observabilidad?

La observabilidad es la capacidad de supervisar, medir y conocer el estado de un sistema o una aplicación mediante la evaluación de sus resultados, registros e indicadores de rendimiento.

Cómo abordar los indicadores de DevOps

Los indicadores de DevOps permiten realizar un seguimiento de la eficacia de las prácticas de DevOps, las cuales están relacionadas con el desarrollo de software y las operaciones de TI.

DevOps: lecturas recomendadas