Utilizzare i parametri di deployment
Questa pagina mostra come utilizzare Cloud Deploy per distribuire un'applicazione di esempio a due target contemporaneamente (un deployment parallelo), passando un valore parametro diverso a ogni manifest o definizione di servizio di cui è stato eseguito il rendering, utilizzando tre metodi diversi.
In questa guida rapida imparerai a:
Creare due cluster GKE o due servizi Cloud Run.
Puoi utilizzare anche i cluster GKE collegati, ma questa guida rapida utilizza solo GKE e Cloud Run.
Creare una configurazione Skaffold e un manifest Kubernetes o una definizione di servizio Cloud Run.
Il manifest o la definizione di servizio sarà lo stesso per entrambi i target figlio, ma al momento del deployment il manifest o la definizione di servizio di cui è stato eseguito il rendering per ogni target figlio avrà valori diversi per i parametri specifici configurati in questa guida rapida.
Definire la pipeline di distribuzione e i target di deployment di Cloud Deploy.
Questa pipeline avrà un target multiplo, che fa riferimento a due target figlio, per distribuire l'app ai due cluster o ai due servizi.
Definire i parametri di deployment in tre posizioni diverse:
- Nella progressione della pipeline
- Nei target figlio
- Nella riga di comando, durante la creazione della release
Creare un'istanza della pipeline di distribuzione creando una release, che esegue automaticamente il deployment nei due target in parallelo.
Visualizzare il "rollout del controller" e i rollout figlio nella Google Cloud console.
Prima di iniziare
- Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init - Assicurati che il service account predefinito di Compute Engine disponga delle autorizzazioni necessarie.
Il account di servizio potrebbe già disporre delle autorizzazioni necessarie. Questi passaggi sono inclusi per i progetti che disattivano la concessione automatica dei ruoli per i service account predefiniti.
- Innanzitutto, aggiungi il ruolo
clouddeploy.jobRunner:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner" - Aggiungi il ruolo di sviluppatore per il runtime specifico.
- Per GKE:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer" - Per Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/run.developer" -
Aggiungi il ruolo
iam.serviceAccountUser, che include l'autorizzazioneactAsper eseguire il deployment nel runtime:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
- Innanzitutto, aggiungi il ruolo
Se hai già installato l'interfaccia a riga di comando, assicurati di eseguire l'ultima versione:
gcloud components update
Crea gli ambienti di runtime
Se esegui il deployment in Cloud Run, puoi saltare questo comando.
Per GKE, crea due cluster: deploy-params-cluster-prod1 e deploy-params-cluster-prod2, con le impostazioni predefinite. Gli endpoint dell'API Kubernetes dei cluster devono essere raggiungibili dalla rete internet pubblica.
Per impostazione predefinita, i cluster GKE sono accessibili esternamente.
gcloud container clusters create-auto deploy-params-cluster-prod1 \
--project=PROJECT_ID \
--region=us-central1 \
&& gcloud container clusters create-auto deploy-params-cluster-prod2 \
--project=PROJECT_ID \
--region=us-west1
Prepara la configurazione e i manifest di Skaffold
Cloud Deploy utilizza Skaffold per fornire i dettagli su cosa eseguire il deployment e come eseguirlo correttamente per i target separati .
In questa guida rapida, crei un file skaffold.yaml, che identifica il manifest Kubernetes o la definizione di servizio Cloud Run da utilizzare per eseguire il deployment dell'app di esempio.
Apri una finestra del terminale.
Crea una nuova directory e spostati al suo interno.
GKE
mkdir deploy-params-gke-quickstart cd deploy-params-gke-quickstartCloud Run
mkdir deploy-params-run-quickstart cd deploy-params-run-quickstartCrea un file denominato
skaffold.yamlcon i seguenti contenuti:GKE
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - kubernetes.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}Questo file è una configurazione Skaffold minima. Per questa guida rapida, crei il file. Tuttavia, puoi anche chiedere a Cloud Deploy di crearne uno per te, per applicazioni semplici non di produzione.
Per ulteriori informazioni su questo file, consulta il riferimento a
skaffold.yamlCrea la definizione per l'applicazione: una definizione di servizio per Cloud Run o un manifest Kubernetes per GKE.
GKE
Crea un file denominato
kubernetes.yamlcon i seguenti contenuti:apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 1 # from-param: ${replicaCount} selector: matchLabels: app: my-app template: metadata: labels: app: my-app annotations: commit: defaultShaValue # from-param: ${git-sha} spec: containers: - name: nginx