Deployment in GKE

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

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

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

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

  • Aggiunta delle etichette consigliate al file di risorse di Kubernetes.

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

  • In attesa che sia pronto il file di risorse Kubernetes inviato.

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

Prima di iniziare

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

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

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

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

Autorizzazioni IAM richieste

Aggiungi il ruolo Sviluppatore Google Kubernetes Engine al tuo account:

  1. Apri la pagina Impostazioni di Cloud Build:

    Apri la pagina Impostazioni di Cloud Build

    Verrà visualizzata la pagina Autorizzazioni dell'account di servizio:

    Screenshot della pagina Autorizzazioni account di servizio

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

Deployment di un'immagine container predefinita

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

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

  2. Aggiungi il passaggio gke-deploy nel 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=location
      - --cluster=cluster
    

    JSON

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

    Dove:

    • kubernetes-resource-file è il percorso del file delle risorse Kubernetes o il percorso della directory contenente i file delle risorse Kubernetes.
    • cluster è il nome del cluster GKE in cui verrà eseguito il deployment dell'applicazione.
    • location è la regione/zona del cluster.

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

  3. Inizia la creazione:

    gcloud builds submit --region=REGION --project=project-id --config build-config
    

    Dove:

    • project-id è l'ID del progetto.
    • build-config è il nome del file di configurazione di compilazione.
    • REGION è una delle regioni di build supportate.

Creazione e deployment di una nuova immagine container

Per creare una nuova immagine container ed eseguire il deployment della nuova immagine container:

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

    YAML

    steps:
      # build the container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["build", "-t", "gcr.io/project-id/image:tag", "."]
      # push container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["push", "gcr.io/project-id/image:tag"]
      # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=kubernetes-resource-file
      - --image=gcr.io/project-id/image:tag
      - --location=location
      - --cluster=cluster
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "build",
            "-t",
            "gcr.io/project-id/image:tag",
            "."
          ]
        },
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "push",
            "gcr.io/project-id/image:tag"
          ]
        },
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=kubernetes-resource-file",
            "--image=gcr.io/project-id/image:tag",
            "--location=location",
            "--cluster=cluster"
          ]
        }
      ]
    }
    

    Dove:

    • project-id è l'ID del progetto.
    • image è il nome desiderato dell'immagine container, in genere il nome dell'applicazione.
    • tag è il tag dell'immagine container.
      • Se stai creando una nuova immagine container con ogni commit, è buona norma utilizzare la breve SHA del commit come tag. Cloud Build lo rende disponibile come sostituzione predefinita, $SHORT_SHA.
    • kubernetes-resource-file è il percorso del file delle risorse Kubernetes o il percorso della directory contenente i file delle risorse Kubernetes.
    • cluster è il nome del cluster GKE in cui verrà eseguito il deployment dell'applicazione.
    • location è la regione/zona in cui verrà eseguito il deployment del cluster.
  2. Inizia la creazione:

    gcloud builds submit --region=REGION --project=project-id --config build-config
    

    Dove:

    • project-id è l'ID del progetto.
    • build-config è il nome del file di configurazione di compilazione.
    • REGION è una delle regioni di build supportate.

Automazione dei deployment

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

Per creare un trigger di build:

  1. Apri la pagina Attivatori nella console Google Cloud:

    Apri la pagina Attivatori

  2. Seleziona il progetto dal menu a discesa del selettore progetti nella parte superiore della 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 l'attivatore.

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

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

    4. Specifica la regex per il nome del ramo o del tag che avvierà l'attivatore.ee

    5. Scegli una configurazione per il trigger.

      Se scegli un file di configurazione di Cloud Build, puoi specificare le variabili di sostituzione fornendo il nome della variabile e il valore che vuoi associare. Nell'esempio seguente, la variabile di sostituzione definita dall'utente _CLOUDSDK_CONTAINER_CLUSTER specifica il cluster in cui eseguire il deployment e la variabile di sostituzione definita dall'utente _CLOUDSDK_COMPUTE_ZONE specifica la località. Se vuoi eseguire il deployment in un cluster diverso, puoi utilizzare la stessa configurazione di build e modificare solo 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=gcr.io/project-id/image: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=gcr.io/project-id/image:tag",
              "--location=${_CLOUDSDK_COMPUTE_ZONE}",
              "--cluster=${_CLOUDSDK_CONTAINER_CLUSTER}"
            ]
          }
        ]
      }
      

      Dove:

      • kubernetes-resource-file è il percorso del file di configurazione di Kubernetes o il percorso della directory contenente i file delle risorse Kubernetes.
      • project-id è l'ID del progetto.
      • image è il nome desiderato dell'immagine container, in genere il nome dell'applicazione.
      • tag è il tag dell'immagine container.

      Per scoprire di più su come definire sostituzioni per i file di configurazione di compilazione, consulta la pagina relativa all'utilizzo delle 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 Creazione e gestione dei trigger di build.

Passaggi successivi