Crea una compilación privada con Gemini para obtener asistencia de Google Cloud

En este instructivo, se muestra cómo usar Gemini para Google Cloud, un colaborador potenciado por IA en Google Cloud, para navegar por los registros y configurar un entorno de compilación para un conjunto de microservicios en Google Kubernetes Engine.

Este instructivo está dirigido a ingenieros DevOps de cualquier nivel de experiencia.

Objetivos

  • Solicita a Gemini que realice una consulta de registro para que puedas observar los registros de los Pods.
  • Comprende cómo establecer un entorno de compilación privado con instrucciones a Gemini con preguntas basadas en el contexto.
  • Usa Gemini para aprender a almacenar imágenes de contenedores de forma privada y segura.

Productos de Google Cloud usados

En este instructivo, se usan los siguientes productos facturables de Google Cloud. Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.

  • Google Kubernetes Engine (GKE). GKE es un servicio administrado de Kubernetes que te permite implementar y administrar aplicaciones alojadas en contenedores a gran escala.

  • Cloud Logging. Logging es un sistema de administración de registros en tiempo real compatible con almacenamiento, búsqueda, análisis y supervisión.

  • Cloud Build. Cloud Build es un servicio que ejecuta compilaciones en la infraestructura de Google Cloud. Cloud Build puede importar código fuente desde varios repositorios o espacios de Cloud Storage, ejecutar una compilación según tus especificaciones y producir artefactos como contenedores de Docker o archivos de Java.

  • Artifact Registry. Artifact Registry permite administrar imágenes de contenedor y paquetes de lenguajes en un solo lugar. Te permite almacenar artefactos y compilar dependencias de forma centralizada como parte de una experiencia integrada de Google Cloud.

  • Gemini Gemini es un colaborador siempre activo en Google Cloud que ofrece asistencia con tecnología de IA generativa a una amplia variedad de usuarios, incluidos desarrolladores y científicos de datos. Para ofrecer una experiencia de asistencia integrada, Gemini está incorporada en muchos productos de Google Cloud.

Antes de comenzar

  1. Asegúrate de que Gemini esté configurado para tu cuenta de usuario y tu proyecto de Google Cloud. Además, asegúrate de haber instalado el complemento de Cloud Code en tu IDE preferido. Si prefieres usar Cloud Shell Editor o Cloud Workstations como tu IDE, Cloud Code y Gemini Code Assist ya están disponibles de forma predeterminada.
  2. Habilita Google Kubernetes Engine API.

    Habilita la API

  3. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  4. Crea un clúster de GKE con el comando gcloud container clusters create:

    gcloud container clusters create test --region us-central1
    

    El comando tardará unos minutos en ejecutarse. El resultado es similar al siguiente:

    Creating cluster test in us-central1... Cluster is being health-checked (master is healthy)...done.
    
    Created https://container.googleapis.com/v1/projects/agmsb-gke-lab/zones/us-central1/clusters/test.
    
    To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central1/test?project=agmsb-gke-lab
    kubeconfig entry generated for test.
    
    NAME: test
    LOCATION: us-central1
    MASTER_VERSION: 1.27.3-gke.100
    MASTER_IP: 34.72.99.149
    MACHINE_TYPE: e2-medium
    NODE_VERSION: 1.27.3-gke.100
    NUM_NODES: 9
    STATUS: RUNNING
    
  5. Clona un repositorio y usa kubectl para implementar un conjunto de microservicios que conforman una app web de comercio electrónico en el clúster de GKE:

    git clone https://github.com/GoogleCloudPlatform/microservices-demo && cd microservices-demo
    
    kubectl apply -f ./release/kubernetes-manifests.yaml
    
  6. Después de unos minutos, obtén la dirección IP externa para acceder a tu app web en un navegador:

    kubectl get service frontend-external | awk '{print $4}'
    

Comprende los registros de las cargas de trabajo en GKE

