Ruta de aprendizaje: aplicaciones escalables - Centralizar los cambios con Config Sync


Este conjunto de tutoriales está dirigido a administradores de TI y operadores que quieran desplegar, ejecutar y gestionar entornos de aplicaciones modernas que se ejecuten en Google Kubernetes Engine. A lo largo de esta serie de tutoriales, aprenderás a configurar la monitorización y las alertas, escalar cargas de trabajo y simular errores. Todo ello con la aplicación de microservicios de ejemplo Cymbal Bank:

  1. Crear un clúster y desplegar una aplicación de ejemplo
  2. Monitorizar con Google Cloud Managed Service para Prometheus
  3. Escalar cargas de trabajo
  4. Simular un fallo
  5. Centralizar la gestión de cambios (este tutorial)

Descripción general y objetivos

A medida que creas nuevos servicios y aplicaciones, puede que quieras probar los cambios en diferentes entornos. A medida que tu organización crezca, es posible que necesites configuraciones de clúster diferentes para distintos equipos. Gestionar varios clústeres con configuraciones diferentes puede ser complicado. Puedes usar herramientas de GitOps como Config Sync para gestionar estos retos.

En el tutorial para crear un clúster, creaste un clúster y desplegaste la aplicación Cymbal Bank en él.

En este tutorial, aprenderás a almacenar los manifiestos de Kubernetes de tu aplicación en un repositorio de Git centralizado y a usar herramientas como Config Sync para desplegar una aplicación en varios clústeres de una flota. Aprenderás a completar las siguientes tareas:

  • Crear un repositorio de Git y conectarlo a Cloud Build

  • Crear un clúster, registrarlo en una flota e instalar Config Sync en la flota de clústeres

  • Usar un paquete de flota para desplegar Cymbal Bank y otros recursos en un clúster o en una flota

Costes

Si habilitas GKE y despliegas la aplicación de ejemplo Cymbal Bank para esta serie de tutoriales, se te aplicarán cargos por clúster de GKE en Google Cloud , tal como se indica en nuestra página de precios, hasta que inhabilites GKE o elimines el proyecto.

También eres responsable de otros Google Cloud costes que se generen al ejecutar la aplicación de ejemplo de Cymbal Bank, como los cargos de las máquinas virtuales de Compute Engine y los balanceadores de carga.

Antes de empezar

Para aprender a almacenar, modificar y desplegar recursos desde un repositorio de Git, debes completar el primer tutorial para crear un clúster de GKE que use el modo Autopilot y desplegar la aplicación de ejemplo basada en microservicios Cymbal Bank.

Te recomendamos que completes este conjunto de tutoriales de Cymbal Bank en orden. A medida que avances en el conjunto de tutoriales, adquirirás nuevas habilidades y usarás más Google Cloud productos y servicios.

Para usar Config Sync y desplegar manifiestos de Kubernetes desde un repositorio de Git en tus clústeres, debes habilitar las siguientes APIs:

gcloud services enable configdelivery.googleapis.com cloudbuild.googleapis.com developerconnect.googleapis.com

Crear un repositorio de Git y conectarlo a Cloud Build

Un paquete de flota es una colección de manifiestos de recursos de Kubernetes. Si agrupas esos manifiestos en un paquete, puedes desplegar una aplicación en varios clústeres de una flota directamente desde un repositorio Git. Con este flujo de trabajo, obtendrás las siguientes ventajas:

  • Mejora de la escalabilidad al implementar recursos en una flota en lugar de aplicarlos manualmente clúster por clúster.
  • Actualizaciones más seguras con lanzamientos progresivos.
  • Flujos de trabajo adicionales procedentes de archivos de configuración de origen centralizado en Git, como el control de versiones y las aprobaciones.

Para mostrar cómo almacenar y hacer cambios en Git, bifurca el repositorio de Cymbal Bank y conéctalo a Cloud Build.

Bifurca el repositorio de Cymbal Bank

En este tutorial, harás cambios en tu repositorio de Git para demostrar cómo te ayuda Config Sync a gestionar de forma segura los cambios en los recursos de Kubernetes y a implementarlos. Para hacer esos cambios directamente, debes bifurcar el repositorio de Git en lugar de clonarlo.

Para bifurcar el repositorio, sigue estos pasos:

  1. En GitHub, ve al repositorio de ejemplo Cymbal Bank (bank-of-anthos).

  2. Haz clic en Bifurcar para obtener una copia del repositorio con los archivos de origen.

    Texto alternativo

  3. Si fuera necesario, inicia sesión en tu cuenta de GitHub. Si tienes acceso a otras organizaciones o equipos en GitHub, asegúrate de bifurcar el repositorio en tu cuenta personal.

Ahora tienes una bifurcación del repositorio de Cymbal Bank. Todos los manifiestos de Kubernetes que implementes se encuentran en la carpeta /kubernetes-manifests.

Conectar el repositorio a Cloud Build

Cloud Build es un servicio que puede ejecutar compilaciones en Google Cloud, que puedes usar para la entrega continua al estilo de GitOps. El servicio de paquetes de flotas de Config Sync usa Cloud Build para obtener los recursos de Kubernetes de tu repositorio de Git y desplegarlos en tus clústeres. Cuando usas un paquete de flota, solo tienes que configurar Cloud Build una vez por cada repositorio que quieras sincronizar. La API del paquete de flota crea automáticamente los activadores de compilación a través de Cloud Build.

Para conectar tu repositorio de GitHub a Cloud Build, sigue estos pasos:

  1. Abre la página Cloud Build en la Google Cloud consola y, a continuación, selecciona Repositorios.

    Abre la página Repositorios.

  2. Asegúrate de que estás en la página Repositorios de segunda generación. Si es necesario, selecciona Ver repositorios (2.ª gen.).

  3. Haz clic en Crear conexión de host.

  4. En el menú Región, selecciona us-central1 (Iowa).

  5. En el campo Name (Nombre), escribe cymbal-bank-connection como nombre de la conexión.

  6. Haz clic en Conectar.

  7. Si es la primera vez que conectas Cloud Build a tu cuenta de GitHub, sigue estos pasos:

    1. Acepta la solicitud de tu token de OAuth de GitHub. El token se almacena en Secret Manager para usarlo con la conexión de GitHub de Cloud Build. Haz clic en Continuar.
    2. Instala Cloud Build en tu repositorio de GitHub. Selecciona Instalar en una cuenta nueva.
    3. En la nueva ventana de GitHub que se abre, selecciona la cuenta de GitHub en la que has creado la bifurcación de Cymbal Bank anteriormente. En un entorno de producción, puede seleccionar otras cuentas o repositorios a los que tenga acceso delegado.
    4. Sigue las indicaciones de autenticación para confirmar tu identidad en GitHub.
    5. En la ventana de GitHub para el acceso al repositorio de Cloud Build, elige Solo repositorios seleccionados.
    6. En el menú desplegable que muestra los repositorios, selecciona tu bifurcación de bank-of-anthos.
    7. Haz clic en Guardar.
  8. En la página Cloud Build de la Google Cloud consola, haz clic en Vincular repositorio para conectar un repositorio de Git a Cloud Build.

  9. En el menú Conexión, selecciona cymbal-bank-connection.

  10. En el menú Repositorios, selecciona tu fork bank-of-anthos.

  11. Selecciona Vincular.

Crear clústeres

En el primer tutorial de esta serie, creaste un clúster e implementaste la aplicación Cymbal Bank en ese clúster. En un escenario real, es poco probable que solo tengas un clúster que gestionar. GKE te permite agrupar clústeres en una flota, que es un grupo lógico de clústeres que se pueden gestionar conjuntamente. Dentro de una flota, puedes agrupar aún más tus clústeres. Por ejemplo, algunos clústeres pueden representar diferentes entornos o pertenecer a distintos equipos. Por ejemplo, puedes tener un clúster de desarrollo, un clúster de staging y un clúster de producción. En una organización grande, los equipos pueden tener sus propios clústeres para diferentes entornos. Como administradores de TI u operadores, esto puede significar que tenéis que gestionar decenas de clústeres.

