Créer un build privé avec l'aide de Duet AI

Ce tutoriel explique comment utiliser Duet AI, un collaborateur de Google Cloud basé sur l'IA, pour parcourir les journaux et configurer un environnement de compilation pour un ensemble de microservices dans Google Kubernetes Engine.

Ce tutoriel est destiné aux ingénieurs DevOps de tous niveaux.

Objectifs

  • Demander à Duet AI d'envoyer une requête de journalisation afin d'observer les journaux des pods
  • Comprendre comment établir un environnement de compilation privé en posant des questions contextuelles à Duet AI
  • Utilisez Duet AI pour apprendre à stocker des images de conteneurs de manière privée et sécurisée.

Produits Google Cloud utilisés

Ce tutoriel utilise les produits Google Cloud facturables suivants. Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

  • Google Kubernetes Engine (GKE). GKE est un service Kubernetes géré qui vous permet de déployer et de gérer des applications conteneurisées à grande échelle. Pour en savoir plus sur la tarification, consultez la page Tarifs de GKE.

  • Cloud Logging : Logging est un système de gestion des journaux en temps réel qui prend en charge le stockage, la recherche, l'analyse et la surveillance.

  • Cloud Build. Cloud Build est un service qui exécute vos compilations sur l'infrastructure Google Cloud. Cloud Build peut importer du code source à partir de divers dépôts ou espaces Cloud Storage, exécuter une compilation selon vos spécifications et produire des artefacts tels que des conteneurs Docker ou des archives Java.

  • Artifact Registry Artifact Registry est un outil centralisé qui vous permet de gérer les images de conteneurs et les packages de langages. Il vous permet de stocker de manière centralisée les artefacts et de créer des dépendances dans le cadre d'une expérience Google Cloud intégrée.

  • Duet AI. Duet AI est un collaborateur toujours actif de Google Cloud qui propose une assistance basée sur l'IA générative à un large éventail d'utilisateurs, y compris des développeurs et des data scientists. Pour offrir une expérience d'assistance intégrée, Duet AI est intégré à de nombreux produits Google Cloud.

Avant de commencer

  1. Assurez-vous que Duet AI est configuré pour votre compte utilisateur et votre projet Google Cloud.
  2. Activez Google Kubernetes Engine API.

    Activer l'API

  3. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  4. Créez un cluster GKE à l'aide de la commande gcloud container clusters create:

    gcloud container clusters create test --region us-central1
    

    L'exécution de la commande prend quelques minutes. Le résultat ressemble à ce qui suit :

    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. Clonez un dépôt et utilisez kubectl pour déployer un ensemble de microservices qui constituent une application Web d'e-commerce sur le cluster GKE:

    git clone https://github.com/GoogleCloudPlatform/microservices-demo && cd microservices-demo
    
    kubectl apply -f ./release/kubernetes-manifests.yaml
    
  6. Après quelques minutes, obtenez l'adresse IP externe pour accéder à votre application Web dans un navigateur:

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

Comprendre les journaux des charges de travail dans GKE

Pour l'exemple suivant, supposons que vous êtes un ingénieur DevOps chargé d'hériter d'un ensemble existant de microservices exécutés dans un cluster GKE. Pour comprendre l'environnement, vous décidez d'inspecter les journaux des différents microservices.

Dans la console Google Cloud, vous pouvez discuter avec Duet AI pour obtenir de l'aide. Dans le volet Duet AI, vous saisissez des invites, qui sont des questions ou des déclarations décrivant l'aide dont vous avez besoin. Duet AI renvoie ensuite des réponses.

Duet AI n'utilise pas vos invites ni ses réponses comme données pour entraîner son modèle. Pour en savoir plus, consultez la page Comment Duet AI dans Google Cloud utilise vos données.

Vous savez que les microservices ont été déployés dans l'espace de noms default. Pour demander à Duet AI de vous aider à inspecter les journaux, procédez comme suit:

  1. Dans la barre d'outils de la console Google Cloud, cliquez sur chat_spark Ouvrir Duet AI.
  2. Dans le volet Duet AI, saisissez la requête suivante:

    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"?
    

    Duet AI renvoie une réponse semblable à celle-ci:

    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. Pour inspecter ces journaux, cliquez sur chaque journal renvoyé par la requête. Dans un journal individuel, si vous cliquez sur Expliquer cette requête, la réponse ressemble à la suivante:

    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.
    

Créer un environnement de compilation privé pour les images de conteneurs

