Cómo implementar en Kubernetes usando Argo CD y GitOps

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación de Argo CD en su clúster
  • Paso 2: Reenvío de puertos para acceder a Argo CD
  • Paso 3: Cómo trabajar con Argo CD desde la línea de comandos
  • Paso 4: Manejo de múltiples clústeres (opcional)
  • Paso 5: Implementación de una aplicación de ejemplo (opcional)
  • Conclusión
  • El uso de Kubernetes para implementar su aplicación puede brindar importantes ventajas de infraestructura, como escalabilidad flexible, administración de componentes distribuidos y control sobre diferentes versiones de su aplicación. Sin embargo, con ese mayor control viene una mayor complejidad. Los sistemas de integración continua e implementación continua ( CI/CD ) generalmente funcionan en un alto nivel de abstracción para proporcionar control de versiones, registro de cambios y funcionalidad de reversión. Un enfoque popular para esta capa de abstracción se llama GitOps .

    GitOps, como lo propuso originalmente Weaveworks en una publicación de blog de 2017 , utiliza Git como una “única fuente de verdad” para los procesos de CI/CD, integrando cambios de código en un único repositorio compartido por proyecto y utilizando solicitudes de extracción para administrar la infraestructura y la implementación.

    Existen varias herramientas que utilizan Git como punto focal para los procesos de DevOps en Kubernetes. En este tutorial, aprenderá a utilizar Argo CD , una herramienta declarativa de entrega continua. Argo CD proporciona herramientas de entrega continua que sincronizan e implementan automáticamente su aplicación cada vez que se realiza un cambio en su repositorio de GitHub. Al administrar la implementación y el ciclo de vida de una aplicación, proporciona soluciones para el control de versiones, las configuraciones y las definiciones de aplicaciones en entornos de Kubernetes, organizando datos complejos con una interfaz de usuario fácil de entender. Puede manejar varios tipos de manifiestos de Kubernetes, incluidos Jsonnet, aplicaciones Kustomize , gráficos de Helm y archivos YAML/json, y admite notificaciones de webhook de GitHub, GitLab y Bitbucket.

    En este artículo, utilizará Argo CD para sincronizar e implementar una aplicación desde un repositorio de GitHub.

    Si está buscando un servicio de alojamiento de Kubernetes administrado, consulte nuestro servicio de Kubernetes simple y administrado diseñado para el crecimiento .

    Prerrequisitos

    Para seguir este tutorial, necesitarás:

    • Un par de claves SSH en su máquina Linux/MacOS/BSD local. Si no ha utilizado claves SSH antes, puede aprender a configurarlas siguiendo esta explicación sobre cómo configurar claves SSH en su máquina local . Si utiliza Windows, debería trabajar en el entorno del Subsistema de Windows para Linux .

    • Un clúster de Kubernetes existente que comprenda al menos un nodo de trabajo. kubectl debe estar instalado en su entorno de trabajo y debe poder conectarse a su clúster. Managed Kubernetes de DigitalOcean le proporcionará una configuración como esta de forma predeterminada. Si está utilizando Managed Kubernetes de DigitalOcean, debe revisar Cómo conectarse al clúster .

    • Familiaridad con los conceptos de Kubernetes. Consulte el artículo Introducción a Kubernetes para obtener más detalles.

    Paso 1: Instalación de Argo CD en su clúster

    Para instalar Argo CD, primero debe tener una configuración válida de Kubernetes configurada con kubectl, desde la cual puede hacer ping a sus nodos de trabajo. Puede probar esto ejecutando kubectl get nodes:

    1. kubectl get nodes

    Este comando debería devolver una lista de nodos con el Readyestado:

    OutputNAME                   STATUS   ROLES    AGE   VERSIONpool-uqv8a47h0-ul5a7   Ready    none   22m   v1.21.5pool-uqv8a47h0-ul5am   Ready    none   21m   v1.21.5pool-uqv8a47h0-ul5aq   Ready    none   21m   v1.21.5

    Si kubectlno devuelve un conjunto de nodos con el Readyestado, debe revisar la configuración del clúster y la documentación de Kubernetes .

    A continuación, cree el argocdespacio de nombres en su clúster, que contendrá Argo CD y sus servicios asociados:

    1. kubectl create namespace argocd

    Después de eso, puedes ejecutar el script de instalación de CD de Argo proporcionado por los mantenedores del proyecto.

    1. kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

    Una vez que la instalación se complete correctamente, puede usar el watchcomando para verificar el estado de sus pods de Kubernetes:

    1. watch kubectl get pods -n argocd

    De forma predeterminada, debería haber cinco pods que eventualmente recibirán el Runningestado como parte de una instalación estándar de CD de Argo.

    OutputNAME                                  READY   STATUS    RESTARTS   AGEargocd-application-controller-0       1/1     Running   0          2m28sargocd-dex-server-66f865ffb4-chwwg    1/1     Running   0          2m30sargocd-redis-5b6967fdfc-q4klp         1/1     Running   0          2m30sargocd-repo-server-656c76778f-vsn7l   1/1     Running   0          2m29sargocd-server-cd68f46f8-zg7hq         1/1     Running   0          2m28s

    Puede presionar Ctrl+Cpara salir de la watchinterfaz. ¡Ahora tiene Argo CD ejecutándose en su clúster de Kubernetes! Sin embargo, debido a la forma en que Kubernetes crea abstracciones en torno a sus interfaces de red, no podrá acceder a él directamente sin reenviar puertos desde dentro de su clúster. Aprenderá cómo manejar eso en el siguiente paso.

    Paso 2: Reenvío de puertos para acceder a Argo CD

    Debido a que Kubernetes implementa servicios en direcciones de red arbitrarias dentro de su clúster, deberá reenviar los puertos correspondientes para poder acceder a ellos desde su máquina local. Argo CD configura un servicio denominado argocd-serveren el puerto 443 internamente. Debido a que el puerto 443 es el puerto HTTPS predeterminado y es posible que esté ejecutando otros servicios HTTP/HTTPS, es una práctica común reenviarlos a otros puertos elegidos arbitrariamente, como 8080, de la siguiente manera:

    1. kubectl port-forward svc/argocd-server -n argocd 8080:443

    El reenvío de puertos bloqueará la terminal en la que se esté ejecutando mientras esté activo, por lo que probablemente querrás ejecutarlo en una nueva ventana de terminal mientras continúas trabajando. Puedes presionar Ctrl+Cpara salir sin problemas de un proceso de bloqueo como este cuando quieras detener el reenvío del puerto.

    Mientras tanto, deberías poder acceder a Argo CD en un navegador web accediendo a localhost:8080. Sin embargo, se te solicitará una contraseña de inicio de sesión que deberás recuperar mediante la línea de comandos en el siguiente paso. Probablemente tendrás que hacer clic en una advertencia de seguridad porque Argo CD aún no se ha configurado con un certificado SSL válido.

    Nota: El mejor uso de certificados HTTPS LetsEncrypt con Kubernetes se logra con el uso de herramientas adicionales como Cert-Manager .

    Paso 3: Cómo trabajar con Argo CD desde la línea de comandos

    Para los siguientes pasos, deberá tener el argocdcomando instalado localmente para interactuar con su instancia de Argo CD y cambiar la configuración en ella. La documentación oficial de Argo CD recomienda que lo instale a través del administrador de paquetes Homebrew . Homebrew es muy popular para administrar herramientas de línea de comandos en MacOS y, más recientemente, se ha adaptado a Linux para facilitar el mantenimiento de herramientas como esta.

    Si aún no tienes instalado Homebrew, puedes recuperarlo e instalarlo con un comando de una línea:

    1. ​​/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

    Es posible que se le solicite su contraseña durante el proceso de instalación. Luego, debería tener el brewcomando disponible en su terminal. Puede usarlo para instalar Argo CD:

    1. brew install argocd

    Esto, a su vez, proporciona el argocdcomando. Antes de usarlo, deberá kubectlvolver a usarlo para recuperar la contraseña de administrador que se generó automáticamente durante la instalación, de modo que pueda usarla para iniciar sesión. Le pasará una ruta a un archivo JSON particular que se almacena con secretos de Kubernetes y extraerá el valor relevante:

    1. kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
    OutputfbP20pvw-o-D5uxH

    Luego, puede iniciar sesión en su panel de control de Argo CD volviendo a localhost:8080un navegador e iniciando sesión como adminusuario con su propia contraseña:

    Una vez que todo esté funcionando, puede usar las mismas credenciales para iniciar sesión en Argo CD a través de la línea de comandos, ejecutando argocd login. Esto será necesario para realizar la implementación desde la línea de comandos más adelante:

    1. argocd login localhost:8080

    Recibirá nuevamente la advertencia de certificado equivalente en la línea de comandos y deberá ingresar ypara continuar cuando se le solicite. Si lo desea, puede cambiar su contraseña a algo más seguro o más fácil de recordar ejecutando argocd account update-password. Después de eso, tendrá una configuración de CD de Argo completamente funcional. En los pasos finales de este tutorial, aprenderá a usarlo para implementar algunas aplicaciones de ejemplo.

    Paso 4: Manejo de múltiples clústeres (opcional)

    Antes de implementar una aplicación, debe revisar dónde desea implementarla realmente. De manera predeterminada, Argo CD implementará aplicaciones en el mismo clúster en el que se ejecuta Argo CD, lo cual está bien para una demostración, pero probablemente no sea lo que desee en producción. Para enumerar todos los clústeres conocidos en su máquina actual, puede usar kubectl config:

    1. kubectl config get-contexts -o name
    Outputtest-deploy-clustertest-target-cluster

    Suponiendo que ha instalado Argo CD en test-deploy-cluster, y desea usarlo para implementar aplicaciones en test-target-cluster, puede registrarse test-target-clusteren Argo CD ejecutando argocd cluster add:

    1. argocd cluster add target-k8s

    Esto agregará los detalles de inicio de sesión del clúster adicional a Argo CD y permitirá que Argo CD implemente servicios en el clúster.

    Paso 5: Implementación de una aplicación de ejemplo (opcional)

    Ahora que tiene Argo CD en ejecución y comprende cómo implementar aplicaciones en diferentes clústeres de Kubernetes, es hora de ponerlo en práctica. El proyecto Argo CD mantiene un repositorio de aplicaciones de ejemplo que se diseñaron para mostrar los fundamentos de GitOps. Muchos de estos ejemplos son puertos de la misma guestbookaplicación de demostración a diferentes tipos de manifiestos de Kubernetes, como Jsonnet . En este caso, implementará el helm-guestbookejemplo, que utiliza un gráfico de Helm , una de las soluciones de administración de Kubernetes más duraderas.

    Para ello, utilizará el argocd app createcomando, proporcionando la ruta al repositorio Git, el helm-guestbookejemplo específico y pasando su destino y espacio de nombres predeterminados:

    1. argocd app create helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-server https://kubernetes.default.svc --dest-namespace default

    Después de “crear” la aplicación dentro de Argo CD, puedes verificar su estado con argocd app get:

    1. argocd app get helm-guestbook
    OutputName:               helm-guestbookProject:            defaultServer:             https://kubernetes.default.svcNamespace:          defaultURL:                https://localhost:8080/applications/helm-guestbookRepo:               https://github.com/argoproj/argocd-example-apps.gitTarget:Path:               helm-guestbookSyncWindow:         Sync AllowedSync Policy:        noneSync Status:        OutOfSync from  (53e28ff)Health Status:      MissingGROUP  KIND        NAMESPACE  NAME            STATUS     HEALTH   HOOK  MESSAGE       Service     default    helm-guestbook  OutOfSync  Missingapps   Deployment  default    helm-guestbook  OutOfSync  Missing

    El OutOfSyncestado de la aplicación es normal. Recuperaste el gráfico de Helm de la aplicación desde Github y creaste una entrada para él en Argo CD, pero aún no creaste ningún recurso de Kubernetes para él. Para implementar la aplicación, ejecutarás argocd app sync:

    1. argocd app sync helm-guestbook

    synces sinónimo de implementación aquí de acuerdo con los principios de GitOps: el objetivo al usar Argo CD es que su aplicación siempre realice un seguimiento 1:1 con su configuración ascendente.

    OutputTIMESTAMP                  GROUP        KIND   NAMESPACE                  NAME    STATUS    HEALTH        HOOK  MESSAGE2022-01-19T11:01:48-08:00            Service     default        helm-guestbook  OutOfSync  Missing2022-01-19T11:01:48-08:00   apps  Deployment     default        helm-guestbook  OutOfSync  Missing2022-01-19T11:01:48-08:00            Service     default        helm-guestbook    Synced  Healthy2022-01-19T11:01:48-08:00            Service     default        helm-guestbook    Synced   Healthy              service/helm-guestbook created2022-01-19T11:01:48-08:00   apps  Deployment     default        helm-guestbook  OutOfSync  Missing              deployment.apps/helm-guestbook created2022-01-19T11:01:49-08:00   apps  Deployment     default        helm-guestbook    Synced  Progressing              deployment.apps/helm-guestbook createdName:               helm-guestbookProject:            defaultServer:             https://kubernetes.default.svcNamespace:          defaultURL:                https://localhost:8080/applications/helm-guestbookRepo:               https://github.com/argoproj/argocd-example-apps.gitTarget:Path:               helm-guestbookSyncWindow:         Sync AllowedSync Policy:        noneSync Status:        Synced to  (53e28ff)Health Status:      ProgressingOperation:          SyncSync Revision:      53e28ff20cc530b9ada2173fbbd64d48338583baPhase:              SucceededStart:              2022-01-19 11:01:49 -0800 PSTFinished:           2022-01-19 11:01:50 -0800 PSTDuration:           1sMessage:            successfully synced (all tasks run)GROUP  KIND        NAMESPACE  NAME            STATUS  HEALTH       HOOK  MESSAGE       Service     default    helm-guestbook  Synced  Healthy            service/helm-guestbook createdapps   Deployment  default    helm-guestbook  Synced  Progressing        deployment.apps/helm-guestbook created

    ¡Ya ha implementado correctamente una aplicación con Argo CD! Es posible hacer lo mismo desde la interfaz web de Argo CD, pero normalmente es más rápido y reproducible implementarla mediante la línea de comandos. Sin embargo, es muy útil verificar el panel web de Argo CD después de la implementación para verificar que sus aplicaciones se estén ejecutando correctamente. Puede comprobarlo abriendo localhost:8080en un navegador:

    En este punto, lo último que debe hacer es asegurarse de poder acceder a su nueva implementación en un navegador. Para ello, deberá reenviar otro puerto, como lo hizo para Argo CD. Internamente, la helm-guestbookaplicación se ejecuta en el puerto HTTP normal 80y, para evitar conflictos con cualquier cosa que pueda estar ejecutándose en su propio puerto 80o en el puerto 8080que está usando para Argo CD, puede reenviarla al puerto 9090:

    1. kubectl port-forward svc/helm-guestbook 9090:80

    Como antes, probablemente querrás hacer esto en otra terminal, porque bloqueará esa terminal hasta que presiones Ctrl+Cpara detener el reenvío del puerto. Luego puedes abrir localhost:9090en una ventana del navegador para ver tu aplicación de libro de visitas de ejemplo:

    Cualquier envío posterior a este repositorio de Github se reflejará automáticamente en ArgoCD, que volverá a sincronizar su implementación y proporcionará disponibilidad continua.

    Conclusión

    Ya ha visto los aspectos básicos de la instalación y la implementación de aplicaciones con Argo CD. Debido a que Kubernetes requiere tantas capas de abstracción, es importante asegurarse de que sus implementaciones sean lo más fáciles de mantener posible, y la filosofía de GitOps es una buena solución.

    A continuación, es posible que desee obtener más información sobre la implementación de TOBS, The Observability Stack , para monitorear el tiempo de actividad, el estado y el registro de su clúster de Kubernetes.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion