Passare i parametri al deployment

Con Cloud Deploy puoi passare i parametri per la release e quelli vengono forniti al manifest o ai manifest prima che questi vengano applicati ai rispettivi target. Questa sostituzione viene eseguita dopo i manifest vengono renderizzati come passaggio finale nella Operazione di rendering di Cloud Deploy. I valori vengono forniti a tutti i manifest identificati nel file skaffold.yaml che contengono i segnaposto corrispondenti.

Devi solo includere i segnaposto nel manifest e impostarne i valori nella pipeline di importazione di Cloud Deploy o nella configurazione del target oppure quando crei una release.

Questo articolo spiega come fare.

Perché utilizzare i parametri di deployment?

Un utilizzo tipico è l'applicazione di valori diversi ai manifest per diversi target in un deployment parallelo. Tuttavia, puoi utilizzare i parametri di deployment per qualsiasi elemento che richieda la sostituzione della coppia chiave-valore post-rendering nel manifest.

Come funziona

I passaggi riportati di seguito descrivono la procedura generale per configurare i parametri di deployment e fornire i valori:

  1. Configura la parametrizzazione del deployment come descritto qui.

    È incluso quanto segue:

    • Aggiungi i segnaposto al file manifest.

    • Aggiungi i valori per i segnaposto.

      Esistono tre modi per farlo, descritti qui.

  2. Quando crei una release, il manifest viene generato.

    Se inizi con un manifest basato su modello, ora i valori vengono applicati alle variabili del modello. Se inizi con un manifest non elaborato, questo rimarrà invariato. Questo Il rendering viene eseguito da Skaffold.

    Tuttavia, puoi avere altre variabili nel file manifest per le quali i valori non vengono applicati al momento del rendering. Questi sono i parametri di deployment descritti in questo documento.

    Al momento della creazione della release, tutti i parametri di deployment vengono compilati in un dizionario, che viene utilizzato per sostituire i valori prima dell'applicazione dei manifest.

  3. Dopo il rendering, Cloud Deploy sostituisce i valori per il deployment parametri.

    Questi sono i valori configurati nel primo passaggio.

    Il processo di rendering ha già applicato valori ai modelli manifest, sostituito alcuni valori e aggiunto etichette specifiche per Cloud Deploy. ma i valori dei parametri di deployment vengono sostituiti dopo il rendering. Le differenze tra i modelli di manifest vengono descritti i parametri qui

  4. Il file manifest viene applicato al runtime di destinazione per eseguire il deployment dell'applicazione.

    Sono inclusi i valori sostituiti al momento del rendering e i valori di eventuali parametri di deployment

Diversi modi per passare i valori

Puoi fornire i parametri e i relativi valori in tre modi:

  • Nella definizione della pipeline di distribuzione

    Fornisci il parametro e il relativo valore nella definizione di una fase della progressione della pipeline di importazione. Il parametro viene trasmesso al target rappresentati da quella fase. Se quella fase fa riferimento a un multi-target, i valori impostati qui vengono usati per tutti i target figlio.

    Questo metodo consente di sostituire un valore per tutte le release all'interno di una determinata pipeline, per tutti i target interessati. I parametri definiti per una fase identificano un'etichetta e il target corrispondente per quella fase deve avere un'etichetta corrispondente.

  • Nella definizione del target

    Puoi configurare il parametro e il suo valore nella definizione del target per trovare le regole. Questo metodo consente di sostituire un valore per quel target per tutte le release.

  • Nella riga di comando, quando crei una release

    Includi il parametro e il suo valore utilizzando il flag --deploy-parameters sul comando gcloud deploy releases create.

    Questo metodo ti consente di sostituire un valore al momento della creazione della release, applicandolo ai manifest di tutti i target interessati.

La configurazione di questi elementi è spiegata più nel dettaglio qui.

Posso utilizzare più di uno di questi metodi?

Sì, puoi includere i parametri di deployment nella fase della pipeline, nella configurazione della destinazione e nella riga di comando. Il risultato è che tutti i parametri vengono accettati e aggiunti al dizionario. Tuttavia, se un parametro specifico viene passato in più di una posizione, ma con valori diversi, il comando gcloud deploy releases create non riesce e restituisce un errore.

Qual è la differenza rispetto ai modelli manifest

