Deployment delle immagini container

Questa pagina descrive come eseguire il deployment di nuovi servizi e nuove revisioni in Knative Serving.

Prima di iniziare

Per utilizzare Google Cloud CLI, devi prima configurare gli strumenti a riga di comando.

Connessione ai cluster GKE

Prima di poter eseguire il deployment dei servizi in Knative serving, devi accedere per collegarti al tuo cluster GKE.

Per saperne di più sulla connessione ai cluster GKE, incluse opzioni aggiuntive, consulta:

Autorizzazioni necessarie per il deployment

Devi disporre delle autorizzazioni per creare, aggiornare ed eliminare su apiGroup serving.knative.dev e kind Service e, inoltre, devi disporre di UNO dei seguenti ruoli Identity and Access Management:

Immagini che puoi eseguire

Non esiste un limite di dimensioni per l'immagine contenitore di cui puoi eseguire il deployment.

Puoi utilizzare i container di qualsiasi registry dei container, ad esempio Docker Hub. Per informazioni sul deployment di immagini private da registri diversi da Container Registry o Artifact Registry, consulta Eseguire il deployment di immagini dei contenitori private da altri registri dei contenitori.

Deployment di un nuovo servizio

Puoi specificare un'immagine container con un tag (ad esempio gcr.io/my-project/my-image:latest) o con un digest esatto (ad esempio gcr.io/my-project/my-image@sha256:41f34ab970ee...).

Eseguendo il deployment in un servizio per la prima volta viene creata la prima revisione. Tieni presente che le revisioni sono immutabili. Se esegui il deployment dal tag di un'immagine container, verrà risolto in un digest e la revisione gestirà sempre questo particolare digest.

Puoi eseguire il deployment di un container utilizzando la console Google Cloud, Google Cloud CLI o da un file di configurazione YAML.

Fai clic sulla scheda per le istruzioni relative allo strumento che preferisci.

Configurazione predefinita della località gcloud

Se in precedenza hai configurato una località nella configurazione di default di Google Cloud CLI, i comandi gcloud utilizzano questi valori per impostazione predefinita, tra cui:

  • compute/region
  • compute/zone
  • run/cluster
  • run/cluster_location
  • run/platform
  • run/region

Esegui il seguente comando gcloud config per visualizzare le impostazioni per la configurazione default:

gcloud config configurations describe default

Console

Per eseguire il deployment di un'immagine container:

  1. Vai a Erogazione Knative nella console Google Cloud:

    Vai a Knative serving

  2. Fai clic su Crea servizio per visualizzare la pagina Crea servizio.

    Nel modulo:

    1. Dal menu a discesa, seleziona uno dei cluster GKE disponibili per il tuo servizio.

    2. Inserisci il nome del servizio che preferisci. I nomi dei servizi devono essere univoci per regione e progetto o per cluster. Il nome di un servizio non può essere modificato in un secondo momento.

    3. In Connettività:

      • Seleziona Interno se vuoi limitare l'accesso solo ad altri servizi di pubblicazione Knative o ai servizi nel tuo cluster che utilizzano Istio.
      • Seleziona Esterno per consentire l'accesso esterno al tuo servizio

      Tieni presente che puoi modificare l'opzione di connettività in qualsiasi momento, come descritto in Modificare le impostazioni di connettività dei servizi.

    4. Fai clic su Avanti per passare alla seconda pagina del form di creazione del servizio.

      Nel modulo:

      1. Nella casella di testo URL immagine container, fornisci l'URL di un'immagine da un registry supportato, ad esempio: us-docker.pkg.dev/cloudrun/container/hello:latest

      2. (Facoltativo) Fai clic su Mostra impostazioni avanzate e sulle schede successive per impostare:

      3. Fai clic su Crea per eseguire il deployment dell'immagine in Knative Serving e attendi il completamento del deployment.

    Hai appena eseguito il deployment di un servizio in un cluster in cui è abilitato Knative serving.

Riga di comando