Cuando se trata de desplegar aplicaciones o recursos individuales, como políticas personalizadas, en todos estos clústeres, las funciones de GKE, como Config Sync, pueden ayudarte a gestionar esos despliegues a gran escala.

Para mostrar cómo desplegar recursos en diferentes entornos o en una flota de clústeres, crea un clúster y despliega la aplicación Cymbal Bank en él:

  1. Crea un clúster de GKE que simule un entorno de desarrollo:

    gcloud container clusters create-auto scalable-apps-dev \
      --project=PROJECT_ID \
      --region=REGION \
      --fleet-project=PROJECT_ID \
      --release-channel=rapid
    

    Haz los cambios siguientes:

    • PROJECT_ID por el ID generado automáticamente del proyecto que has creado en la sección anterior. El ID del proyecto suele ser diferente del nombre del proyecto. Por ejemplo, tu proyecto podría llamarse scalable-apps, pero su ID podría ser scalable-apps-567123.
    • REGION con la región en la que quieras crear el clúster, como us-central1.
  2. Las etiquetas son pares clave-valor que puedes añadir a los recursos de GKE para organizarlos. En el caso de los paquetes de flota, puedes usar etiquetas de pertenencia a la flota para personalizar los clústeres a los que se dirige el paquete de flota. No se admiten otros tipos de etiquetas.

    Añade una etiqueta a la pertenencia a la flota:

    gcloud container fleet memberships update scalable-apps-dev \
        --update-labels=env=dev
    

    Cuando crees el paquete de flota más adelante en este tutorial, esta etiqueta se asegurará de que los recursos solo se implementen en el clúster scalable-apps-dev y no en el clúster scalable-apps del primer tutorial de esta serie.

Instalar Config Sync

Instala Config Sync en ambos clústeres:

  1. En la Google Cloud consola, ve a la página Configuración de la sección Funciones.

    Ve a Configuración

  2. Haz clic en Instalar Config Sync.
  3. Deja seleccionada la opción Actualizaciones manuales.
  4. El menú de versiones debería tener la versión más reciente de Config Sync de forma predeterminada. Si es necesario, selecciona la versión más reciente.
  5. En Opciones de instalación, seleccione Instalar Config Sync en toda la flota (recomendado).
  6. Haz clic en Instalar Config Sync.
  7. En la pestaña Configuración de Config Sync, consulta el campo Estado de la lista de clústeres. Al cabo de unos minutos, el estado será "Pendiente" hasta que el clúster se configure correctamente para Config Sync. El estado puede tardar hasta 10 minutos en cambiar a Habilitado.

Implementar Cymbal Bank

En el primer tutorial de esta serie, usaste comandos de kubectl para aplicar las configuraciones de la aplicación a tu clúster. En este tutorial, usarás la función de paquetes de flota de Config Sync para desplegar esas mismas configuraciones en un nuevo clúster. En una sección posterior, verás un ejemplo de cómo añadir un nuevo recurso a tu repositorio de Git e implementar esos recursos en una flota de clústeres.

Configurar una cuenta de servicio para Cloud Build

Una cuenta de servicio es un tipo especial de cuenta que suele utilizar una aplicación en lugar de una persona. Como práctica recomendada al crear cuentas de servicio, debes crear cuentas de servicio para un único servicio o tarea específicos y asignarles roles granulares. En este tutorial, crearás una cuenta de servicio para conceder permisos a Cloud Build para obtener recursos de Kubernetes de tu repositorio de Git y desplegarlos en tus clústeres.

Para crear la cuenta de servicio y conceder los permisos necesarios, sigue estos pasos:

  1. Crea la cuenta de servicio:

    gcloud iam service-accounts create "cymbal-bank-service-account"
    
  2. Concede a la cuenta de servicio permiso para obtener recursos de tu repositorio de Git añadiendo un enlace de política de gestión de identidades y accesos para el rol Editor de paquetes de recursos:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/configdelivery.resourceBundlePublisher'
    

    Si se te pide, selecciona None como condición de la política.

  3. Concede a la cuenta de servicio el permiso para escribir registros añadiendo una vinculación de política de gestión de identidades y accesos para el rol Escritor de registros:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/logging.logWriter'
    

    Si se te pide, selecciona None como condición de la política.

Crear una versión de la aplicación Cymbal Bank

Un paquete de flota requiere una etiqueta de versión semántica para saber desde qué versión de tu repositorio se va a implementar. Es recomendable crear nuevas versiones cuando hagas cambios en tu repositorio, ya que esto te ayudará a controlar las versiones y te permitirá volver a una versión estable si es necesario.

  1. En una ventana del navegador web de tu fork de GitHub de Cymbal Bank, en la sección Releases (Lanzamientos) de la barra lateral, haz clic en Create a new release (Crear lanzamiento).

  2. Seleccione el menú Elegir una etiqueta y escriba v1.0.0 como etiqueta. Haz clic en Crear etiqueta.

  3. Haz clic en Publicar versión.

Configurar la autenticación

Al igual que en el primer tutorial de esta serie, debes crear un JWT para gestionar la autenticación de usuarios y un secreto de Kubernetes para almacenar el JWT del nuevo clúster que has creado. Es recomendable que cada clúster tenga un JWT único para la autenticación.

  1. En Cloud Shell, crea el JWT:

    openssl genrsa -out jwtRS256.key 4096
    openssl rsa -in jwtRS256.key -outform PEM -pubout -out jwtRS256.key.pub
    
  2. Crea el secreto de Kubernetes:

    kubectl create secret generic jwt-key --from-file=./jwtRS256.key --from-file=./jwtRS256.key.pub
    

Desplegar la aplicación Cymbal Bank con un paquete de flota

Un recurso FleetPackage es una API declarativa para desplegar varios manifiestos de Kubernetes en una flota de clústeres.