I parametri di deployment, come descritti in questo articolo, si distinguono dai segnaposto in un manifest basato su modello per la sintassi. Tuttavia, se ti stai chiedendo perché ti servano i parametri di deployment anziché utilizzare semplicemente le tecniche standard per i manifest basati su modelli, la tabella seguente mostra i diversi scopi:

Tecnica Ora di sostituzione Applicabile a
Modello manifest Fase di rendering Release specifica; target specifico
Nella riga di comando Post-rendering Release specifica; tutti i target
Nella pipeline di distribuzione Post-rendering Tutte le release; target specifici (per etichetta)
In linea con l'obiettivo Post-rendering Tutte le uscite; target specifico

Questo documento riguarda solo i parametri di deployment (riga di comando, pipeline e target), non i manifest con modello.

Limitazioni

  • Per ogni tipo di parametro, puoi creare un massimo di 25 parametri.

  • Un target figlio può inoltre ereditare fino a 25 parametri dal target multiplo padre, fino a un massimo di 100 parametri sui target, inclusi quelli impostati nella fase della pipeline.

  • Il nome della chiave è limitato a un massimo di 63 caratteri e quanto segue espressione regolare:

    ^[a-zA-Z0-9]([-A-Za-z0-9_.]{0,61}[a-zA-Z0-9])?$
    

    Un'eccezione è quando utilizzi un parametro di deployment come in un target personalizzato, devi utilizzare una barra tra la parola chiave customTarget e il nome della variabile (customTarget/VAR_NAME). Consulta: Input e output obbligatori per la sintassi supportata.

  • Il prefisso CLOUD_DEPLOY_ è riservato e non può essere utilizzato per il nome di una chiave.

  • Non puoi avere due chiavi con lo stesso nome applicate allo stesso target.

  • Il valore può essere vuoto, ma può contenere al massimo 512 caratteri.

  • Non è possibile utilizzare i segnaposto Parametri di deployment per Valori di configurazione Helm, ma deve essere trasmesso per convenzione.

Configura parametri di deployment

Questa sezione descrive come configurare i valori dei parametri di deployment che verranno applicata al manifest Kubernetes, al tuo servizio Cloud Run, o il tuo modello Helm.

Oltre a configurare le coppie chiave-valore, devi aggiungere il segnaposto o segnaposto al file manifest, come descritto in questa sezione.

Aggiungere segnaposto al manifest

Nel manifest Kubernetes (per GKE) o nel file YAML del servizio (per Cloud Run), aggiungi segnaposto per i valori che vuoi sostituire dopo il rendering.

Sintassi

Per le release che non utilizzano il renderer Helm con Skaffold, utilizza la seguente sintassi per i segnaposto:

[PROPERTY]: [DEFAULT_VALUE] # from-param: ${VAR_NAME}

In questa riga...

  • PROPERTY:

    La proprietà di configurazione nel file manifest Kubernetes o YAML del servizio Cloud Run.

  • DEFAULT_VALUE

    È un valore da utilizzare se non vengono forniti valori per questa proprietà nella nella riga di comando o nella configurazione della pipeline o della destinazione.

  • # from-param:

    Utilizza un carattere di commento per impostare Cloud Deploy deploy-parameters e from-param: indica Cloud Deploy seguito da un segnaposto deploy-parameters.

  • ${VAR_NAME}

    È il segnaposto da sostituire. Deve corrispondere alla chiave di una coppia chiave-valore fornita nella pipeline di importazione o nella configurazione del target o alla creazione della release.

Parametri per i valori dei grafici Helm

Se stai eseguendo il rendering di un grafico Helm che accetta valori di configurazione e vuoi impostare questi valori utilizzando i parametri di deployment, i parametri di deployment devono avere nomi corrispondenti ai valori di configurazione di Helm che vuoi impostare. Tutti i parametri di deployment vengono passati a Helm come --set argomenti al momento del rendering, senza dover modificare il skaffold.yaml.

Ad esempio, se skaffold.yaml installa un grafico Helm che prende una parametro di configurazione webserver.port per specificare la porta del server web e vuoi impostarlo in modo dinamico a partire da una devi creare un parametro di deployment con il parametro nome webserver.port con il valore che preferisci per la porta del server web.

