Use uma política de implementação para restringir implementações
Este início rápido mostra como impedir implementações do Cloud Deploy num destino durante um período especificado e como substituir essa restrição.
Neste início rápido, vai fazer o seguinte:
Crie uma configuração do Skaffold e um manifesto do Kubernetes ou uma definição do serviço do Cloud Run para especificar a imagem do contentor (pré-criada) a implementar.
Defina o pipeline de entrega do Cloud Deploy e um destino de implementação, que aponta para um cluster do GKE ou um serviço do Cloud Run.
Este pipeline inclui apenas uma fase para o único objetivo.
Configure uma política de implementação para um alvo.
A política define um intervalo de datas durante o qual as implementações para esse destino são proibidas.
Crie um lançamento.
Normalmente, quando cria um lançamento, o Cloud Deploy cria uma implementação para o primeiro destino na progressão do pipeline de entrega. Neste caso, como existe uma política que impede a implementação no destino, a implementação para esse destino não é criada.
Veja os resultados na Google Cloud consola.
Devido à política, não vai ver uma implementação para o lançamento e não existe nenhuma ação pendente na visualização do pipeline de entrega.
Substituir a política de implementação.
Esta substituição faz com que o Cloud Deploy crie agora a implementação para o destino.
Veja os resultados na Google Cloud consola.
Uma vez que a política foi substituída, pode ver que existe uma implementação em curso (ou concluída, se tiver passado tempo suficiente).
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, 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, 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
Abra uma janela de terminal.
Crie um novo diretório e navegue para o mesmo.
mkdir deploy-policy-quickstart cd deploy-policy-quickstart
Crie um ficheiro denominado
skaffold.yaml
com o seguinte conteúdo:GKE
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - k8s-pod.yaml deploy: kubectl: {}
Cloud Run
apiVersion: skaffold/v4beta1 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 básicas que não sejam de produção.
Consulte a referência
skaffold.yaml
para mais informações acerca deste ficheiro de configuração.Crie o manifesto 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
k8s-pod.yaml
com o seguinte conteúdo:apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: nginx image: my-app-image
Este ficheiro é um manifesto básico 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-deploy-policy-run-service spec: template: spec: containers: - image: my-app-image
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 pipeline de fornecimento e a definição do alvo:
GKE
No diretório
deploy-policy-quickstart
, crie um novo ficheiro:clouddeploy.yaml
, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod
Cloud Run
No diretório
deploy-policy-quickstart
, crie um novo ficheiro:clouddeploy.yaml
, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: deploy-policy-pipeline serialPipeline: stages: - targetId: prod-target --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod-target description: production Run service run: location: projects/PROJECT_ID/locations/us-central1
Registe o seu pipeline e recursos de destino com o serviço Cloud Deploy:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
Agora, tem um pipeline de entrega com um alvo.
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 pipeline de fornecimento que acabou de criar, com um alvo apresentado na coluna Alvos.
No mesmo diretório em que criou o pipeline de envio e os destinos, crie um novo ficheiro,
deploypolicy.yaml
, com o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 description: Restrict all rollouts in the deploy-policy-pipeline resource for the next ten years kind: DeployPolicy metadata: name: quickstart-deploy-policy selectors: - deliveryPipeline: id: 'deploy-policy-pipeline' rules: - rolloutRestriction: id: no-rollouts timeWindows: timeZone: America/New_York oneTimeWindows: - start: 2024-01-01 00:00 end: 2034-01-01 24:00
Esta política bloqueia implementações durante 10 anos, a partir de 1 de janeiro de 2024. Esta não é uma política realista. É feita desta forma apenas para este início rápido, para garantir que a política está em vigor quando criar o seu lançamento.
Registe o recurso da política de implementação no serviço Cloud Deploy:
gcloud deploy apply --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
Confirme a sua política de implementação:
Na Google Cloud consola, navegue para a página do Cloud Deploy Implementar políticas para ver uma lista das suas políticas disponíveis.
Abra a página Implementar políticas
É apresentada a política de implementação que acabou de criar.
Na Google Cloud consola, navegue novamente para a página Cloud Deploy Pipelines de fornecimento para ver o seu pipeline de fornecimento (
deploy-policy-pipeline
).Clique no nome do pipeline de fornecimento (
deploy-policy-pipeline
).A visualização do pipeline mostra o estado de implementação da app. Neste caso, como a política foi substituída, a implementação foi criada e bem-sucedida.
O lançamento é apresentado no separador Lançamentos em Detalhes do pipeline de envio.
Elimine o cluster do GKE ou o serviço do Cloud Run:
GKE
gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
Cloud Run
gcloud run services delete my-deploy-policy-run-service --region=us-central1 --project=PROJECT_ID
Elimine a política de implementação:
gcloud deploy delete --file=deploypolicy.yaml --region=us-central1 --project=PROJECT_ID
Elimine o pipeline de envio, o destino, o lançamento e a implementação:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
Elimine ambos os contentores do Cloud Storage criados pelo Cloud Deploy.
Se já tiver a CLI Google Cloud instalada, certifique-se de que está a executar a versão mais recente:
gcloud components update
Crie o seu ambiente de tempo de execução
Se estiver a implementar no Cloud Run, pode ignorar este comando.
Para o GKE, crie um cluster: quickstart-cluster-qsprod
.
O ponto final da API Kubernetes do cluster tem de ser acessível 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 quickstart-cluster-qsprod \
--project=PROJECT_ID \
--region=us-central1
Prepare a configuração do Skaffold e o manifesto da aplicação
O Cloud Deploy usa o Skaffold para fornecer os detalhes sobre o que implementar e como o implementar no seu destino.
Neste início rápido, cria um ficheiro skaffold.yaml
que identifica o manifesto do Kubernetes a usar para implementar a app de exemplo.
Crie o seu pipeline de entrega e segmentação
Pode definir o pipeline de entrega e os alvos num ficheiro ou em ficheiros separados. Neste início rápido, cria um único ficheiro com ambos.
Crie a sua política de implementação
Pode definir a política de implementação no mesmo ficheiro que o pipeline de entrega e os destinos, ou pode defini-la num ficheiro separado. Para este início rápido, definimos o elemento separadamente.
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-policy-quickstart
para criar a versão:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
Repare na flag --images=
, que usa para substituir o marcador de posição (my-app-image
) no manifesto ou na definição do serviço pela imagem específica qualificada por SHA. A Google recomenda que crie modelos dos seus manifestos desta forma e que use nomes de imagens qualificados com SHA na criação da versão.
Cloud Run
Execute o seguinte comando a partir do diretório deploy-policy-quickstart
para criar a versão:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
Repare na flag --images=
, que usa para substituir o marcador de posição (my-app-image
) no manifesto ou na definição do serviço pela imagem específica qualificada por SHA. A Google recomenda que crie modelos dos seus manifestos desta forma e que use nomes de imagens qualificados com SHA na criação da versão.
Em circunstâncias normais, o Cloud Deploy cria a implementação no primeiro destino quando cria o lançamento através deste comando. Neste caso, uma vez que as implementações estão restritas de acordo com a política de implementação, não é criada nenhuma implementação. É apresentada uma mensagem de erro na linha de comandos:
ERROR: (gcloud.deploy.releases.create) A create-rollout attempt was blocked by the "quickstart-deploy-policy"
policy. Target: "prod-target", Delivery pipeline: "deploy-policy-pipeline", policy rule: "no-rollouts"
Substitua a restrição da política
Para implementar a aplicação de exemplo, que está bloqueada pela política de implementação, tem de substituir essa política. Para tal, crie uma nova implementação em relação a esta versão, desta vez incluindo a opção --override-deploy-policies
:
GKE
Execute o seguinte comando a partir do diretório deploy-policy-quickstart
para criar a versão:
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
Cloud Run
Execute o seguinte comando a partir do diretório deploy-policy-quickstart
para criar a versão:
gcloud deploy releases promote --release=test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=deploy-policy-pipeline \
--to-target=prod-target \
--override-deploy-policies=quickstart-deploy-policy
Uma vez que incluiu --override-deploy-policies=quickstart-deploy-policy
e tem a função roles/clouddeploy.policyAdmin
, o Cloud Deploy ignora a política de implementação que criou e cria a implementação gradual para prod-target
.
Veja os resultados na Google Cloud consola
Limpar
Para evitar incorrer em cobranças na sua Google Cloud conta pelos recursos usados nesta página, siga estes passos.
É tudo. Concluiu este início rápido!