En el siguiente ejemplo, considera que eres un ingeniero DevOps que tiene la tarea de heredar un conjunto existente de microservicios que se ejecutan en un clúster de GKE. Para comprender el entorno, debes inspeccionar los registros de los diversos microservicios.

En tu IDE integrado de asistencia de código preferido, puedes chatear con Gemini para obtener ayuda. En el panel de Gemini, puedes ingresar mensajes, que son preguntas o sentencias que describen la ayuda que necesitas, y Gemini muestra respuestas.

Gemini no usa tus mensajes ni sus respuestas como datos para entrenar sus modelos. Para obtener más información, consulta Cómo Gemini para Google Cloud usa tus datos.

Sabes que los microservicios se implementaron en el espacio de nombres default. Para pedirle a Gemini que te ayude a inspeccionar registros, sigue estos pasos:

  1. En la barra de actividades de tu IDE, haz clic en chat_spark Gemini Code Assist para abrir el panel Gemini Code Assist.

  2. En el panel Gemini Code Assist, ingresa el siguiente mensaje:

    How can I write a Cloud Logging query to search for logs from Pods in
    a namespace called "default" in a Google Kubernetes Engine cluster named "test"?
    

    Gemini muestra una respuesta similar a la siguiente:

    To write a Cloud Logging query to search for logs from Pods in a
    namespace called "default" in GKE cluster called "test", you
    can use the following query:
    
    resource.type="k8s_container"
    resource.labels.namespace_name="default"
    resource.labels.cluster_name="test"
    
    This query will search for all logs from Pods in the "default"
    namespace in the "test" GKE cluster. You can also use the
    Cloud Logging console to search for logs from Pods in a specific
    namespace and cluster. To do this, follow these steps:
    
    1. Go to the Cloud Logging console.
    2. In the Query builder pane, click
       Resource.
    3. In the Resource type list, select Kubernetes
       Container.
    4. In the Namespace name field, enter default.
    5. In the Cluster name field, enter test.
    6. Click Add.
    7. In the Query results pane, you will see a list of logs
       from Pods in the "default" namespace in the "test" GKE
       cluster.
    
  3. Para inspeccionar estos registros, haz clic en cada registro que muestre la consulta. En un registro individual, si haces clic en Explicar esta consulta, la respuesta es similar a la siguiente:

    Sure. Here are the bullet points that explain the log entry:
    
    • The log entry is about a GET request to the /_healthz path.
    • The request was successful and returned a 200 status code.
    • The request took 0 milliseconds to complete.
    • The request was made by the x-liveness-probe session.
    • The request was made from the frontend-755cdc7957-pv8x5 pod
      in the default namespace.
    

Crea un entorno de compilación privado para imágenes de contenedor

