Deployment in GKE

Questa pagina spiega come eseguire il deployment di un'applicazione in Kubernetes utilizzando Cloud Build.

Cloud Build fornisce un builder gke-deploy che consente di eseguire il deployment di un'applicazione containerizzata in un cluster GKE.

gke-deploy è un wrapper di kubectl, l'interfaccia a riga di comando per Kubernetes. Applica le best practice di Google per il deployment di applicazioni in Kubernetes:

  • Aggiorna il file di risorse Kubernetes dell'applicazione in modo da utilizzare il digest dell'immagine container anziché un tag.

  • Aggiunge le etichette consigliate al file di risorse Kubernetes.

  • Recupera le credenziali per i cluster GKE in cui esegui il deployment dell'immagine.

  • Attende che il file di risorse Kubernetes inviato sia pronto.

Se vuoi eseguire il deployment delle applicazioni utilizzando kubectl direttamente e non hai bisogno di funzionalità aggiuntive, Cloud Build fornisce anche un builder kubectl che puoi utilizzare per eseguire il deployment dell'applicazione in un cluster GKE.

Prima di iniziare

  • Crea un cluster GKE, se non ne hai già uno.

  • Prepara l'applicazione containerizzata sotto forma di codice sorgente e un Dockerfile. Il codice sorgente deve essere archiviato in un repository, ad esempio Cloud Source Repositories, GitHub o Bitbucket.

  • Avrai bisogno di almeno un file di risorse Kubernetes che descriva le risorse Kubernetes utilizzate per eseguire l'applicazione. Se non hai file di risorse Kubernetes, segui questi passaggi per generarne uno per la tua applicazione:

    1. Apri la pagina dei cluster Kubernetes Engine nella Google Cloud console.
    2. Nella pagina dei cluster Kubernetes Engine, fai clic su Esegui il deployment.
    3. Seleziona il container e fai clic su Continua. Verrà visualizzata la sezione Configurazione.
    4. In YAML configurazione, fai clic su Visualizza YAML per ottenere un file di risorse Kubernetes di esempio.

Autorizzazioni IAM obbligatorie

Aggiungi il ruolo Sviluppatore Google Kubernetes Engine al tuo account:

  1. Nella Google Cloud console, vai alla pagina Autorizzazioni di Cloud Build:

    Vai ad Autorizzazioni

  2. Imposta lo stato del ruolo Sviluppatore Kubernetes Engine su Attivato.

Deployment di un'immagine container preimpostata

Per eseguire il deployment di una versione specifica dell'applicazione con gke-deploy:

  1. Assicurati che il file di risorse Kubernetes faccia riferimento al tag o al digest dell'immagine container corretti.

  2. Aggiungi il passaggio gke-deploy nel tuo file di configurazione della build:

    YAML

    steps:
    ...
    # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=KUBERNETES_RESOURCE_FILE
      - --location=CLUSTER_LOCATION
      - --cluster=CLUSTER
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=KUBERNETES_RESOURCE_FILE",
            "--location=CLUSTER_LOCATION",
            "--cluster=CLUSTER"
          ]
        }
      ]
    }
    

    Dove:

    • KUBERNETES_RESOURCE_FILE è il percorso del file di risorse Kubernetes o il percorso della directory contenente i file di risorse Kubernetes.
    • CLUSTER_LOCATION è la regione del cluster.
    • CLUSTER è il nome del cluster GKE in cui verrà eseguito il deployment dell'applicazione.

    Per ulteriori informazioni sui flag disponibili, consulta i gke-deploy run flag.

  3. Avvia la build:

    gcloud builds submit --region=LOCATION --project=PROJECT --config BUILD_CONFIG
    

    Dove:

    • LOCATION è una delle località di build supportate.
    • PROJECT è l'ID del tuo progetto.
    • BUILD_CONFIG è il nome del file di configurazione della build.

Creazione e deployment di una nuova immagine container

