Use parâmetros de implementação
Esta página mostra como usar o Cloud Deploy para implementar uma aplicação de exemplo em dois alvos em simultâneo (uma implementação paralela), enquanto passa um valor de parâmetro diferente a cada definição de serviço ou manifesto renderizado, usando três métodos diferentes.
Neste início rápido, vai fazer o seguinte:
Crie dois clusters do GKE ou dois serviços do Cloud Run.
Também pode usar clusters do GKE Enterprise, mas este início rápido usa apenas o GKE e o Cloud Run.
Crie uma configuração do Skaffold e um manifesto do Kubernetes ou uma definição de serviço do Cloud Run.
O manifesto ou a definição do serviço será o mesmo para os destinos secundários, mas, no momento da implementação, o manifesto ou a definição do serviço renderizado para cada destino secundário terá valores diferentes para os parâmetros específicos configurados neste início rápido.
Defina o pipeline de entrega e os destinos de implementação do Cloud Deploy.
Este pipeline vai ter um multi-alvo, que faz referência a dois alvos secundários, para entregar a sua app aos dois clusters ou dois serviços.
Defina parâmetros de implementação em três locais diferentes:
- Na progressão do pipeline
- Nos alvos secundários
- Na linha de comandos, quando cria o lançamento
Instancie o pipeline de fornecimento criando uma versão que é implementada automaticamente nos dois destinos em paralelo.
Veja a "implementação do controlador" e as implementações secundárias na Google Cloud consola.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
- Certifique-se de que a conta de serviço predefinida do Compute Engine tem autorizações suficientes.
A conta de serviço pode já ter as autorizações necessárias. Estes passos são incluídos para projetos que desativam as concessões de funções automáticas para contas de serviço predefinidas.
- Primeiro, adicione a função
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"
- Adicione a função de programador para o seu tempo de execução específico.
- Para o 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"
- Para o 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"
-
Adicione a função
iam.serviceAccountUser
, que inclui a autorizaçãoactAs
para implementar no tempo de execução: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
Crie os seus ambientes de tempo de execução
Se estiver a implementar no Cloud Run, pode ignorar este comando.
Para o GKE, crie dois clusters:
deploy-params-cluster-prod1
edeploy-params-cluster-prod2
, com as predefinições. Os pontos finais da API Kubernetes dos clusters têm de ser acessíveis através da rede a partir da Internet pública. Os clusters do GKE são acessíveis externamente por predefinição.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
Prepare a configuração e os manifestos do Skaffold
O Cloud Deploy usa o Skaffold para fornecer os detalhes sobre o que implementar e como o implementar corretamente para os seus destinos separados.
Neste início rápido, cria um ficheiro
skaffold.yaml
, que identifica a definição do serviço do manifesto do Kubernetes ou do Cloud Run a usar para implementar a app de exemplo.Abra uma janela de terminal.
Crie um novo diretório e navegue para o mesmo.
GKE
mkdir deploy-params-gke-quickstart cd deploy-params-gke-quickstart
Cloud Run
mkdir deploy-params-run-quickstart cd deploy-params-run-quickstart
Crie um ficheiro denominado
skaffold.yaml
com o seguinte conteúdo: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: {}
Este ficheiro é uma configuração mínima do Skaffold. Para este início rápido, cria o ficheiro No entanto, também pode pedir ao Cloud Deploy que crie um para si, para aplicações simples que não sejam de produção.
Consulte a referência
skaffold.yaml
para mais informações acerca deste ficheiro.Crie a definição para a sua aplicação: uma definição de serviço para o Cloud Run ou um manifesto do Kubernetes para o GKE.
GKE
Crie um ficheiro denominado
kubernetes.yaml
com o seguinte conteúdo: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 image: my-app-image env: - name: envvar1 value: default1 # from-param: ${application_env1} - name: envvar2 value: default2 # from-param: ${application_env2}
Este ficheiro é um manifesto do Kubernetes, que é aplicado ao cluster para implementar a aplicação. A imagem do contentor a implementar é definida aqui como um marcador de posição,
my-app-image
, que é substituído pela imagem específica quando cria a versão.Cloud Run
Crie um ficheiro denominado
service.yaml
com o seguinte conteúdo:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-parallel-run-service spec: autoscaling.knative.dev/minScale: 1 # from-param: ${minInstances} selector: matchLabels: app: my-app template: metadata: annotations: commit: defaultShaValue # from-param: ${git-sha} spec: containers: - image: my-app-image env: - name: envvar1 value: defaultValue1 # from-param: ${application_env1} - name: envvar2 value: defaultValue2 # from-param: ${application_env2}
Este ficheiro é uma definição básica do serviço do Cloud Run, que é usada para implementar a aplicação. A imagem do contentor a implementar é definida aqui como um marcador de posição,
my-app-image
, que é substituído pela imagem específica quando cria a versão.
Crie o seu pipeline de entrega e segmentações
Pode definir o seu pipeline e alvos num ficheiro ou em ficheiros separados. Neste início rápido, criamos um único ficheiro.
Crie o pipeline de fornecimento e a definição do alvo:
GKE
No diretório
deploy-params-gke-quickstart
, crie um novo ficheiro:clouddeploy.yaml
, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-params-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: params-prod-multi deployParameters: - values: replicaCount: "2" # Apply the deploy parameter replicaCount: "2" to the target with this label matchTargetLabels: label1: label1 - values: replicaCount: "3" # Apply the deploy parameter replicaCount: "3" to the target with this label matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-multi description: production clusters multiTarget: targetIds: [params-prod-a, params-prod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-a labels: label1: label1 description: production cluster 1 deployParameters: application_env1: "sampleValue1" gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/deploy-params-cluster-prod1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-b labels: label2: label2 description: production cluster 2 deployParameters: application_env2: "sampleValue2" gke: cluster: projects/PROJECT_ID/locations/us-west1/clusters/deploy-params-cluster-prod2
Cloud Run
No diretório
deploy-params-run-quickstart
, crie um novo ficheiro:clouddeploy.yaml
, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-params-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: params-prod-multi deployParameters: - values: minInstances: "2" # Apply the deploy parameter minInstances: "2" to the target with this label matchTargetLabels: label1: label1 - values: minInstances: "3" # Apply the deploy parameter minInstances: "3" to the target with this label matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-multi description: production clusters multiTarget: targetIds: [params-prod-a, params-prod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-a labels: label1: label1 description: production cluster 1 deployParameters: application_env1: "sampleValue1" run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: params-prod-b labels: label2: label2 description: production cluster 2 deployParameters: application_env2: "sampleValue2" run: location: projects/PROJECT_ID/locations/us-west1
Registe o pipeline e os destinos no serviço Cloud Deploy:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
Agora, tem um pipeline com um alvo múltiplo que compreende dois alvos do GKE ou do Cloud Run, pronto para implementar a sua aplicação.
Confirme o seu pipeline e alvos:
Na Google Cloud consola, navegue para a página Cloud Deploy Pipelines de entrega para ver uma lista dos pipelines de entrega disponíveis.
Abra a página Pipelines de fornecimento
É apresentada a conduta de entrega que acabou de criar. Repare que existe um alvo listado na coluna Alvos, apesar de ter configurado três alvos (um alvo múltiplo e dois alvos secundários) no ficheiro
clouddeploy.yaml
.Repare que o único alvo apresentado é o alvo múltiplo
params-prod-multi
. Os alvos secundários não são apresentados.
Crie um lançamento
Um lançamento é o recurso central do Cloud Deploy que representa as alterações que estão a ser implementadas. O pipeline de fornecimento define o ciclo de vida dessa versão. Consulte a secção Arquitetura do serviço Cloud Deploy para ver detalhes sobre esse ciclo de vida.
GKE
Execute o seguinte comando a partir do diretório
deploy-gke-parallel-quickstart
para criar um recursorelease
que represente a imagem do contentor a implementar:gcloud deploy releases create test-release-001 \ --project=PROJECT_ID \ --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"
Repare na flag
--images=
, que usa para substituir o marcador de posição (my-app-image
) no manifesto pela imagem específica qualificada com SHA. A Google recomenda que crie modelos dos seus manifestos desta forma e que use nomes de imagens qualificados por SHA na criação de lançamentos.Cloud Run
Execute o seguinte comando a partir do diretório
deploy-run-parallel-quickstart
para criar um recursorelease
que represente a imagem do contentor a implementar:gcloud deploy releases create test-release-001 \ --project=PROJECT_ID \ --region=us-central1 \ --delivery-pipeline=my-params-demo-app-1 \ --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a \ --deploy-parameters="git-sha=f787cac"
Repare na flag
--images=
, que usa para substituir o marcador de posição (my-app-image
) na definição do serviço pela imagem específica qualificada com SHA. A Google recomenda que crie modelos das definições de serviços e tarefas desta forma e que use nomes de imagens qualificados por SHA na criação de lançamentos.Como sempre, quando cria um lançamento, é criada automaticamente uma implementação para o primeiro destino no seu pipeline (a menos que seja especificado um destino específico através de
--to-target=
). Neste início rápido, este destino é um destino múltiplo, pelo querollout
é uma "implementação de controlador" para dois destinos secundários, e não existem destinos subsequentes no pipeline de entrega. Isto significa que a sua aplicação é implementada em todos os lugares após a criação da implementação.Veja os resultados na Google Cloud consola
Agora que criou a versão e as implementações secundárias e de controladores, essas implementações secundárias são implementadas (ou estão em processo de implementação) nos respetivos clusters do GKE ou serviços do Cloud Run.
Na Google Cloud consola, navegue para a página Cloud Deploy Pipelines de fornecimento para ver o pipeline de fornecimento my-parallel-demo-app-1.
Clique no nome do pipeline de fornecimento "my-parallel-demo-app-1".
A visualização do pipeline mostra o estado de implementação da app. Uma vez que existe apenas uma fase no pipeline, a visualização mostra apenas um nó.
O lançamento é apresentado no separador Lançamentos em Detalhes do pipeline de envio.
Clique no nome do lançamento,
test-release-001
.As implementações são apresentadas em Implementações. Pode clicar numa implementação para ver os respetivos detalhes, incluindo o registo de implementação.
Em Detalhes do lançamento, selecione o separador Artefactos.
A tabela Implementar parâmetros lista todos os parâmetros que configurou no manifesto e os valores que forneceu para esses parâmetros:
GKE
Cloud Run
Além dos parâmetros e dos valores, a tabela mostra a que destino cada parâmetro se aplica.
Na coluna Inspetor de lançamentos, clique em Ver artefactos para qualquer um dos destinos.
Clique em Mostrar diferença e, de seguida, selecione
params-prod-a
para um destino eparams-prod-b
para o outro.É apresentada uma comparação, que compara os manifestos renderizados dos dois alvos, incluindo os valores que especificou:
GKE
Cloud Run
Limpar
Para evitar incorrer em cobranças na sua Google Cloud conta pelos recursos usados nesta página, siga estes passos.
Elimine os clusters do GKE ou os serviços do Cloud Run:
GKE
gcloud container clusters delete deploy-params-cluster-prod1 --region=us-central1 --project=PROJECT_ID \ && gcloud container clusters delete deploy-params-cluster-prod2 --region=us-west1 --project=PROJECT_ID
Cloud Run
gcloud run services delete my-parallel-run-service --region=us-central1 --project=PROJECT_ID \ && gcloud run services delete my-parallel-run-service --region=us-west1 --project=PROJECT_ID
Elimine o pipeline de envio, os vários destinos, os destinos secundários, o lançamento e as implementações:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
Elimine os contentores do Cloud Storage que o Cloud Deploy criou.
Uma termina com
_clouddeploy
e a outra é[region].deploy-artifacts.[project].appspot.com
.
É tudo. Concluiu este início rápido!
O que se segue?
Saiba mais sobre a utilização de parâmetros de implementação.
Leia mais sobre como implementar em vários destinos em simultâneo.
Aprenda os princípios básicos da implementação de aplicações.
Saiba como gerir os seus manifestos.
- Primeiro, adicione a função
Se já tiver a CLI instalada, certifique-se de que está a executar a versão mais recente:
gcloud components update