Implementa recursos en una flota

En este instructivo, se explica cómo usar un paquete de flota para implementar manifiestos de recursos de Kubernetes en una flota de clústeres. Usar herramientas de GitOps, como los paquetes de flota del Sincronizador de configuración, puede ayudarte a escalar la administración de la configuración en una gran cantidad de clústeres.

En este tutorial, completarás las siguientes tareas:

  • Conecta un repositorio de Git a Cloud Build
  • Crea y registra clústeres en una flota
  • Instala el Sincronizador de configuración como valor predeterminado de la flota
  • Implementa recursos desde tu repositorio en tu flota de clústeres

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.

  3. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  5. Crea o selecciona un Google Cloud proyecto.

    Roles necesarios para seleccionar o crear un proyecto

    • Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crear un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (roles/resourcemanager.projectCreator), que contiene el permiso resourcemanager.projects.create. Obtén más información para otorgar roles.
    • Crea un proyecto de Google Cloud :

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto Google Cloud que estás creando.

    • Selecciona el proyecto Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre de tu Google Cloud proyecto.

  6. Verifica que la facturación esté habilitada para tu proyecto de Google Cloud .

  7. Habilita las APIs de GKE, Config Delivery (paquetes de flota), Cloud Build y Developer Connect:

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar roles.

    gcloud services enable container.googleapis.com  configdelivery.googleapis.com  cloudbuild.googleapis.com  developerconnect.googleapis.com
  8. Instala Google Cloud CLI.

  9. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  10. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  11. Crea o selecciona un Google Cloud proyecto.

    Roles necesarios para seleccionar o crear un proyecto

    • Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crear un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (roles/resourcemanager.projectCreator), que contiene el permiso resourcemanager.projects.create. Obtén más información para otorgar roles.
    • Crea un proyecto de Google Cloud :

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto Google Cloud que estás creando.

    • Selecciona el proyecto Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre de tu Google Cloud proyecto.

  12. Verifica que la facturación esté habilitada para tu proyecto de Google Cloud .

  13. Habilita las APIs de GKE, Config Delivery (paquetes de flota), Cloud Build y Developer Connect:

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar roles.

    gcloud services enable container.googleapis.com  configdelivery.googleapis.com  cloudbuild.googleapis.com  developerconnect.googleapis.com
  14. Crea una cuenta de GitHub o accede a ella.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

Es posible que los usuarios nuevos de Google Cloud cumplan con los requisitos para acceder a una prueba gratuita.

Conectarse a Git

Tu repositorio de Git contiene los recursos que deseas implementar en una flota. Para implementar esos recursos con un paquete de flota, debes conectar tu repositorio de Git a Cloud Build.

Crea tu repositorio de Git

En este instructivo, se usa GitHub como proveedor de Git. Para crear un repositorio de GitHub nuevo, completa los siguientes pasos:

  1. En tu navegador web, abre GitHub.

  2. Si es necesario, accede a tu cuenta de GitHub. Si tienes acceso a otras organizaciones o equipos en GitHub, asegúrate de crear el repositorio con tu cuenta personal.

  3. En la barra de herramientas, selecciona Agregar y, luego, haz clic en Repositorio nuevo.

  4. Escribe fleet-package-tutorial como el nombre del repositorio.

  5. Mantén seleccionada la opción Público como visibilidad del repositorio.

  6. Selecciona Crear repositorio.

Conecta el repositorio a Cloud Build

El servicio de paquetes de flota del Sincronizador de configuración usa Cloud Build para sincronizar y recuperar los recursos de Kubernetes de tu repositorio de Git.

Para conectar tu repositorio de GitHub a Cloud Build, completa los siguientes pasos:

  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 Repositories 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 fleet-package-quickstart-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 GitHub OAuth. 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 delegaste 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 enumera los repositorios, selecciona tu repositorio fleet-package-tutorial.
    7. Haz clic en Guardar.
  8. En la página de Cloud Build de la consola de Google Cloud , haz clic en Vincular repositorio para conectar un nuevo repositorio de Git a Cloud Build.

  9. En el menú Conexión, selecciona fleet-package-quickstart-connection.

  10. En el menú Repositorios, selecciona tu repositorio fleet-package-tutorial.

  11. Selecciona Vincular.

Configura tu flota

En esta sección, configurarás tu flota creando clústeres, registrándolos en una flota y, luego, instalando Sincronizador de configuración como un paquete de flota.

Crea clústeres

Para demostrar cómo puedes usar paquetes de flotas para implementar recursos en varios clústeres, en este instructivo, se muestra cómo crear dos clústeres.

Para crear los dos clústeres y registrarlos en la flota de tu proyecto, haz lo siguiente:

  1. Crea un clúster de GKE:

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

    Reemplaza lo siguiente:

    • PROJECT_ID por el ID del proyecto
    • REGION por la región en la que deseas crear el clúster, como us-central1.
  2. Crea un segundo clúster de GKE:

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

Instala el Sincronizador de configuración como valor predeterminado de la flota

Para usar el servicio de paquetes de la flota, Sincronizador de configuración debe estar instalado en ambos clústeres. Para instalar Sincronizador de configuración en varios clústeres a la vez y en cualquier clúster futuro registrado en la flota, completa los siguientes pasos:

  1. En la consola de Google Cloud , ve a la página Administrador de funciones.

    Ir a Administrador de funciones

  2. En el panel Sincronizador de configuración, haz clic en Configurar.

  3. Haz clic en Personalizar la configuración de la flota. En el diálogo que aparece, selecciona la versión de Sincronizador de configuración que deseas instalar.

  4. Haz clic en Configurar.

  5. En el cuadro de diálogo de confirmación Configuración de la flota, haz clic en Confirmar. Si no habilitaste el Sincronizador de configuración anteriormente, hacer clic en Confirmar también habilita la API de anthosconfigmanagement.googleapis.com.

  6. En la tabla Clústeres de la flota, selecciona ambos clústeres y, luego, haz clic en Sincronizar con la configuración de la flota. Esto instala el Sincronizador de configuración en ambos clústeres con la configuración que definiste.

    La sincronización de los clústeres puede tardar unos minutos. Puedes continuar con los siguientes pasos cuando el Sincronizador de configuración aparezca como Instalado.

Configura una cuenta de servicio para Cloud Build

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

  1. Crea la cuenta de servicio:

    gcloud iam service-accounts create "quickstart-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:quickstart-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ítica de IAM para el rol de escritor de registros:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:quickstart-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.

  4. Agrega una vinculación de política de IAM para el rol de escritor de Artifact Registry:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member="serviceAccount:quickstart-service-account@PROJECT_ID.iam.gserviceaccount.com" \
       --role='roles/artifactregistry.writer'
    

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

Implementa recursos en toda tu flota

En este instructivo, agregarás un manifiesto de Kubernetes con una implementación de nginx a tu repositorio de Git, publicarás una versión y, luego, crearás un paquete de flota para implementar la aplicación de nginx.

Confirma un manifiesto de Kubernetes en tu repositorio

Para agregar tus recursos a GitHub y publicar una versión, completa los siguientes pasos:

  1. En una ventana del navegador web de tu repositorio de GitHub, haz clic en Agregar archivo y, luego, en Crear nuevo archivo.

  2. Asigna el nombre deployment.yaml a tu archivo y pega el siguiente contenido en él:

    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, luego, haz clic en Confirmar cambios.

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

  6. En la parte superior de la página, elige Redactar un nuevo lanzamiento.

  7. Selecciona el menú Elige una etiqueta y escribe v1.0.0 como la 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 define un selector de clústeres (en la sección target.fleet). Está configurado para implementar la variante de implementación (derivada de tu archivo deployment.yaml) en todos estos clústeres.

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

    resourceBundleSelector:
      cloudBuildRepository:
        name: projects/PROJECT_ID/locations/us-central1/connections/fleet-package-quickstart-connection/repositories/REPOSITORY_NAME
        tag: v1.0.0
        serviceAccount: projects/PROJECT_ID/serviceAccounts/quickstart-service-account@PROJECT_ID.iam.gserviceaccount.com
        path:
        # Match all files (including deployment.yaml) to generate variants
        variantsPattern: "*.yaml"
    target:
      fleet:
        project: projects/PROJECT_ID
    rolloutStrategy:
      rolling:
        maxConcurrent: 1
    variantSelector:
      # Explicitly match the variant generated from "deployment.yaml"
      variantNameTemplate: "deployment"
    

    Reemplaza REPOSITORY_NAME por el nombre del repositorio de Cloud Build. Por lo general, tiene el formato USERNAME-REPOSITORY_NAME.

  2. Crea el paquete de flota para iniciar el lanzamiento:

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

    gcloud 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.

  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.

    Las cargas de trabajo pueden tardar unos minutos en estar disponibles. También es posible que observes errores de disponibilidad mientras Autopilot ajusta tus solicitudes de recursos para la nueva implementación.

    Observa cómo, debido a que maxConcurrent: está configurado como 1 en la definición del paquete de flota, la API del paquete de flota espera hasta que nginx-deployment se implemente por completo en un clúster antes de iniciar la implementación en el segundo clúster. Si cambiaste la estrategia de lanzamiento a maxConcurrent: 2 o superior, los recursos se implementarían en ambos clústeres de forma simultánea.

    Después de unos minutos, verás dos cargas de trabajo nuevas para nginx-deployment en ambos clústeres. Es posible que debas actualizar la página.

Puedes seguir explorando diferentes estrategias de implementación con paquetes de flotas. Por ejemplo, podrías agregar un clúster nuevo a tu flota para observar que tu carga de trabajo se implementa automáticamente en ese clúster nuevo. Para obtener más información sobre las estrategias y variaciones de implementación, consulta Implementa paquetes de flota.

Realiza una limpieza

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta página, borra el proyecto de Google Cloud que tiene los recursos.

  1. En la Google Cloud consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Para borrar tu repositorio, sigue estos pasos:

  1. En una ventana del navegador web de tu repositorio de 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), ve 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 borrarás el repositorio correcto, escribe su nombre en el campo de texto.

  6. Haz clic en Borrar este repositorio.

¿Qué sigue?