Per creare una nuova immagine container ed eseguirne il deployment:

  1. Aggiorna il file di risorse Kubernetes con la nuova immagine container utilizzando l'attributo --image:

    YAML

    steps:
      # build the container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["build", "-t", "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG", "."]
      # push container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["push", "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG"]
      # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=KUBERNETES_RESOURCE_FILE
      - --image=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG
      - --location=CLUSTER_LOCATION
      - --cluster=CLUSTER
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "build",
            "-t",
            "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG",
            "."
          ]
        },
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "push",
            "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG"
          ]
        },
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=KUBERNETES_RESOURCE_FILE",
            "--image=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG",
            "--location=CLUSTER_LOCATION",
            "--cluster=CLUSTER"
          ]
        }
      ]
    }
    

    Dove:

    • LOCATION è una delle località di build supportate.
    • PROJECT è l'ID del tuo progetto.
    • IMAGE_NAME è il nome che vuoi assegnare all'immagine container, in genere il nome dell'applicazione.
    • TAG è il tag dell'immagine container.
      • Se crei una nuova immagine container a ogni commit, una best practice è utilizzare l'SHA breve del commit come tag. Cloud Build lo rende disponibile come sostituzione predefinita, $SHORT_SHA.
    • KUBERNETES_RESOURCE_FILE è il percorso del file di risorse Kubernetes o il percorso della directory contenente i file di risorse Kubernetes.
    • CLUSTER è il nome del cluster GKE in cui verrà eseguito il deployment dell'applicazione.
    • CLUSTER_LOCATION è la regione in cui verrà eseguito il deployment del cluster.
  2. Avvia la build:

    gcloud builds submit --region=LOCATION --project=PROJECT --config BUILD_CONFIG
    

    Dove:

    • LOCATION è una delle regioni di build supportate.
    • PROJECT è l'ID del tuo progetto.
    • BUILD_CONFIG è il nome del file di configurazione della build.

Automatizzare i deployment

Puoi automatizzare il deployment dell'applicazione in GKE creando un trigger in Cloud Build. Puoi configurare i trigger per creare ed eseguire il deployment delle immagini ogni volta che esegui il push delle modifiche al codice.

Per creare un trigger di build:

  1. Apri la pagina Trigger nella Google Cloud console:

    Apri la pagina Trigger

  2. Seleziona il tuo progetto dal menu a discesa del selettore di progetti nella parte superiore di la pagina.

  3. Fai clic su Apri.

  4. Fai clic su Crea trigger.

    Nella pagina Crea trigger, inserisci le seguenti impostazioni:

    1. Inserisci un nome per il trigger.

    2. Seleziona l'evento del repository per avviare il trigger.

    3. Seleziona il repository contenente il codice sorgente e il file di configurazione della build.

    4. Specifica l'espressione regolare per il nome del ramo o del tag che avvierà il trigger.

    5. Scegli una configurazione per il trigger.

      Se scegli un file di configurazione di Cloud Build, puoi specificare le variabili di sostituzione fornendo un nome di variabile e il valore che vuoi associare a quella variabile. Nell'esempio seguente la variabile di sostituzione definita dall'utente _CLOUDSDK_CONTAINER_CLUSTER specifica il cluster in cui eseguire il deployment, mentre la variabile di sostituzione definita dall'utente _CLOUDSDK_COMPUTE_ZONE ne specifica la località. Se vuoi eseguire il deployment in un cluster diverso, puoi utilizzare la stessa configurazione di compilazione e devi solo modificare i valori delle variabili di sostituzione:

      YAML

      steps:
      ...
      # deploy container image to GKE
      - name: "gcr.io/cloud-builders/gke-deploy"
        args:
        - run
        - --filename=KUBERNETES_RESOURCE_FILE
        - --image=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG
        - --location=${_CLOUDSDK_COMPUTE_ZONE}
        - --cluster=${_CLOUDSDK_CONTAINER_CLUSTER}
      

      JSON

      {
        "steps": [
          {
            "name": "gcr.io/cloud-builders/gke-deploy",
            "args": [
              "run",
              "--filename=KUBERNETES_RESOURCE_FILE",
              "--image=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG",
              "--location=${_CLOUDSDK_COMPUTE_ZONE}",
              "--cluster=${_CLOUDSDK_CONTAINER_CLUSTER}"
            ]
          }
        ]
      }
      

      Dove:

      • KUBERNETES_RESOURCE_FILE è il percorso del file di configurazione Kubernetes o il percorso della directory contenente i file di risorse Kubernetes.
      • PROJECT è l'ID del tuo progetto.
      • IMAGE_NAME è il nome che vuoi assegnare all' immagine container, in genere il nome dell'applicazione.
      • TAG è il tag dell'immagine container.

      Per scoprire di più su come definire le sostituzioni per i file di configurazione della build, consulta Utilizzare le sostituzioni definite dall'utente.

  5. Fai clic su Crea per salvare il trigger di build.

Quando esegui il push del codice nel repository, Cloud Build attiva automaticamente una build. Per scoprire di più sui trigger di build, consulta Creare e gestire i trigger di build.

Passaggi successivi