Per eseguire il deployment di un'immagine container:

  1. Esegui il comando gcloud run deploy:

    gcloud run deploy SERVICE --image IMAGE_URL

    • Sostituisci SERVICE con il nome del servizio di cui vuoi eseguire il deployment. Se il servizio specificato non esiste, ne viene creato uno nuovo.

    • Sostituisci IMAGE_URL con un riferimento all'immagine del container, ad esempio gcr.io/cloudrun/hello.

    • Altre opzioni di deployment:

      • Per eseguire il deployment in uno spazio dei nomi diverso da quello predefinito, devi specificarlo utilizzando il parametro --namespace.

      • Per eseguire il deployment in una posizione diversa dalla configurazione predefinita, devi specificare name e location del cluster con i parametri --cluster e --cluster-location:

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Puoi impostare le opzioni di connettività con il flag --connectivity come descritto in Modificare le impostazioni di connettività del servizio per specificare l'accesso interno o esterno.

      • Per Knative serving su VMware, devi includere il parametro --kubeconfig e specificare il file di configurazione:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. Attendi il completamento del deployment. Al termine dell'operazione, viene visualizzato un messaggio di esito positivo insieme all'URL del servizio di cui è stato eseguito il deployment.

YAML

Puoi archiviare la specifica del servizio in un file YAML e poi eseguire il deployment utilizzando Google Cloud CLI.

  1. Crea un nuovo file service.yaml con i seguenti contenuti:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    Sostituisci

    • SERVICE con il nome del servizio Knative serving
    • IMAGE con l'URL dell'immagine del container.

    Puoi anche specificare altre configurazioni, ad esempio variabili di ambiente o limiti di memoria.

  2. Esegui il deployment del nuovo servizio utilizzando il seguente comando:

    gcloud run services replace service.yaml

Eseguire il deployment di una nuova revisione di un servizio esistente

Puoi eseguire il deployment di una nuova revisione utilizzando la console Google Cloud, la gcloud riga di comando o un file di configurazione YAML.

Tieni presente che la modifica di qualsiasi impostazione di configurazione comporta la creazione di una nuova revisione, anche se l'immagine del contenitore non viene modificata. Ogni revisione creata è immutabile.

Fai clic sulla scheda per le istruzioni relative allo strumento che preferisci.

Console

Per eseguire il deployment di una nuova revisione di un servizio esistente:

  1. Vai a Erogazione Knative nella console Google Cloud:

    Vai a Knative serving

  2. Individua il servizio che vuoi aggiornare nell'elenco dei servizi e fai clic su di esso per aprire i relativi dettagli.

  3. Fai clic su MODIFICA ED Esegui il deployment di una nuova revisione. Viene visualizzato il form di deployment della revisione:

  4. Se necessario, fornisci l'URL della nuova immagine del container di cui vuoi eseguire il deployment.

  5. Se vuoi, imposta:

  6. Per inviare tutto il traffico alla nuova revisione, seleziona la casella di controllo Pubblica questa revisione immediatamente. Per implementare gradualmente una nuova revisione, deseleziona la casella di controllo: il deployment non invierà alcun traffico alla nuova revisione. Segui le istruzioni per i rilanci graduali dopo il deployment.

  7. Fai clic su Esegui il deployment e attendi il completamento del deployment.

Riga di comando

Per eseguire il deployment di un'immagine container:

  1. Esegui il comando gcloud run services update:

    gcloud run services update SERVICE --image IMAGE_URL
    • A ogni revisione viene assegnato automaticamente un suffisso. Se vuoi specificare il tuo suffisso di revisione, aggiungi il parametro --revision-suffix.

    • Sostituisci SERVICE con il nome del servizio di cui vuoi eseguire il deployment. Se il servizio specificato non esiste, ne viene creato uno nuovo.

    • Sostituisci IMAGE_URL con un riferimento all'immagine del container, ad esempio gcr.io/cloudrun/hello.

    • Altre opzioni di deployment:

      • Per eseguire il deployment in uno spazio dei nomi diverso da quello predefinito, devi specificarlo utilizzando il parametro --namespace.

      • Per eseguire il deployment in una posizione diversa dalla configurazione predefinita, devi specificare name e location del cluster con i parametri --cluster e --cluster-location:

        gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Puoi impostare le opzioni di connettività con il flag --connectivity come descritto in Modificare le impostazioni di connettività del servizio per specificare l'accesso interno o esterno.

      • Per Knative serving su VMware, devi includere il parametro --kubeconfig e specificare il file di configurazione:

        gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. Attendi il completamento del deployment. Al termine dell'operazione, viene visualizzato un messaggio di esito positivo insieme all'URL del servizio di cui è stato eseguito il deployment.

YAML

Puoi scaricare la configurazione di un servizio esistente in un file YAML con il comando gcloud run services describe utilizzando il --format=export flag. Puoi quindi modificare il file YAML e implementare queste modifiche con il comando gcloud run services replace. Devi assicurarti di modificare solo gli attributi specificati.

  1. Scarica la configurazione del servizio in un file denominato service.yaml nello spazio di lavoro locale:

    gcloud run services describe SERVICE --format export > service.yaml

    Sostituisci SERVICE con il nome del servizio Knative serving.

    1. Nel file locale, aggiorna le impostazioni di revisione in qualsiasi attributo figlio di spec.template.

    2. Esegui il deployment della nuova revisione:

      gcloud run services replace service.yaml

