Implantar um app em vários destinos ao mesmo tempo
Nesta página, mostramos como usar o Cloud Deploy para enviar um aplicativo de exemplo para dois destinos ao mesmo tempo, uma implantação paralela.
Neste guia de início rápido, você fará o seguinte:
Crie dois clusters do GKE ou dois serviços do Cloud Run.
Também é possível implantar em paralelo com clusters do GKE Enterprise, mas isso este guia de início rápido usa apenas o GKE e o Cloud Run.
Crie uma configuração do Skaffold e um arquivo do Kubernetes ou uma definição de serviço do Cloud Run.
Defina o pipeline de entrega e os destinos de implantação do Cloud Deploy.
Este pipeline terá apenas um destino, mas esse destino será um destinos múltiplos: um destino que representa mais de um destino de implantação. Essa segmentação múltipla é composta por dois objetivos reais, entregando o app a os dois clusters ou serviços.
Instancie o pipeline de entrega criando uma versão, que implanta automaticamente nos dois destinos em paralelo.
Confira o "lançamento do controlador" e os lançamentos filhos no console do Google Cloud.
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.
-
Make sure 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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure 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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Verifique se a conta de serviço padrão do Compute Engine tem permissões suficientes.
A conta de serviço já pode ter as permissões necessárias. Estas etapas são incluídas para projetos que desativam concessões automáticas de papéis para contas de serviço.
- Primeiro, adicione o papel
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 desenvolvedor para o ambiente 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 o papel
iam.serviceAccountUser
, que inclui a permissãoactAs
para implantar no ambiente 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
- Primeiro, adicione o papel
Se você já tiver a CLI instalada, verifique se está executando a versão mais recente:
gcloud components update
Crie seus ambientes de execução
Se você estiver implantando no Cloud Run, pule este comando.
Para o GKE, crie dois clusters: quickstart-cluster-qsprod1
e quickstart-cluster-qsprod2
, com as configurações padrão. O
aglomerados Os endpoints da API Kubernetes precisam ser acessíveis pela rede pelo público
Internet. Os clusters do GKE podem ser acessados
padrão.
gcloud container clusters create-auto quickstart-cluster-qsprod1 \
--project=PROJECT_ID \
--region=us-central1 \
&& gcloud container clusters create-auto quickstart-cluster-qsprod2 \
--project=PROJECT_ID \
--region=us-west1
Preparar a configuração do Skaffold e o manifesto do aplicativo
O Cloud Deploy usa o Skaffold para fornecer os detalhes de o que implantar e como implantá-lo corretamente para seu destinos.
Neste guia de início rápido, você cria um arquivo skaffold.yaml
, que identifica o
manifesto do aplicativo a ser usado para implantar o app de exemplo.
Abra uma janela de terminal.
Crie um novo diretório e navegue até ele.
GKE;
mkdir deploy-gke-parallel-quickstart cd deploy-gke-parallel-quickstart
Cloud Run
mkdir deploy-run-parallel-quickstart cd deploy-run-parallel-quickstart
Crie um arquivo chamado
skaffold.yaml
com o seguinte conteúdo:GKE;
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - k8s-deployment.yaml deploy: kubectl: {}
Cloud Run
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}
Esse arquivo é uma configuração mínima do Skaffold. Para este guia de início rápido, você vai criar o arquivo. Mas você também pode deixe o Cloud Deploy criar uma para você, para aplicativos simples que não sejam de produção.
Consulte a referência do
skaffold.yaml
para mais informações sobre esse arquivo.Crie a definição para seu aplicativo, uma definição de serviço para o Cloud Run ou um manifesto do Kubernetes para GKE.
GKE;
Crie um arquivo chamado
k8s-deployment.yaml
com o seguinte conteúdo:apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app namespace: default spec: replicas: 1 # from-param: ${replicaCount} selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: nginx image: my-app-image
Esse arquivo é um manifesto do Kubernetes simples, que é aplicado ao cluster para implantar o aplicativo.
Cloud Run
Crie um arquivo chamado
service.yaml
com o seguinte conteúdo:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-parallel-run-service spec: template: metadata: annotations: autoscaling.knative.dev/minScale: 1 # from-param: ${minInstances} spec: containers: - image: my-app-image
Esse arquivo é uma definição simples de serviço do Cloud Run, que é usado no momento da implantação para criar serviço.
Criar pipelines e entregas de entrega
É possível definir o pipeline e os destinos em um arquivo ou em arquivos separados. Neste guia de início rápido, você cria um único arquivo.
Crie o pipeline de entrega e a definição do destino:
GKE;
No diretório
deploy-gke-parallel-quickstart
, crie um novo arquivo:clouddeploy.yaml
, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-parallel-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: qsprod-multi profiles: [] deployParameters: - values: replicaCount: "1" matchTargetLabels: label1: label1 - values: replicaCount: "2" matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-multi description: production clusters multiTarget: targetIds: [qsprod-a, qsprod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-a labels: label1: label1 description: production cluster 2 gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-b labels: label2: label2 description: production cluster 3 gke: cluster: projects/PROJECT_ID/locations/us-west1/clusters/quickstart-cluster-qsprod2
Cloud Run
No diretório
deploy-run-parallel-quickstart
, crie um novo arquivo:clouddeploy.yaml
, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-parallel-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: qsprod-multi profiles: [] deployParameters: - values: minInstances: "2" matchTargetLabels: label1: label1 - values: minInstances: "3" matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-multi description: production multiTarget: targetIds: [qsprod-a, qsprod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-a labels: label1: label1 description: production us-central1 run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-b labels: label2: label2 description: production us-west1 run: location: projects/PROJECT_ID/locations/us-west1
Observe que esse arquivo inclui três destinos: um multidestino e dois destinos filhos. Você também pode configurar destinos em um arquivo separado, em vez com o pipeline de entrega.
Observe também que o pipeline de entrega inclui
deployParameters
, com rótulos, e as metas filhas incluem rótulos para corresponder a esses parâmetros. Isso permite transmitir valores separados para destinos filhos separados, se você quiser. Saiba mais.Registre o pipeline e os destinos com o serviço do Cloud Deploy:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
Agora você tem um pipeline com um destino múltiplo que compreende dois destinos do GKE ou do Cloud Run, pronto para implantar seu aplicativo.
Confirme o pipeline e os destinos:
No console do Google Cloud, acesse a guia Página Pipelines de entrega para exibir a lista de entregas disponíveis pipelines de dados.
Abrir a página "Pipelines de entrega"
O pipeline de entrega que você acabou de criar é mostrado. Observe que há um de destino listado na coluna Destinos, mesmo que você tenha configurado três (um de vários destinos e dois filhos) no seu
clouddeploy.yaml
.O único destino listado é o
qsprod-multi
de vários destinos. Filho(a) e os destinos não são mostrados.
Criar uma versão
Uma versão é o recurso central do Cloud Deploy que representa as mudanças que estão sendo implantadas. O pipeline de entrega define o ciclo de vida dessa versão. Consulte Arquitetura de serviço do Cloud Deploy para detalhes sobre esse ciclo de vida.
GKE;
Execute o seguinte comando no diretório deploy-gke-parallel-quickstart
para criar um recurso release
que represente a imagem do contêiner
a ser implantada:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-parallel-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa \
--to-target=qsprod-multi
Cloud Run
Execute o seguinte comando no deploy-run-parallel-quickstart
para criar um recurso release
que representa o contêiner
imagem a ser implantada:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-parallel-demo-app-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:4a856b6f1c3ce723a456ddc2adfbb794cbfba93f727e2d96fcf6540bd0d6fff4 \
--to-target=qsprod-multi
Como sempre, quando você cria uma versão, um lançamento é criado automaticamente para o
primeiro destino no pipeline (ou, como neste caso, um destino específico especificado
usando --to-target=
). Neste início rápido, esse destino é multidestino, então o
rollout
é um "lançamento do controlador" para dois
destinos filhos, e não há destinos subsequentes no pipeline de entrega.
Isso significa que seu aplicativo é implantado em todos os lugares após a criação do lançamento.
Conferir os resultados no console do Google Cloud
Agora que você criou a versão, o lançamento do controlador e o forem criados, esses lançamentos filhos serão implantados (ou de implantação) nos respectivos clusters do GKE ou serviços do Cloud Run.
No console do Google Cloud, acesse a guia A página Pipelines de entrega para ver o pipeline de entrega my-parallel-demo-app-1.
Clique no nome do pipeline de entrega "my-parallel-demo-app-1".
A visualização do pipeline mostra o status de implantação do aplicativo. Como não há apenas uma etapa no pipeline, a visualização mostra apenas um nó.
E sua versão é listada na guia Versões em Detalhes do pipeline de entrega.
Clique no nome da versão,
test-release-001
.Seus lançamentos aparecem em Lançamentos. É possível clicar em um lançamento para ver os detalhes dele, incluindo o registro de implantação.
Limpar
Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga estas etapas.
Excluir os clusters do GKE ou o Cloud Run serviços:
GKE;
gcloud container clusters delete quickstart-cluster-qsprod1 --region=us-central1 --project=PROJECT_ID \ && gcloud container clusters delete quickstart-cluster-qsprod2 --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
Excluir o pipeline de entrega, os destinos múltiplos, os destinos filhos, a versão e lançamentos:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
Exclua os buckets do Cloud Storage criados pelo Cloud Deploy.
Uma termina com
_clouddeploy
, e a outra é[region].deploy-artifacts.[project].appspot.com
.
Pronto, você concluiu as etapas deste início rápido.
A seguir
Leia mais sobre como implantar em vários destinos ao mesmo tempo.
Aprenda as noções básicas sobre a implantação de aplicativos.
Saiba como gerenciar seus manifestos.