Para crear un paquete de flota, debes definir una especificación de FleetPackage que apunte al repositorio con tus recursos de Kubernetes que hayas conectado a Cloud Build. A continuación, aplica el recurso FleetPackage, que obtiene los recursos de Git y los implementa en toda la flota.

  1. En Cloud Shell, define la ubicación predeterminada de los comandos de configdelivery Google Cloud CLI. Al igual que cuando conectas tu repositorio a Cloud Build, debes usar us-central1 mientras la función de paquetes de flota esté en versión preliminar:

    gcloud config set config_delivery/location us-central1
    
  2. Crea un archivo llamado fleetpackage-spec.yaml con el siguiente contenido:

    resourceBundleSelector:
      cloudBuildRepository:
        name: projects/PROJECT_ID/locations/us-central1/connections/cymbal-bank-connection/repositories/REPOSITORY_NAME
        tag: v1.0.0
        serviceAccount: projects/PROJECT_ID/serviceAccounts/cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com
        path: kubernetes-manifests
    target:
      fleet:
        project: projects/PROJECT_ID
        selector:
          matchLabels:
            env: dev
    rolloutStrategy:
      rolling:
        maxConcurrent: 1
    

    Sustituye REPOSITORY_NAME por el nombre de tu repositorio, tal como aparece en la conexión de Cloud Build.

    Los campos del selector coinciden con la etiqueta de pertenencia a la flota que has creado antes. De esta forma, la aplicación Cymbal Bank solo se desplegará en el clúster scalable-apps-dev. El clúster scalable-apps del primer tutorial no se verá afectado. En la siguiente sección, verás un ejemplo de un paquete de flota que se dirige a todos los clústeres de una flota.

    El campo de estrategia de lanzamiento controla cómo se implementan los recursos en los clústeres. En este ejemplo, solo vas a implementar en un clúster, por lo que este campo no cambia la forma en que se lleva a cabo el lanzamiento. Sin embargo, si tienes muchos clústeres, este ajuste asegura que los archivos de recursos se apliquen a un clúster antes de pasar al siguiente. De esta forma, puedes monitorizar el progreso del lanzamiento.

  3. Crea el paquete de flota:

    gcloud alpha container fleet packages create cymbal-bank-fleet-package \
        --source=fleetpackage-spec.yaml \
        --project=PROJECT_ID
    
  4. Verifica que se haya creado el paquete de flota:

    gcloud alpha container fleet packages list
    

    En el resultado se muestra el estado del activador de compilación. Al cabo de unos segundos, el campo MESSAGE se actualizará con un resultado similar al siguiente:

    MESSAGES: Build status: WORKING. The release is still being built; see the build status on the following page:
    

    Puede hacer clic en el enlace proporcionado para ver los registros de streaming del trabajo de Cloud Build. Cloud Build puede tardar unos minutos en procesar el activador de compilación.

  5. Cuando el activador de compilación se completa correctamente, el resultado de gcloud alpha container fleet packages list es similar al siguiente:

    NAME: cymbal-bank-fleet-package
    STATE: ACTIVE
    CREATE_TIME: 2024-07-09T15:15:56
    ACTIVE_ROLLOUT: rollout-20240709-153621
    LAST_COMPLETED_ROLLOUT:
    MESSAGES:
    

    El paquete de flota empieza a desplegar los recursos de Kubernetes en tu flota.

  6. En la página Google Kubernetes Engine de la Google Cloud consola, selecciona tu clúster scalable-apps-dev y, a continuación, ve a la página Cargas de trabajo para ver una vista agregada de las cargas de trabajo que se están desplegando en todos tus clústeres de GKE:

    Abre la página Cargas de trabajo.

    Es posible que veas algunos errores mientras Autopilot ajusta tus pods para satisfacer las solicitudes de recursos. Al cabo de unos minutos, verás que tus pods empiezan a ejecutarse con el estado OK.

  7. Para ver la interfaz web de Cymbal Bank, sigue estos pasos:

    1. En la página Google Kubernetes Engine de la Google Cloud consola, ve a la página Gateways, Services & Ingress (Gateways, servicios y entrada).

      Ir a la página Gateways, Services & Ingress

    2. Para encontrar el ingreso de Cymbal Bank, haz clic en la pestaña "Servicios" y busca el servicio con el nombre frontend.

    3. Haga clic en el enlace Endpoint (Endpoint) de la entrada frontend, como 198.51.100.143:80, para abrir la interfaz web de Cymbal Bank.

Desplegar recursos en una flota

Ahora, imagina que quieres ampliar tu aplicación Cymbal Bank con un nuevo microservicio. Quieres desplegar este microservicio en todos tus clústeres actuales y en los que añadas a la flota en el futuro. Si usas un paquete de flota, puedes desplegarlo en varios clústeres y obtener un despliegue automático en los clústeres nuevos.

Añadir recursos a tu repositorio de Git

Para mostrar cómo se añade un nuevo servicio a una aplicación, se crea una implementación básica de nginx y se añade a los clústeres:

  1. En una ventana del navegador web de tu fork de GitHub de Cymbal Bank, haz clic en Add file (Añadir archivo) y, a continuación, en Create new file (Crear archivo).

  2. Ponle el nombre new-resource/nginx.yaml al archivo y pega el siguiente contenido:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:1.14.2
            name: nginx
            ports:
            - containerPort: 80
    
  3. Haz clic en Confirmar cambios...

  4. En el cuadro de diálogo de confirmación, mantén seleccionada la opción Confirmar directamente en la rama main y haz clic en Confirmar cambios.

  5. En la página principal del repositorio de Cymbal Bank bifurcado, selecciona Lanzamientos en la barra lateral.

  6. En la parte superior de la página, selecciona Crear borrador.

  7. Seleccione el menú Elegir una etiqueta y escriba v1.1.0 como etiqueta. Haga clic en Crear etiqueta.

  8. Haz clic en Publicar versión.