Eseguire il deployment di immagini da altri Google Cloud progetti

Puoi eseguire il deployment di immagini container da altri Google Cloud progetti se impostato le autorizzazioni IAM corrette:

  1. Nella console Google Cloud, apri il progetto per il servizio di pubblicazione Knative.

  2. Vai alla pagina IAM

  3. Recupera i dati del tuo account di servizio:

  4. Apri il progetto proprietario del registry dei contenitori che vuoi utilizzare.

  5. Vai alla pagina IAM

  6. Fai clic su Aggiungi per aggiungere una nuova entità.

  7. Nella casella di testo Nuove entità, incolla l'indirizzo email dell'account di servizio che hai copiato in precedenza.

  8. Nell'elenco a discesa Seleziona un ruolo, seleziona il ruolo da leggere dal registry:

  9. Esegui il deployment dell'immagine container nel progetto che contiene il servizio Knative serving.

Per una maggiore sicurezza, puoi limitare l'accesso concesso:

  • Artifact Registry: concedi il ruolo al repository che archivia le tue immagini container.
  • Container Registry: concedi il ruolo al bucket Cloud Storage che archivia le immagini dei container.

Eseguire il deployment di immagini container private da altri registry container

Questa sezione descrive come configurare le autorizzazioni corrette per eseguire il deployment di immagini container da un registry privato arbitrario a Knative Serving. Un Container Registry privato richiede le credenziali per accedere all'immagine del container. Tieni presente che non devi seguire questi passaggi per eseguire il deployment di immagini contenitore private da Container Registry (Ritirato) o Artifact Registry nello stesso progetto del tuo cluster.

Per poter eseguire il deployment di un'immagine container privata, devi creare un secret Kubernetes di tipo imagePullSecret e associarlo a un account di servizio:

  1. Crea un secret imagePullSecret denominato container-registry:

    kubectl create secret docker-registry container-registry \
      --docker-server=DOCKER_REGISTRY_SERVER \
      --docker-email=REGISTRY_EMAIL \
      --docker-username=REGISTRY_USER \
      --docker-password=REGISTRY_PASSWORD
    • Sostituisci DOCKER_REGISTRY_SERVER con il FQDN del tuo registry privato (ad es. https://gcr.io/ per Container Registry o https://hub.docker.com per Docker Hub).
    • Sostituisci REGISTRY_EMAIL con il tuo indirizzo email.
    • Sostituisci REGISTRY_USER con il tuo nome utente del registry dei container.

      Se utilizzi Container Registry o Artifact Registry e vuoi archiviare e recuperare le credenziali di lunga durata anziché passare token di accesso di breve durata, consulta Metodi di autenticazione: file chiave JSON.

    • Sostituisci REGISTRY_PASSWORD con la password del tuo registry dei container.

  2. Apri il tuo account di servizio predefinito:

    kubectl edit serviceaccount default --namespace default

    Ogni spazio dei nomi nel tuo cluster Kubernetes ha un account di servizio predefinito chiamato default. Questo account di servizio predefinito viene utilizzato per eseguire il pull dell'immagine container, a meno che non sia specificato diversamente quando deploy del servizio di pubblicazione Knative.

  3. Aggiungi il segreto imagePullSecret appena creato al tuo account di servizio predefinito:

    imagePullSecrets:
    - name: container-registry
    

    L'account di servizio dovrebbe avere il seguente aspetto:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret we just created:
    imagePullSecrets:
    - name: container-registry
    

Ora, tutti i nuovi pod creati nell'attuale spazio dei nomi default avranno il segreto imagePullSecret definito.

Deployment con l'iniezione automatica di sidecar abilitata

Per eseguire il deployment del servizio con l'iniezione di sidecar Istio abilitata, consulta la sezione Iniezione automatica di sidecar abilitata nella documentazione di Cloud Service Mesh.

Deployment di servizi su una rete interna

Per eseguire il deployment dei servizi su una rete interna, devi configurare una rete interna privata.

Passaggi successivi

Dopo aver eseguito il deployment di un nuovo servizio, puoi:

Puoi automatizzare le build e i deployment dei tuoi servizi di pubblicazione Knative utilizzando i trigger di Cloud Build: