Desplegar recursos en una flota

En este tutorial se explica cómo usar un paquete de flota para desplegar manifiestos de recursos de Kubernetes en una flota de clústeres. Las herramientas de GitOps, como los paquetes de flotas de Config Sync, pueden ayudarte a ampliar la gestión de configuraciones en un gran número de clústeres.

En este tutorial, completarás las siguientes tareas:

  • Conectar un repositorio de Git a Cloud Build
  • Crear y registrar clústeres en una flota
  • Instalar Config Sync como predeterminado de la flota
  • Desplegar recursos de tu repositorio en tu flota de clústeres

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

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

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the GKE, Config Delivery (fleet packages), Cloud Build, Developer Connect APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

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

  9. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

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

    gcloud init
  11. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the GKE, Config Delivery (fleet packages), Cloud Build, Developer Connect APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable container.googleapis.com  configdelivery.googleapis.com  cloudbuild.googleapis.com  developerconnect.googleapis.com
  14. Crea una cuenta de GitHub o ten acceso a una.
  15. Costes

    En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

    Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

    Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

    Conectarse a Git

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

    Crea tu repositorio de Git

    En este tutorial se usa GitHub como proveedor de Git. Para crear un repositorio de GitHub, sigue estos pasos:

    1. En tu navegador web, abre GitHub.

    2. Si fuera necesario, inicia sesión en 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 Añadir y, a continuación, haz clic en Nuevo repositorio.

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

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

    6. Selecciona Crear repositorio.

    Conectar el repositorio a Cloud Build

    El servicio de paquetes de flotas de Config Sync usa Cloud Build para sincronizar y obtener los recursos de Kubernetes de tu repositorio de Git.

    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 fleet-package-quickstart-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 haya 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 repositorio fleet-package-tutorial.
      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 fleet-package-quickstart-connection.

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

    11. Selecciona Vincular.

    Configurar tu flota

    En esta sección, configurarás tu flota creando clústeres, registrándolos en una flota e instalando Config Sync como paquete de flota.

    Crear clústeres

    Para mostrar cómo puedes usar paquetes de flotas para desplegar recursos en varios clústeres, en este tutorial se explica cómo crear dos clústeres.

    Para crear los dos clústeres y registrarlos en la flota de tu proyecto, sigue estos pasos:

    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
      

      Haz los cambios siguientes:

      • PROJECT_ID por el ID del proyecto.
      • REGION con la región en la que quieras 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
      

    Instalar Config Sync como predeterminado de la flota

    Para usar el servicio de paquetes de la flota, Config Sync debe estar instalado en ambos clústeres. Para instalar Config Sync en varios clústeres a la vez y en cualquier clúster que se registre en la flota en el futuro, sigue estos pasos:

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

      Ir a Gestor de funciones

    2. En el panel Config Sync (Sincronización de configuración), haga clic en Configure (Configurar).

    3. Haz clic en Personalizar la configuración de la flota. En el cuadro de diálogo que aparece, selecciona la versión de Config Sync que quieras instalar.

    4. Haz clic en Configurar.

    5. En el cuadro de diálogo de confirmación Configurar ajustes de la flota, haz clic en Confirmar. Si no has habilitado Config Sync anteriormente, al hacer clic en Confirmar también se habilitará la API anthosconfigmanagement.googleapis.com.

    6. En la tabla Clusters in the fleet (Clusters de la flota), selecciona ambos clusters y haz clic en Sync to fleet settings (Sincronizar con la configuración de la flota). De esta forma, se instala Config Sync en ambos clústeres con los ajustes que hayas configurado.

      Los clústeres pueden tardar unos minutos en sincronizarse. Puedes continuar con los pasos siguientes cuando Config Sync aparezca como Instalado.

    Configurar una cuenta de servicio para Cloud Build

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

    1. Crea la cuenta de servicio:

      gcloud iam service-accounts create "quickstart-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:quickstart-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:quickstart-service-account@PROJECT_ID.iam.gserviceaccount.com" \
         --role='roles/logging.logWriter'
      

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

    Desplegar recursos en toda tu flota

    En este tutorial, añadirás un manifiesto de Kubernetes con un despliegue de nginx a tu repositorio de Git, publicarás una versión y, a continuación, crearás un paquete de flota para desplegar la aplicación de nginx.

    Confirmar un manifiesto de Kubernetes en tu repositorio

    Para añadir tus recursos a GitHub y publicar una versión, sigue estos pasos:

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

    2. Ponle el nombre deployment.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, a continuación, haz clic en Confirmar cambios.

    5. En la página principal de tu repositorio, 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.0.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 está orientado 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 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:
      target:
        fleet:
          project: projects/PROJECT_ID
      rolloutStrategy:
        rolling:
          maxConcurrent: 1
      

      Sustituye REPOSITORY_NAME por el nombre del repositorio de Cloud Build. Normalmente, tiene el formato USERNAME-REPOSITORY_NAME.

    2. Crea el paquete de flota para iniciar la implementación:

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

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

    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.

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

      Observa que, como maxConcurrent: se ha definido como 1 en la definición del paquete de flota, la API del paquete de flota espera a que nginx-deployment se haya desplegado por completo en un clúster antes de iniciar el despliegue en el segundo clúster. Si has cambiado la estrategia de lanzamiento a maxConcurrent: 2 o a un valor superior, los recursos se desplegarán en ambos clústeres simultáneamente.

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

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

    Limpieza

    Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en esta página, elimina el Google Cloud proyecto con los recursos.

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Para eliminar un repositorio, sigue estos pasos:

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

    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 vas a eliminar el repositorio correcto, escribe el nombre del repositorio en el campo de texto.

    6. Haz clic en Eliminar este repositorio.

    Siguientes pasos