Maintenant que vous comprenez mieux les charges de travail grâce à l'observation des journaux, vous décidez de configurer l'infrastructure et de créer les futures images de conteneurs de votre équipe sur un ensemble de nœuds de calcul privés. Dans cette section, vous allez demander à Duet AI de vous aider à comprendre comment exécuter un environnement de compilation pour migrer vos builds vers votre projet Google Cloud.

  1. Dans la barre d'outils de la console Google Cloud, cliquez sur chat_spark Ouvrir Duet AI.
  2. Dans le volet Duet AI, saisissez la requête suivante:

    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.
    

    Duet AI renvoie une réponse semblable à celle-ci:

    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. Les pools privés Cloud Build semblent être une voie viable, c'est pourquoi vous demandez à Duet AI de vous aider à créer votre premier pool privé. Saisissez la requête suivante :

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

    Duet AI renvoie une réponse semblable à celle-ci:

    Sure. To create a private pool, you can use the following gcloud
    command:
    
    gcloud builds worker-pools create PRIVATEPOOL_ID --config-from-file
    PRIVATEPOOL_CONFIG_FILE --region REGION
    
    Where:
    
    • PRIVATEPOOL_ID is a unique identifier for your private pool.
    • PRIVATEPOOL_CONFIG_FILE is the name of your private pool
      config file.
    • REGION is the region where you want to create your private
      pool.
    
    For more information, see the Cloud Build documentation.
    
    Source:
    
    https://cloud.google.com/build/docs/private-pools/create-manage-private-pools
    
  4. À partir de la réponse précédente, il semble que vous devez transmettre un fichier de configuration pour remplacer la variable PRIVATEPOOL_CONFIG_FILE. Vous demandez donc à Duet AI de vous aider à créer un fichier de configuration. Saisissez la requête suivante :

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

    Duet AI renvoie une réponse semblable à celle-ci:

    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. Vous commencerez à créer votre propre fichier de configuration dans lequel les nœuds de calcul de la compilation n'ont pas accès à l'Internet public. Dans Cloud Shell, exécutez la commande suivante, en définissant egressOption sur NO_PUBLIC_EGRESS:

    cat << EOF >> cloudbuild-privatepool-config.yaml
    
    privatePoolV1Config:
      networkConfig:
        egressOption: NO_PUBLIC_EGRESS
    
    EOF
    
  6. Vous n'êtes pas sûr des autres options disponibles dans le fichier de configuration, vous demandez donc de l'aide à Duet AI:

    Is there a default value for any of these options?
    

    Duet AI renvoie une réponse semblable à celle-ci:

    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.
    
  7. Vous constatez que Duet AI fournit certaines des valeurs par défaut déjà définies dans le fichier de configuration et, en lisant la documentation, vous décidez que votre fichier de configuration est correct. Dans Cloud Shell, transmettez la commande gcloud que Duet AI vous a fournie précédemment dans le nouveau fichier de configuration:

    gcloud builds worker-pools create max-pool-test \
        --config-from-file cloudbuild-privatepool-config.yaml \
        --region us-central1
    
  8. Une fois les nœuds de calcul créés, vous vous rendez compte que les conteneurs n'ont pas accès aux gestionnaires de packages publics, tels que pip. Vous devez confirmer que vous comprenez l'hébergement de packages privés. Saisissez l'invite suivante:

    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?
    

    Duet AI renvoie une réponse semblable à celle-ci:

    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.
    
  9. Vous décidez de créer un dépôt Artifact Registry. Dans le volet Duet AI, saisissez la requête suivante:

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

    Duet AI renvoie une réponse semblable à celle-ci:

    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.
    

  10. En voyant la variable KMS_KEY, vous réalisez que vous n'avez pas encore créé de clé Cloud KMS. Saisissez la requête suivante :

    Do I need a KMS_KEY?
    

    Duet AI renvoie une réponse semblable à celle-ci:

    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.
    
  11. Une fois les réponses à vos questions, vous pouvez exécuter dans Cloud Shell la commande gcloud fournie par Duet AI:

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

Avec l'aide de Duet AI, vous avez créé l'ensemble privé de nœuds de calcul et le dépôt privé pour compiler et héberger vos artefacts.

Effectuer un nettoyage

Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre compte Google Cloud, vous pouvez supprimer le projet Google Cloud que vous avez créé pour ce tutoriel. Vous pouvez également supprimer les différentes ressources.

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Étapes suivantes