Ahora que comprendes mejor las cargas de trabajo a partir de la observación de los registros, decides configurar la infraestructura y compilar las futuras imágenes de contenedor de tu equipo en un conjunto de trabajadores privados. En esta sección, le solicitas a Gemini que te ayude a comprender cómo ejecutar un entorno de compilación para que puedas migrar tus compilaciones a tu proyecto de Google Cloud.

  1. En la barra de actividades de tu IDE, haz clic en chat_spark Gemini Code Assist para abrir el panel Gemini Code Assist.

  2. En el panel Gemini Code Assist, ingresa el siguiente mensaje:

    How can I build a private build environment that is not connected to
    the internet in Google Cloud? I want to be able to use Docker to
    build my container images in this environment.
    

    Gemini muestra una respuesta similar a la siguiente:

    To build a private build environment that is not connected to the internet
    in Google Cloud, you can use a Cloud Build private pool. A private pool
    is a group of build workers that are not connected to the public internet.
    You can create a private pool in a Virtual Private Cloud (VPC) network,
    which provides an additional layer of security for your build environment.
    
    To create a private pool, you will need to:
    
    1. Create a VPC network.
    2. Create a private pool in the VPC network.
    3. Configure your build config file to use the private pool.
    
    Once you have created a private pool, you can use it to build your
    container images using Docker. To do this, you will need to:
    
    1. Create a Dockerfile.
    2. Create a build config file.
    3. Run the `gcloud builds submit` command.
    
    The `gcloud builds submit` command will build your container image
    using the private pool.
    
    Find more information for your question here:
    
    • https://cloud.google.com/build/docs/private-pools/create-manage-private-pools
    
  3. Los grupos privados de Cloud Build parecen ser una ruta viable a futuro, por lo que le pides a Gemini que te brinde asistencia para crear tu primer grupo privado. Escribe la siguiente instrucción:

    Can you give me a gcloud command to create my first Cloud Build
    private worker pool?
    

    Gemini muestra una respuesta similar a la siguiente:

    Here's how you can create your first private worker pool using the gcloud
    command:
    
    1. Define your pool configuration:
    
    First, you need to define the configuration of your private pool. This
    includes details like the pool name, region, machine type, disk size, and
    network settings. You can do this by creating a JSON file named
    workerpool.json with the following structure:
    
    {
      "name": "my-first-privatepool",
      "location": "us-central1",
      "machineType": "e2-standard-2",
      "diskSizeGb": 800,
      "network": "projects/your-project-id/global/networks/default",
      "assignExternalIP": true
    }
    
    2. Create the pool using gcloud:
    
    Once you have the configuration file ready, you can use the following gcloud
    command to create the private worker pool:
    
    gcloud builds worker-pools create \
      --project=gsm-project-382212 \
      --location=us-central1 \
      --worker-pool-id=my-first-privatepool \
      --file=workerpool.json
    
    Explanation of the command:
    
    - gcloud builds worker-pools create : This is the command to create a new worker pool.
    - --project=gsm-project-382212 : This specifies the project ID where you want to create the pool.
    - --location=us-central1 : This specifies the region where you want to create the pool.
    - --worker-pool-id=my-first-privatepool : This specifies the ID for your private pool.
    - --file=workerpool.json : This specifies the path to your configuration file.
    
    3. Verify the pool creation:
    
    After running the command, you can verify that the pool has been created by
    running the following command:
    
    gcloud builds worker-pools list
    
    Additional notes:
    
    - You can customize the configuration file to meet your specific needs. For
    example, you can change the machine type, disk size, or network settings.
    - You can also create private worker pools using the Cloud Build API or th
     Cloud Console.
    
    I hope this helps! Let me know if you have any other questions.
    
  4. A partir de la respuesta anterior, parece que debes pasar un archivo de configuración para reemplazar la variable PRIVATEPOOL_CONFIG_FILE, por lo que solicitas a Gemini que te ayude a crear un archivo de configuración. Escribe la siguiente instrucción:

    Can you show me an example of a Cloud Build private pool config file?
    

    Gemini muestra una respuesta similar a la siguiente:

    Sure. Here is an example of a Cloud Build private pool config file:
    
    privatePoolV1Config:
       networkConfig:
         egressOption: NO_PUBLIC_EGRESS<br>
         peeredNetwork: 'projects/my-project/global/networks/my-network'
         peeredNetworkIpRange: '10.1.2.0/24'
       workerConfig:
         diskSizeGb: '100'
         machineType: 'e2-standard-4'
    
    This config file creates a private pool with the following
    properties:
    
    • The pool is not connected to the public internet.
    • The pool is connected to the `my-network` VPC network.
    • The pool's workers have a `100GB` boot disk and a
      `e2-standard-4` machine type.
    
    For more information, see the Cloud Build documentation.
    
  5. Comienzas a crear tu propio archivo de configuración en el que los trabajadores de compilación no tienen acceso a la Internet pública. Navega a la consola de Google Cloud y, luego, inicia el Editor de Cloud Shell.

  6. En Cloud Shell, ejecuta el siguiente comando y establece egressOption como NO_PUBLIC_EGRESS:

    cat << EOF >> cloudbuild-privatepool-config.yaml
    
    privatePoolV1Config:
      networkConfig:
        egressOption: NO_PUBLIC_EGRESS
    
    EOF
    
  7. No estás seguro del resto de las opciones disponibles en el archivo de configuración, por lo que solicitas ayuda a Gemini:

    Is there a default value for any of these options?
    

    Gemini muestra una respuesta similar a la siguiente:

    Yes, there are default values for some of the options in the private
    pool config file. For example, the default value for egressOption is
    ALLOW_PUBLIC_EGRESS, which means that the private pool will have
    access to the public internet. The default value for diskSizeGb is
    100, and the default value for machineType is e2-medium.
    
    For a full list of the default values, see the Cloud Build documentation.
    
  8. Verás que Gemini proporciona algunos de los valores predeterminados que ya están establecidos en el archivo de configuración y, cuando leas la documentación, decides que tu archivo de configuración es bueno tal como está. En Cloud Shell, pasa el comando gcloud que Gemini te proporcionó antes en tu archivo de configuración recién creado:

    gcloud builds worker-pools create max-pool-test \
        --config-from-file cloudbuild-privatepool-config.yaml \
        --region us-central1
    
  9. Después de crear los trabajadores, te das cuenta de que los contenedores no tendrán acceso a los administradores de paquetes públicos, como pip. Quieres confirmar que sabes cómo alojar paquetes privados. Ingresa la siguiente instrucción:

    If I create a private pool with NO_PUBLIC_EGRESS enabled, can I use
    Artifact Registry to host my packages privately and access them from
    a private pool?
    

    Gemini muestra una respuesta similar a la siguiente:

    Yes, you can use Artifact Registry to host your packages privately
    and access them from a private pool. To do this, you will need to
    create a private pool with NO_PUBLIC_EGRESS enabled and then
    configure your Artifact Registry repository to use the private pool.
    For more information, see the Cloud Build documentation.
    
  10. Decides crear un repositorio de Artifact Registry. En el panel de Gemini, ingresa el siguiente mensaje:

    How can I use gcloud to create a private Docker repository for
    container images in Artifact Registry?
    

    Gemini muestra una respuesta similar a la siguiente:

    To create a private Docker repository for container images in
    Artifact Registry, you can use the following command:
    
    gcloud artifacts repositories create REPOSITORY_NAME \\\
        --repository-format=docker \\\
        --location=LOCATION \\\
        --description="DESCRIPTION" \\\
        --kms-key=KMS_KEY
    
    Where:
    
    • REPOSITORY_NAME is the name of your repository.
    • LOCATION is the location of your repository.
    • DESCRIPTION is a description of your repository.
    • KMS_KEY is the name of your Cloud Key Management Service key that
      you want to use to encrypt your repository data.
    
    For more information, see the gcloud artifacts repositories create
    documentation.
    

  11. Cuando ves la variable KMS_KEY, te das cuenta de que aún no creaste una clave de Cloud KMS. Escribe la siguiente instrucción:

    Do I need a KMS_KEY?
    

    Gemini muestra una respuesta similar a la siguiente:

    No, you don't need a KMS_KEY to create a private Docker repository
    for container images in Artifact Registry. However, if you want to
    encrypt your container images, you can use a Cloud Key Management Service key. For more
    information, see the Artifact Registry CMEK documentation.
    
  12. Una vez respondidas tus preguntas, en Cloud Shell, ejecuta el comando gcloud que Gemini te proporcionó:

    gcloud artifacts repositories create max-docker-repo-test \
        --repository-format=docker \
        --location=us-central1 \
        --description="test container repository"
    

Con la asistencia de Gemini, creaste de forma correcta el conjunto privado de trabajadores y el repositorio privado para compilar y alojar tus artefactos.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, puedes borrar el proyecto de Google Cloud que creaste para este instructivo. Como alternativa, puedes borrar los recursos individuales.

  1. En la consola de Google Cloud, 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.

¿Qué sigue?