Di conseguenza, se non fai riferimento solo ai modelli Helm in skaffold.yaml, ma anche di eseguirne la creazione, puoi utilizzare sintassi delle variabili Helm standard di {{ .Values.VAR_NAME }} nei tuoi modelli Helm.

Ad esempio, se è stato configurato un parametro di deployment webserver.port, potremmo utilizzarlo in questo modo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webserver
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webserver
  template:
    metadata:
      labels:
        app: webserver
    spec:
      containers:
      - name: webserver
        image: gcr.io/example/webserver:latest
        ports:
        - containerPort: {{ .Values.webserver.port }} # replaced by deploy parameter `webserver.port`.
          name: web
        env:
        - name: WEBSERVER_PORT
          value: {{ .Values.webserver.port }} # replaced by deploy parameter `webserver.port`.

Aggiungere un parametro allo stage della pipeline

Puoi aggiungere coppie chiave-valore a una fase della progressione della pipeline di importazione. Questo è utile per i deployment paralleli, per distinguere tra i target secondari.

  1. Aggiungi i segnaposto al manifest Kubernetes o a Cloud Run come descritto qui.

    Ecco un esempio:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: nginx-deployment
     labels:
       app: nginx
    spec:
     replicas: 1 # from-param: ${deploy_replicas}
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       spec:
         containers:
         - name: nginx
           image: nginx:1.14.2
           ports:
           - containerPort: 80
    
  2. Configura la pipeline di importazione in modo da includere deployParameters per la fase della pipeline applicabile.

    Il seguente codice YAML è la configurazione di una fase della pipeline il cui target è un target multiplo, che in questo caso ha due target secondari:

    serialPipeline:
     stages:
       - targetId: dev
         profiles: []
       - targetId: prod  # multi-target
         profiles: []
         deployParameters:
           - values:
               deploy_replicas: 1
               log_level: "NOTICE"
             matchTargetLabels: # optional, applies to all resources if unspecified; AND'd
               my-app: "post-render-config-1"
           - values:
               deploy_replicas: 2
               log_level: "WARNING"
             matchTargetLabels: # optional, applies to all resources if unspecified; AND'd
               my-app: "post-render-config-2"
    

    In questa configurazione della pipeline di distribuzione, la stanza deployParameters include due values, ciascuno dei quali contiene quanto segue:

    • Il nome della variabile, che corrisponde al nome della variabile impostata nel manifest

    • Un valore per la variabile

    • (Facoltativo) Una o più etichette da confrontare con le etichette specifiche del target

      Se non specifichi un'etichetta, in una stanza matchTargetLabels, quel valore viene utilizzato per tutti i target nella fase.

  3. Se hai incluso matchTargetLabels , devi anche Includi etichette sui target, di conseguenza. In questo modo, identificare il valore da assegnare a un determinato target figlio.

    Il target deve corrispondere a tutte le etichette impostate nella stanza values.

    Se ometti matchTargetLabels, i valori values impostati nella pipeline vengono applicato a tutti i target secondari. Tuttavia, se imposti più di un valore per lo stesso parametro, la release non andrà a buon fine.

Dopo il rendering di ogni manifest, Cloud Deploy aggiunge il valore per ciascuna variabile nel manifest sottoposto a rendering.

Aggiungi un parametro alla configurazione di destinazione

Puoi aggiungere coppie chiave-valore a un target. Se utilizzi parametri di deployment distinguere tra più target figlio, configurarli su quei target non sul target multiplo.

  1. Configura il manifest Kubernetes o la definizione del servizio Cloud Run utilizzando un parametro al posto del valore che vuoi impostare al momento del deployment.

    Ecco un esempio:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: nginx-deployment
     labels:
       app: nginx
    spec:
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       spec:
         containers:
         - name: nginx
           image: nginx:1.14.2
           env:
           - name: envvar1
             value: example1 # from-param: ${application_env1}
           - name: envvar2
             value: example2 # from-param: ${application_env2}
    

    In questo manifest, il parametro envvar1 è impostato su un valore predefinito di example1 e envvar2 è impostato su un valore predefinito di example2.

  2. Configura i target in modo da includere deployParameters.

    Per ogni parametro che includi, devi identificare quanto segue:

    • Il nome della chiave, che corrisponde al nome della chiave (variabile) impostata nel manifest.

    • Un valore per la chiave. Se non fornisci un valore, viene utilizzato il valore predefinito impostato nel file manifest.

    Il seguente codice YAML è la configurazione per due target. Ogni target include una stanza deployParameters che imposta un valore. Ogni target include anche da abbinare ai parametri di deployment configurati nella fase di pipeline.

    apiVersion: deploy.cloud.google.com/v1beta1
    kind: Target
    metadata:
      name: prod1
      labels:
        my-app: "post-render-config-1"
    description: development cluster
    deployParameters:
      application_env1: "newValue1"
    ---
    
    apiVersion: deploy.cloud.google.com/v1beta1
    kind: target
    metadata:
      name: prod2
      labels:
        my-app: "post-render-config-2"
    description: development cluster
    deployParameters:
      application_env1: "newValue2"
    

Quando viene creata la release, ma dopo il rendering dei manifest, Cloud Deploy aggiunge questi valori ai manifest visualizzati se includono le chiavi associate.

Passare un parametro al momento della creazione della release

Per passare parametri e valori alla release:

  1. Configura il file manifest Kubernetes Definizione del servizio Cloud Run utilizzando un parametro al posto di da impostare al momento del deployment.

    Ecco un esempio:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: nginx-deployment
     labels:
       app: nginx
    spec:
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       annotations:
         commit: defaultShaValue # from-param: ${git-sha}
       spec:
         containers:
         - name: nginx
           image: nginx:1.14.2
    

    In questo esempio, l'SHA del commit è impostato come variabile denominata ${git-sha}. Un valore viene trasmesso al momento della creazione della release utilizzando il metodo --deploy-parameters=, come illustrato nel passaggio successivo.

    La sintassi per questa variabile è $ più il nome della variabile tra parentesi graffe. In questo esempio, è ${git-sha}.

  2. Quando crei una release, includi l'opzione --deploy-parameters nel comando gcloud deploy releases create.

    --deploy-parameters utilizza un elenco separato da virgole di coppie chiave/valore, dove La chiave è il segnaposto che hai aggiunto al manifest.

    Il comando sarà simile a questo:

    gcloud deploy releases create test-release-001 \
    --project=my-example-project \
    --region=us-central1 \
    --delivery-pipeline=my-params-demo-app-1 \
    --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa \
    --deploy-parameters="git-sha=f787cac"
    
    

Quando la release viene creata, ma dopo il rendering del manifest, Cloud Deploy fornisce i valori ai manifest sottoposti a rendering se includono le chiavi associate.

Esegui il deployment dei parametri con target personalizzati

Puoi utilizzare qualsiasi parametro di deployment come variabile d'ambiente nei target personalizzati. A tale scopo, utilizza la sintassi specificata per i target personalizzati.

I parametri di deployment destinati come input per i target personalizzati possono iniziare con customTarget/, ad esempio customTarget/vertexAIModel. Se utilizzi questo prefisso, utilizza la seguente sintassi quando fai riferimento a un parametro di deployment come variabile di ambiente:

CLOUD_DEPLOY_customTarget_[VAR_NAME]

Dove VAR_NAME è il nome che segue la barra nella il nome del parametro di deployment. Ad esempio, se definisci una parametro di deployment denominato customTarget/vertexAIModel, come riferimento CLOUD_DEPLOY_customTarget_vertexAIModel.

Parametri di deployment con hook di deployment

Puoi utilizzare qualsiasi parametro di deployment come variabile d'ambiente nei hook di deployment.

Parametri di deployment con verifica del deployment

Puoi utilizzare qualsiasi parametro di deployment come variabile di ambiente in verifica del deployment.

Visualizzare tutti i parametri per una release

Puoi visualizzare i parametri impostati per una determinata release. Sono visualizzato in una tabella nella pagina Dettagli sulla release e sulla riga di comando (gcloud deploy releases describe).

  1. Nella pagina principale di Cloud Deploy, fai clic sulla pipeline di distribuzione che include la release che vuoi visualizzare.

  2. Nella pagina Dettagli sulla release, seleziona la scheda Artefatti.

Tutti i parametri di deployment impostati per questa release vengono mostrati in una tabella. con il nome e il valore della variabile in una colonna e il target o il target target nell'altra colonna.

parametri e valori di deployment mostrati nella console Google Cloud

Passaggi successivi