Ruta de aprendizaje: Aplicaciones escalables - Centraliza los cambios con el Sincronizador de configuración


Este conjunto de instructivos es para administradores y operadores de TI que deseen implementar, ejecutar y administrar entornos de aplicaciones modernos que se ejecutan en la edición Enterprise de Google Kubernetes Engine (GKE). A medida que avanzas con este conjunto de instructivos, aprenderás a configurar la supervisión y las alertas, escalar cargas de trabajo y simular fallas, todo con la aplicación de microservicios de muestra de Cymbal Bank:

  1. Crea un clúster y, luego, implementa una app de ejemplo
  2. Supervisa con Google Cloud Managed Service para Prometheus
  3. Escala las cargas de trabajo
  4. Simula una falla
  5. Centraliza la administración de cambios (este instructivo)

Descripción general y objetivos

A medida que compilas servicios y aplicaciones nuevos, es posible que desees probar los cambios en diferentes entornos. A medida que tu organización crezca, es posible que necesites configuraciones de clústeres diferentes para diferentes equipos. Administrar varios clústeres con diferentes configuraciones puede ser un desafío. Puedes usar herramientas de GitOps, como el Sincronizador de configuración, para ayudarte a administrar estos desafíos.

En el instructivo para crear un clúster, creaste un clúster y, luego, implementaste la aplicación de Cymbal Bank en él.

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

  • Crea un repositorio de Git y conéctalo a Cloud Build

  • Crea un clúster, regístralo en una flota y, luego, instala el Sincronizador de configuración en tu flota de clústeres

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

Costos

Habilitar GKE Enterprise e implementar la aplicación de ejemplo Cymbal Bank para esta serie de instructivos significa que se generan cargos por clúster para GKE Enterprise en Google Cloud , como se indica en nuestra página de precios, hasta que inhabilites GKE Enterprise o borres el proyecto.

También eres responsable de otros costos de Google Cloud generados mientras ejecutas la aplicación de ejemplo de Cymbal Bank, como los cargos por las VMs de Compute Engine y los balanceadores de cargas.

Antes de comenzar

Si quieres aprender a almacenar, realizar cambios y, también, implementar recursos desde un repositorio de Git, debes completar el primer instructivo para crear un clúster de GKE que use el modo Autopilot y, luego, implementar la aplicación basada en microservicios de muestra de Cymbal Bank.

Te recomendamos que completes este conjunto de instructivos para Cymbal Bank en orden. A medida que avanzas en el conjunto de instructivos, adquieres habilidades nuevas y usas productos y servicios adicionales de Google Cloud .

Para usar el Sincronizador de configuración y, así, implementar manifiestos de Kubernetes desde un repositorio de Git a tus clústeres, debes habilitar las siguientes APIs:

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

Crea un repositorio de Git y conéctalo a Cloud Build

Un paquete de flota es una colección de manifiestos de recursos de Kubernetes. Si agrupas esos manifiestos como un paquete, puedes implementar una aplicación en varios clústeres de una flota directamente desde un repositorio de Git. Con este flujo de trabajo, obtienes los siguientes beneficios:

  • Mejora la escalabilidad mediante la implementación de recursos en una flota en lugar de aplicarlos de forma manual clúster por clúster.
  • Actualizaciones más seguras con lanzamientos progresivos
  • Flujos de trabajo adicionales a partir de archivos de configuración de origen centralizados en Git, como el control de versión y las aprobaciones.

Para demostrar cómo almacenar y realizar cambios en Git, crea una bifurcación del repositorio de Cymbal Bank y conéctala a Cloud Build.

Bifurca el repositorio de Cymbal Bank

En este instructivo, realizarás cambios en tu repositorio de Git para demostrar cómo el Sincronizador de configuración te ayuda a administrar de forma segura los cambios en los recursos de Kubernetes y a implementarlos. Para realizar esos cambios directamente, debes bifurcar el repositorio de Git en lugar de clonarlo.

Para crear una bifurcación del repositorio, sigue estos pasos:

  1. En GitHub, ve al repositorio de muestra de 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 es necesario, accede a 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.

Conecta el repositorio a Cloud Build

Cloud Build es un servicio que puede ejecutar compilaciones en Google Cloud, que puedes usar para la entrega contínua de estilo GitOps. El servicio de paquetes de flota del Sincronizador de configuración usa Cloud Build para recuperar los recursos de Kubernetes de tu repositorio de Git y, luego, implementarlos en tus clústeres. Cuando usas un paquete de flota, debes configurar Cloud Build solo 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:

  1. Abre la página de Cloud Build en la consola de Google Cloud y, luego, selecciona Repositorios.

    Abrir la página repositorios

  2. Asegúrate de estar en la página Repositorios de 2ª gen. 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) como tu región.

  5. En el campo Nombre, escribe cymbal-bank-connection como el nombre de tu conexión.

  6. Haz clic en Conectar.

  7. Si es la primera vez que conectas Cloud Build a tu cuenta de GitHub, completa los siguientes 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. Haga 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 creaste la bifurcación de Cymbal Bank antes. En un entorno de producción, puedes seleccionar otras cuentas o repositorios a los que hayas delegado el acceso.
    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 de Cloud Build de la consola de Google Cloud , haz clic en Link repository para conectar un nuevo repositorio de Git a Cloud Build.

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

  10. En el menú Repositorios, selecciona tu bifurcación de bank-of-anthos.

  11. Selecciona Vincular.

Crea clústeres

En el primer instructivo de esta serie, creaste un clúster y, luego, implementaste la aplicación de Cymbal Bank en él. En una situación real, es poco probable que tengas solo un clúster para administrar. GKE te permite agrupar clústeres en una flota: un grupo lógico de clústeres que se pueden administrar en conjunto. Dentro de una flota, puedes agrupar más tus clústeres con algunos que representen diferentes entornos o que pertenezcan a diferentes equipos. Por ejemplo, puedes tener un clúster de desarrollo, un clúster de etapa de pruebas y un clúster de producción. En una organización grande, los equipos individuales pueden tener sus propios clústeres para diferentes entornos. Como administradores u operadores de TI, esto podría significar que tienes que administrar decenas de clústeres.

Cuando se trata de implementar aplicaciones o recursos individuales, como políticas personalizadas, en todos estos clústeres, las funciones de GKE Enterprise, como el Sincronizador de configuración, pueden ayudarte a administrar esas implementaciones a gran escala.

Para demostrar cómo implementar recursos en diferentes ambientes o en una flota de clústeres, creas un clúster nuevo y, luego, implementas la aplicación de 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
    

    Reemplaza lo siguiente:

    • PROJECT_ID por el ID generado de forma automática del proyecto que creaste en la sección anterior. El ID del proyecto a menudo es diferente del nombre del proyecto. Por ejemplo, tu proyecto puede ser sscaleable-apps, pero tu ID del proyecto puede ser scalable-apps-567123.
    • REGION por la región en la que deseas crear el clúster, como us-central1.
  2. Las etiquetas son pares clave-valor que puedes agregar a los recursos de GKE para ayudarte a organizarlos. En el caso de los paquetes de flota, puedes usar etiquetas de membresía de flota para personalizar a qué clústeres se segmenta el paquete de flota. No se admiten otros tipos de etiquetas.

    Agrega una etiqueta a la membresía de 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 instructivo, esta etiqueta asegurará que los recursos solo se implementen en el clúster scalable-apps-dev y no en el clúster scalable-apps del primer instructivo de esta serie.

Instalar el Sincronizador de configuración

Instala el Sincronizador de configuración en ambos clústeres:

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

    Ir a Configuración

  2. Haz clic en Instalar el Sincronizador de configuración.
  3. Mantén seleccionada la opción Actualizaciones manuales.
  4. El menú de versiones debería mostrar la versión más reciente del Sincronizador de configuración de forma predeterminada. Si es necesario, selecciona la versión más reciente.
  5. En Opciones de instalación, selecciona Instalar el Sincronizador de configuración en toda la flota (recomendado).
  6. Haz clic en Instalar el Sincronizador de configuración.
  7. En la pestaña Configuración del Sincronizador de configuración, consulta el campo Estado de la lista de clústeres. Después de unos minutos, el estado aparecerá como “Pendiente” hasta que el clúster se configure correctamente para el Sincronizador de configuración. El estado puede tardar hasta 10 minutos en cambiar a Habilitado.

Implementa Cymbal Bank

En el primer instructivo de esta serie, usaste comandos de kubectl para aplicar las configuraciones de la aplicación a tu clúster. En este instructivo, usarás la función de paquetes de flota del Sincronizador de configuración para implementar esas mismas configuraciones en un clúster nuevo. En una sección posterior, verás un ejemplo de cómo agregar un recurso nuevo a tu repositorio de GitHub y, luego, implementar esos recursos en una flota de clústeres.

Configura una cuenta de servicio para Cloud Build

Una cuenta de servicio es un tipo especial de cuenta que, por lo general, es usada por una aplicación, en lugar de una persona. Como práctica recomendada, cuando crees cuentas de servicio, debes crearlas para un solo servicio o tarea específicos y otorgarles roles detallados. En este instructivo, crearás una cuenta de servicio para otorgar permisos a Cloud Build para recuperar recursos de Kubernetes desde tu repositorio de Git y, luego, implementarlos en tus clústeres.

Para crear la cuenta de servicio y otorgar los permisos necesarios, completa los siguientes pasos:

  1. Cree la cuenta de servicio:

    gcloud iam service-accounts create "cymbal-bank-service-account"
    
  2. Para otorgarle permiso a la cuenta de servicio para recuperar recursos de tu repositorio de Git, agrega una vinculación de política de IAM para el rol de publicador 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 solicita, selecciona None como la condición de la política.

  3. Para otorgarle permiso a la cuenta de servicio para escribir registros, agrega una vinculación de políticas de IAM para el rol de 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 solicita, selecciona None como la condición de la política.

Crea una versión para la aplicación de Cymbal Bank

Un paquete de flota requiere una etiqueta de versión semántica para saber desde qué versión del repositorio se debe implementar. Es una buena idea crear versiones nuevas cuando realices cambios en tu repositorio, ya que esto ayuda con el control de versiones y facilita la reversión a una versión estable si es necesario.

  1. En una ventana del navegador web de tu bifurcación de GitHub de Cymbal Bank, en la sección Versiones de la barra lateral, haz clic en Crear nueva versión.

  2. Selecciona el menú Elegir una etiqueta y escribe v1.0.0 como etiqueta. Haz clic en Crear etiqueta nueva.

  3. Haz clic en Publicar versión.

Configura la autenticación

Al igual que en el primer instructivo de esta serie, debes crear un JWT para controlar la autenticación del usuario y un Secret de Kubernetes para almacenar el JWT del clúster nuevo que creaste. Es conveniente 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 Secret de Kubernetes:

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

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

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

Para crear un paquete de flota, debes definir una especificación FleetPackage que apunte al repositorio con los recursos de Kubernetes que conectaste a Cloud Build. Luego, aplicas el recurso FleetPackage, que recupera los recursos de Git y los implementa en toda la flota.

  1. En Cloud Shell, establece la ubicación predeterminada para los comandos de configdelivery Google Cloud CLI. Al igual que con la conexión de tu repositorio a Cloud Build, debes usar us-central1 mientras la función de paquetes de flotas 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
    

    Reemplaza 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 membresía de la flota que creaste antes. Esto garantiza que la aplicación de Cymbal Bank solo se implemente en el clúster scalable-apps-dev. El clúster scalable-apps del primer instructivo no se verá afectado. En la siguiente sección, verás un ejemplo de un paquete de flota que se orienta 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 implementarás en un clúster, por lo que este campo no cambiará la forma en que se realizará el lanzamiento. Sin embargo, si tienes muchos clústeres, este parámetro de configuración garantiza que todos los archivos de recursos se apliquen a un clúster antes de pasar al siguiente. Esto te permite supervisar 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. Después de unos segundos, el campo MESSAGE se actualiza con un resultado similar al siguiente:

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

    Puedes hacer clic en el vínculo proporcionado para ver los registros de transmisión 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 de forma correcta, 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 comienza a implementar los recursos de Kubernetes en tu flota.

  6. En la página de Google Kubernetes Engine de la consola de Google Cloud , selecciona tu clúster de scalable-apps-dev y, luego, ve a la página Cargas de trabajo para ver una vista agregada de las cargas de trabajo que se implementan 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. Después de unos minutos, deberías ver que tus pods comienzan a ejecutarse con el estado OK.

  7. Para ver la interfaz web de Cymbal Bank, completa los siguientes pasos:

    1. En la página de Google Kubernetes Engine de la consola de Google Cloud , ve a la página Puertas de enlace, Ingress y servicios.

      Dirígete a la página Gateways, Ingress y Services

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

    3. Haz clic en el vínculo Extremo para la entrada frontend, como 198.51.100.143:80, para abrir la interfaz web de Cymbal Bank.

