GitOps para Kubernetes
Las aplicaciones nativas de la nube están dominando el mercado con su rendimiento mejorado y alta eficiencia. Si bien hay más recursos para admitir aplicaciones nativas de la nube que se ejecutan como microservicios, la administración de una arquitectura de nube compleja sigue siendo un desafío. Cuantos más microservicios ejecute, más tareas tendrá que afrontar para mantener el entorno de la nube en buen estado y funcionando sin problemas.
La automatización se convierte en una solución obvia al problema. Kubernetes en particular, ahora es compatible con nuevos enfoques como Infraestructura como código y una gran cantidad de herramientas de automatización. Aún así, el ciclo CI / CD de hoy, exige una arquitectura más robusta y ágil. Aquí es donde GitOps para Kubernetes resulta útil.
¿Qué es GitOps?
GitOps es un nuevo enfoque para la implementación continua que aprovecha Git como una única fuente de verdad para la infraestructura declarativa y las aplicaciones, proporcionando tanto control de revisiones como de cambios. Con GitOps, un sistema se ejecuta mediante el envío de solicitudes de extracción o “pull requests” (y combinaciones posteriores) para lograr el estado deseado del sistema representado en un repositorio de Git.
GitOps con Kubernetes proporciona el siguiente nivel de infraestructura como código e infraestructura inmutable a través de sistemas declarativos de entrega continua. El estilo declarativo de configuración y el modelo de reconciliación activa amplían los beneficios principales de la plataforma para la implementación, la supervisión y la gestión del ciclo de vida de las aplicaciones de Kubernetes.
El marco está diseñado para integrarse bien con cualquier canal (pipeline) de CI / CD, incluso cuando utiliza herramientas de terceros para administrar su canal de forma nativa.
De hecho, GitOps es más un flujo de trabajo o un enfoque que una herramienta real. Es un enfoque que puede ayudarlo a optimizar sus ciclos de CI / CD sin tener que alterar la forma en que desarrolla e implementa microservicios en la nube.
Dado que GitOps se desarrolla como un framework para la entrega continua de aplicaciones nativas de la nube, puede confiar en el framework para simplificar ciertos procesos dentro de su canalización. Integra Git, una herramienta con la que ya estamos familiarizados, y herramientas de CD a la perfección.
En esencia, GitOps combina las canalizaciones de CI / CD tradicionales con los flujos de trabajo de Git, lo que permite una mejor gestión de extremo a extremo de Kubernetes y el desarrollo de aplicaciones. Los dos se tratan como un proceso unificado en lugar de como procesos separados.
GitOps se caracteriza por:
- Mejores prácticas en la implementación, administración y monitoreo de aplicaciones y clústeres de contenedores
- Una experiencia centrada en el desarrollador para la gestión de aplicaciones, donde se utilizan canales de CI/CD y flujos de trabajo completamente automatizados que utilizan Git para el desarrollo y las operaciones.
- Uso del sistema de control de revisiones de Git para rastrear y aprobar cambios en la infraestructura y el entorno de ejecución de las aplicaciones.
Beneficios de GitOps
A partir de la definición, es fácil ver cómo GitOps puede traer muchos beneficios, comenzando con una experiencia mejorada del desarrollador . Los desarrolladores ya no tienen que preocuparse por empaquetar sus códigos en contenedores y trabajar con clústeres de Kubernetes. En cambio, pueden concentrarse en sus códigos, confiando en herramientas familiares como Git para manejar todo lo demás.
Esta es una mejora definitiva para la experiencia del desarrollador. Incluso con la ayuda de los especialistas de DevOps con el proceso, la implementación de aplicaciones sigue siendo un cuello de botella en muchos casos, simplemente porque se necesitan códigos y microservicios bien empaquetados para una implementación sencilla. GitOps con su enfoque poco convencional resuelve ese cuello de botella.
También se puede esperar una mejor estabilidad de las aplicaciones cuando es implementado con este enfoque. Git tiene un sistema de registro detallado que permite una auditoría y un seguimiento sencillos, y usted se beneficia de la misma herramienta de registro cuando utiliza GitOps como enfoque. Los cambios en el clúster de Kubernetes se registran en logs, lo que hace que las auditorías en la nube sean mucho más fáciles de administrar.
Incluso se pueden rastrear detalles como errores y caídas. Los detalles como quién realiza los cambios y los resultados de esos cambios se registran en cada paso del camino. Ya sea que esté tratando de cumplir con las mejores prácticas de seguridad o persiga el cumplimiento de SOC 2, la utilización de los registros de Git ciertamente facilita el mantenimiento de un sistema estable.
La mayoría de las organizaciones tienen que invertir sustancialmente en sus procesos y sistemas para ser compatibles y auditables. Con GitOps y Kubernetes, la mayoría de los requisitos de cumplimiento y auditabilidad se pueden satisfacer con un esfuerzo mínimo. Lea más sobre cómo lograr el cumplimiento de SOC 2 con nosotros aquí .
También está el hecho de que GitOps ayuda a los equipos de desarrollo a mejorar la productividad . Uno de los paradigmas más destacados que emergen del movimiento DevOps es el modelo de configuración y sistemas declarativos. En pocas palabras, con modelos declarativos, describe lo que desea lograr, en lugar de cómo llegar allí.
La eliminación de tareas relacionadas con la infraestructura también es de gran ayuda. Muchos desarrolladores, a pesar de los enfoques tradicionales de DevOps, no se sienten completamente cómodos administrando su infraestructura de nube como código. Todavía hay un nivel de complejidad involucrado en el proceso.
Tradicionalmente, el mantenimiento de la infraestructura tiende a convertirse en un cuello de botella más que en una función de apoyo. Muchos equipos de desarrollo terminaron dividiendo las tareas de gestión de la infraestructura con su principal canal de CI / CD, lo que provocó más ineficiencias en el proceso. GitOps elimina el cuello de botella por completo sin alterar la canalización.
GitOps también contribuye a una mejor seguridad y estandarización de un entorno de nube. Los cambios de código se envían a Git antes de que se procese más. Se pueden implementar medidas de seguridad adicionales, como verificaciones de códigos contra estándares de seguridad. También es una práctica común integrar un servidor de pruebas en el proceso.
Una única fuente de verdad es un rol asumido por Git en este escenario. Siempre que un problema de seguridad afecte al sistema, siempre puede encontrar la causa raíz revisando el repositorio de Git. Las alertas y los registros se envían automáticamente a Git cada vez que se realizan cambios en el clúster de Kubernetes directamente, lo que agrega una capa de seguridad al enfoque.
Además, GitOps ayuda en la recuperación de entornos de infraestructura al almacenar sus especificaciones declarativas del entorno bajo control del origen como fuente de verdad. Al tener una definición completa de lo que debería ser el medio ambiente (la única fuente de verdad), facilita la recreación del medio ambiente en caso de desastre.
Por último, está el hecho de que GitOps hace que todo el sistema sea más confiable . Puede bifurcar y revertir los cambios controlando el repositorio de Git. Los mismos comandos de Git que usa para administrar códigos y ramas se pueden usar para administrar todo el entorno de la nube. Cuando algo sale mal, volver a una determinada instantánea es fácil.
GitOps también agrega una automatización compleja a la mezcla. Todo lo que se puede automatizar en Git se puede implementar en GitOps. Al mismo tiempo, el enfoque en sí mismo automatiza la administración de su clúster de Kubernetes a través de comandos simples. Es un método que realmente satisface las necesidades de las aplicaciones modernas nativas de la nube.
Principios básicos de GitOps
Antes de llegar a cómo puede implementar GitOps como un enfoque, también es necesario observar más de cerca los principios básicos de este enfoque.
1. Todo lo relacionado con la infraestructura se describe de forma declarativa. Todas las configuraciones de servidor se definen como hechos y se incorporan completamente en el repositorio de Git para lograr la máxima fiabilidad. Declarativo también significa que las declaraciones de la aplicación se versionan completamente.
2. Los estados del sistema están versionados en Git. Esta es una de las principales razones por las que recuperarse de un error con GitOps es muy fácil. Puede volver a una determinada versión de forma coherente. En lugar de dedicar horas a la recuperación ante desastres, solo necesita dedicar unos minutos.
3. Los cambios deben aprobarse, pero los aprobados se pueden implementar en el sistema. No es necesario un flujo de trabajo de implementación por separado ni un paquete previo de nuevos códigos antes de la implementación. Todo sucede automáticamente.
4. La corrección y la seguridad se mantienen como partes del proceso. No es necesario incorporar flujos de trabajo de seguridad e integridad separados en la canalización de CI / CD. La infraestructura como código se ha mejorado a un nivel completamente nuevo.
El flujo de trabajo de GitOps
GitOps es maravillosamente simple en cómo maneja los cambios. El proceso comienza con nuevos códigos que se envían a Git para su posterior revisión. Una vez que los nuevos códigos se borran y aprueban, se fusionan con Git. Aquí es donde se activa una acción para implementar nuevos códigos.
Git activará la creación de nuevas imágenes al trabajar junto con su herramienta de canalización de CD favorita. El proceso está completamente automatizado, por lo que solo necesita definir los parámetros una vez. Combinado con herramientas como AWS CodePipeline y AWS CodeCommit , las posibilidades son infinitas. ¿No es usuario de AWS? Integre la implementación continua de Google, Cloud Build, con las herramientas de integración continua de Jenkins . O el CI de Cloud Build también puede vincularse a la herramienta de CD Spinnaker de Google .
Una herramienta popular para usar es Flux . Flux funciona a la perfección con Amazon EKS para un entorno de nube verdaderamente escalable. CodeBuild se puede usar para enviar nuevos códigos a ECR, después de lo cual Flux realizará automáticamente los cambios necesarios en su clúster de EKS.
¿Qué es Flux?
Flux automatiza la implementación de contenedores en Kubernetes. Llena el vacío de automatización que existe entre la construcción y el monitoreo.
La característica principal de Flux es la sincronización automatizada entre un repositorio de control de versiones y un clúster. Si realiza algún cambio en su repositorio, esos cambios se implementan automáticamente en su clúster.
Otra característica es la automatización de la implementación de contenedores. Monitoreará continuamente una variedad de registros de contenedores e implementará nuevas versiones cuando corresponda.
Esto es realmente útil para mantener el repositorio y, por lo tanto, el clúster actualizado. También permite que los equipos separados tengan sus propias canalizaciones de implementación, ya que Flux puede ver la nueva imagen y actualizar el clúster en consecuencia. Sin embargo, esta función también se puede desactivar y las imágenes se pueden bloquear a una versión específica.
Integraciones con otras herramientas de Devops
Para la personalización de la configuración en entornos y clústeres, Flux viene con soporte integrado para Kustomize y Helm.
El diagrama de flujo de trabajo Flux
(fluxcd / helm-operator-get-started, 2020)
Flux supervisará todos los repositorios de imágenes de contenedores que especifique. Detecta nuevas imágenes, activa implementaciones y actualiza automáticamente la configuración en ejecución deseada de su clúster de Kubernetes, y lo hace dentro de los límites de una política de implementación configurable.
Cómo instalar Flux
Si ya está utilizando Kubernetes y Helm, siga este tutorial detallado de Flux para saber cómo empezar aquí . El tutorial está actualizado para la versión 1.18.0 de Flux.
Conclusión
Como puede ver, los pasos reales involucrados para configurar Flux, implementar una aplicación, darle acceso a Flux y ver las modificaciones completas son muy sencillos.
Muchos desarrolladores ya están aprovechando GitOps y obteniendo los beneficios. Es un enfoque que potenciará aún más a Kubernetes como plataforma en la nube. Espere ver que GitOps se implemente en más proyectos de desarrollo en el futuro.
Caylent proporciona una función DevOps-as-a-Service crítica para empresas de alto crecimiento que buscan soporte experto con Kubernetes, seguridad en la nube, infraestructura en la nube y canalizaciones de CI / CD. Nuestros servicios administrados y de consultoría son una opción más rentable que la contratación interna, y escalamos a medida que su equipo y su empresa crecen. Consulte algunos de los casos de uso, conozca cómo trabajamos con los clientes y lea más sobre nuestra oferta DevOps-as-a-Service .
Referencias
GitHub. 2020. Fluxcd / Helm-Operator-Get-Started . [online] Disponible aquí