Desplegar un recurso en clústeres con un paquete de flota

Para implementar el nuevo recurso, crea un paquete de flota:

  1. Este paquete de flota se dirige a todos los clústeres de tu flota, ya que no contiene ningún campo de selector. Esto también significa que cualquier clúster que se añada a la flota en el futuro tendrá la implementación de nginx añadida automáticamente.

    En Cloud Shell, crea un archivo llamado new-deployment-fleet-package.yaml con el siguiente contenido:

    resourceBundleSelector:
      cloudBuildRepository:
        name: projects/PROJECT_ID/locations/us-central1/connections/cymbal-bank-connection/repositories/REPOSITORY_NAME
        tag: v1.1.0
        serviceAccount: projects/PROJECT_ID/serviceAccounts/cymbal-bank-service-account@PROJECT_ID.iam.gserviceaccount.com
        path: kubernetes-manifests/new-resource
    target:
      fleet:
        project: projects/PROJECT_ID
    rolloutStrategy:
      rolling:
        maxConcurrent: 1
    
  2. Crea el paquete de flota para iniciar la implementación:

    gcloud alpha container fleet packages create new-deployment-fleet-package \
        --source=new-deployment-fleet-package.yaml \
        --project=PROJECT_ID
    
  3. Verifica que se haya creado el paquete de flota:

    gcloud alpha container fleet packages list
    

    Puede hacer clic en el enlace proporcionado para ver los registros de streaming del trabajo de Cloud Build.

    El paquete de flota empieza a desplegar los recursos de Kubernetes en tu flota. El lanzamiento puede tardar unos minutos en iniciarse y completarse.

  4. En la página de Google Kubernetes Engine de la Google Cloud consola, ve a la página Cargas de trabajo para ver una vista agregada de las cargas de trabajo que se están desplegando en todos tus clústeres de GKE:

    Abre la página Cargas de trabajo.

Puedes seguir explorando diferentes estrategias de implementación con paquetes de flota. Por ejemplo, puedes probar a añadir diferentes tipos de recursos a tu repositorio bifurcado y usar diferentes configuraciones de paquetes de flota para desplegarlos. También puedes usar un paquete de flota para eliminar los recursos que hayas implementado en tus clústeres. Para obtener más información sobre los paquetes de flota, consulta el artículo Implementar paquetes de flota de la documentación de Config Sync.

Eliminar recursos de una flota

Al igual que puedes implementar recursos en una flota, puedes eliminar recursos en una flota con un paquete de flota.

Para quitar recursos concretos, sigue estos pasos generales:

  1. Elimina el recurso de tu repositorio de Git.
  2. Crea una versión de Git y una etiqueta.
  3. Actualiza el campo tag del paquete de flota.
  4. Ejecuta el comando de actualización de paquetes de flota.

También puedes eliminar el paquete de flota, lo que también eliminará los recursos que gestionara.

Por ejemplo, si quieres quitar la implementación de nginx de la sección anterior, ejecuta el siguiente comando:

gcloud alpha container fleet packages delete new-deployment-fleet-package --force

Limpieza

Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en este tutorial, elimina el proyecto que has creado.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Para eliminar tu repositorio bifurcado, sigue estos pasos:

  1. En una ventana del navegador web de tu fork de Cymbal Bank en GitHub, haz clic en Settings (Configuración) debajo del nombre del repositorio.

  2. En la página de configuración general (que está seleccionada de forma predeterminada), ve a la sección Zona de peligro y haz clic en Eliminar este repositorio.

  3. Haz clic en Quiero eliminar este repositorio.

  4. Lee las advertencias y haz clic en He leído y entiendo estos efectos.

  5. Para verificar que estás eliminando el repositorio correcto, escribe el nombre del repositorio de Cymbal Bank bifurcado en el campo de texto.

  6. Haz clic en Eliminar este repositorio.

Siguientes pasos

Antes de empezar a crear tu propio entorno de clúster de GKE similar al que has visto en este conjunto de tutoriales, consulta algunas de las consideraciones de producción.