Implementa recursos en una flota

A continuación, imagina una situación en la que quieras extender tu aplicación de Cymbal Bank con un microservicio nuevo. Quieres implementar este microservicio en todos tus clústeres actuales y en cualquier clúster futuro que se agregue a la flota. Cuando usas un paquete de flota, puedes implementar en varios clústeres y obtener una implementación automática en clústeres nuevos.

Agrega recursos nuevos a tu repositorio de Git

Para demostrar cómo agregar un servicio nuevo a tu aplicación, crea una implementación básica de nginx y agrégala a tus clústeres:

  1. En una ventana del navegador web de tu bifurcación de Cymbal Bank en GitHub, haz clic en Agregar archivo y, luego, en Crear nuevo archivo.

  2. Asigna el nombre new-resource/nginx.yaml al archivo y pégale 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 sucursal main y, luego, haz clic en Confirmar cambios.

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

  6. En la parte superior de la página, elige Crear un borrador de una nueva versión.

  7. Selecciona el menú Elegir una etiqueta y escribe v1.1.0 como etiqueta. Haz clic en Crear etiqueta nueva.

  8. Haz clic en Publicar versión.

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

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

  1. Este paquete de flota se orienta a todos los clústeres de tu flota, ya que no contiene un campo de selector. Esto también significa que a cualquier clúster futuro que se agregue a la flota se le agregará automáticamente la implementación de nginx.

    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 el lanzamiento:

    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
    

    Puedes hacer clic en el vínculo proporcionado para ver los registros de transmisión del trabajo de Cloud Build.

    El paquete de flota comienza a implementar los recursos de Kubernetes en tu flota. El lanzamiento puede tardar unos minutos en comenzar y completarse.

  4. En la página de Google Kubernetes Engine de la consola de Google Cloud , ve a la página Cargas de trabajo para ver una vista agregada de las cargas de trabajo que se implementan 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 flotas. Por ejemplo, puedes intentar agregar diferentes tipos de recursos a tu repositorio bifurcado y usar diferentes parámetros de configuración de paquetes de flota para implementarlos. También puedes usar un paquete de flota para borrar los recursos que implementaste en tus clústeres. Para obtener más información sobre los paquetes de flota, consulta Implementa paquetes de flota en la documentación del Sincronizador de configuración.

Borra recursos de una flota

Al igual que puedes implementar recursos en una flota, también puedes borrar recursos en una flota con un paquete de flota.

Para quitar recursos individuales, sigue estos pasos generales:

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

Como alternativa, puedes borrar el paquete de flota, lo que también borrará los recursos que administraba.

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

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en este instructivo, borra el proyecto que creaste.

  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 borrar tu repositorio bifurcado, sigue estos pasos:

  1. En una ventana del navegador web de la bifurcación de Cymbal Bank en GitHub, en el nombre de tu repositorio, haz clic en Configuración.

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

  3. Haz clic en Quiero borrar este repositorio.

  4. Lee las advertencias y haz clic en Leí y comprendo estos efectos.

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

  6. Haz clic en Borrar este repositorio.

¿Qué sigue?

Antes de comenzar a crear tu propio entorno de clúster de GKE similar al que aprendiste en este conjunto de instructivos, revisa algunas de las consideraciones de producción.