Este documento descreve como implementar as suas aplicações, incluindo serviços do Cloud Run e tarefas do Cloud Run.
O Cloud Deploy permite-lhe implementar as suas cargas de trabalho baseadas em contentores em qualquer serviço do Cloud Run ou tarefa. Todas as funcionalidades do Cloud Deploy são suportadas quando implementa em destinos do Cloud Run para serviços do Cloud Run, mas as implementações canárias não são suportadas para tarefas do Cloud Run.
Este documento descreve as três principais configurações que tem de concluir para fazer a implementação no Cloud Run:
- Crie a configuração de segmentação
- Crie a sua configuração do Skaffold
- Crie as suas definições de serviços do Cloud Run ou definições de tarefas
Limitações
Só pode implementar um serviço ou uma tarefa do Cloud Run por destino.
Não pode executar uma implementação canária numa tarefa do Cloud Run.
No entanto, os serviços do Cloud Run podem usar uma implementação canária.
Para implementar uma função do Cloud Run com o Cloud Deploy, tem de modificar o fluxo de trabalho de CI para criar a função num contentor e implementá-la como um serviço do Cloud Run.
Antes de começar
Certifique-se de que está a usar a versão da CLI gcloud
401.0.0
ou superior.
Crie a sua configuração de destino
O destino pode ser configurado no YAML do pipeline de fornecimento ou pode estar num ficheiro separado. Além disso, pode configurar mais do que um alvo no mesmo ficheiro.
Os destinos têm de ser definidos no mesmo projeto e região que o pipeline de entrega. No entanto, os serviços ou as tarefas para os quais os destinos são implementados podem estar em projetos e regiões diferentes, desde que a conta de serviço tenha acesso a esses projetos.
Na definição do destino, crie uma secção run
para identificar a localização onde o serviço do Cloud Run vai ser criado.
A sintaxe para especificar o serviço ou a tarefa do Cloud Run na definição de destino é a seguinte:
run:
location: projects/[project_name]/locations/[region_name]
Este identificador de recurso usa os seguintes elementos:
[
project_name
] é o nome do Google Cloud projeto no qual o seu serviço ou tarefa do Cloud Run vai ser criado.Vai fazê-lo para cada alvo. Recomendamos um projeto diferente para cada serviço ou tarefa do Cloud Run. Se quiser mais do que um serviço ou tarefa no mesmo projeto, tem de usar perfis do Skaffold no seu ficheiro de configuração
skaffold.yaml
.[
region_name
] é a região na qual o serviço ou a tarefa vai ser criado. O seu serviço ou trabalho pode estar em qualquer região suportada pelo Cloud Run.
Segue-se um exemplo de configuração de destino que define o serviço ou a tarefa do Cloud Run a criar:
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev
description: development service
run:
location: projects/my-app/locations/us-central1
Pode definir este destino numa definição do pipeline de entrega do Cloud Deploy ou separadamente. De qualquer forma, tem de registar o destino antes de criar o lançamento para implementar o seu serviço ou tarefa do Cloud Run.
Crie a sua configuração do Skaffold
Segue-se um exemplo de um ficheiro skaffold.yaml
para uma
implementação do Cloud Run:
apiVersion: skaffold/v4beta7
kind: Config
metadata:
name: cloud-run-application
manifests:
rawYaml:
- service.yaml
deploy:
cloudrun: {}
Neste ficheiro skaffold.yaml
…
manifests.rawYaml
fornece os nomes das definições de serviços do Cloud Run.Neste exemplo,
service.yaml
é o ficheiro que define um serviço do Cloud Run que o Skaffold vai implementar. Este nome de ficheiro pode ser qualquer coisa, mas, por convenção, éservice.yaml
para um serviço ejob.yaml
para uma tarefa.A secção
deploy
especifica como quer que o manifesto seja implementado, especificamente, o projeto e a localização. O campodeploy
é obrigatório.Recomendamos que deixe o campo
{}
vazio. O Cloud Deploy preenche este campo durante a renderização com base no projeto e na localização da definição de destino.No entanto, para o desenvolvimento local, pode fornecer valores aqui. No entanto, o Cloud Deploy usa sempre o projeto e a localização da definição de destino, independentemente de os valores serem fornecidos aqui.
Crie as definições do serviço do Cloud Run
Para criar uma definição de serviço do Cloud Run, pode criar uma manualmente ou copiar uma de um serviço existente. Ambos são descritos nesta secção.
Opção 1: crie um novo serviço do Cloud Run service.yaml
O ficheiro service.yaml define o seu serviço do Cloud Run. Quando cria uma versão, o Skaffold usa esta definição para implementar o seu serviço.
Segue-se um exemplo simplificado:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: [SERVICE_NAME]
spec:
template:
spec:
containers:
- image: [IMAGE_PATH]
Onde:
[SERVICE_NAME]
é um nome para este serviço do Cloud Run.[IMAGE_PATH]
aponta para a imagem ou as imagens do contentor que está a implementar com este serviço.
Opção 2: copie um service.yaml
de um serviço existente através da Google Cloud consola
Pode criar um serviço através da consola do Google Cloud Platform ou usar um existente e copiar o seu service.yaml
a partir daí. Google Cloud
Para obter o service.yaml
através da Google Cloud CLI:
gcloud run services describe [service_name] --format=export
Para obter o service.yaml
a partir da Google Cloud consola:
Na Google Cloud consola, aceda à página Serviços do Cloud Run.
Selecione o serviço existente cuja definição quer usar.
Em alternativa, pode criar um novo e, em seguida, selecioná-lo. Quando seleciona o serviço, é apresentada a página Detalhes do serviço:
Selecione o separador YAML.
Clique em Editar e, de seguida, copie o conteúdo do YAML para um novo ficheiro denominado
service.yaml
no seu sistema de ficheiros, de modo que o Skaffold o possa usar quando criar uma versão.
Crie as suas definições de tarefas do Cloud Run
Para implementar uma definição de tarefa do Cloud Run, pode criar uma manualmente ou copiar uma de uma tarefa existente. Ambos são descritos nesta secção.
Tenha em atenção que os trabalhos não são necessariamente executados após a implementação pelo Cloud Deploy. Isto é diferente dos serviços, que são aplicações em execução após a implementação. A forma como uma tarefa é invocada depende da própria tarefa.
Opção 1: crie um novo serviço do Cloud Run job.yaml
O ficheiro job.yaml define a sua tarefa do Cloud Run. Quando cria uma versão, o Skaffold usa esta definição para implementar a tarefa.
Segue-se um exemplo simplificado:
apiVersion: run.googleapis.com/v1
kind: Job
metadata:
name: [JOB_NAME]
spec:
template:
spec:
containers:
- image: [IMAGE_PATH]
Onde:
[JOB_NAME]
é um nome para esta tarefa do Cloud Run.[IMAGE_PATH]
aponta para a imagem de contentor que está a implementar para esta tarefa.
Opção 2: copie um job.yaml
de uma tarefa existente através da Google Cloud consola
Pode criar uma tarefa através da Google Cloud consola ou usar uma existente
e copiar o seu job.yaml
a partir daí.
Para obter o job.yaml
através da Google Cloud CLI:
gcloud run jobs describe [job_name] --format=export
Para obter o job.yaml
a partir da Google Cloud consola:
Na Google Cloud consola, aceda à página Cloud Run Jobs.
Selecione a tarefa existente cuja definição quer usar.
Em alternativa, pode criar um novo e, em seguida, selecioná-lo. Quando seleciona a tarefa, é apresentada a página Detalhes da tarefa:
Selecione o separador YAML.
Clique em Editar e, de seguida, copie o conteúdo do YAML para um novo ficheiro denominado
job.yaml
no seu sistema de ficheiros, de modo que o Skaffold o possa usar quando criar uma versão.
A reunir tudo
Agora que tem a definição do serviço ou da tarefa do Cloud Run, a
skaffold.yaml
configuração e a definição do destino do Cloud Deploy, e
registou o destino
como um recurso do Cloud Deploy, já pode
invocar o pipeline de fornecimento
para criar uma versão e progredir através da progressão dos destinos definidos
no pipeline.
O início rápido Implemente uma app no Cloud Run com o Cloud Deploy mostra tudo isto em ação.
Comportamento dos serviços em todas as revisões
Quando reimplementa um serviço, a nova revisão baseia-se no service.yaml
recentemente implementado. Nada sobre a revisão anterior é mantido, a menos que seja igual no YAML recentemente implementado. Por exemplo, se existirem definições de configuração ou etiquetas na revisão anterior que não estejam no novo YAML, essas definições ou etiquetas estão ausentes da nova revisão.
Acionar tarefas do Cloud Run
Depois de implementar uma tarefa, pode acioná-la conforme descrito na documentação do Cloud Run.
Implementar serviços e trabalhos do Cloud Run em vários projetos
Se precisar de implementar serviços ou tarefas que estejam em projetos diferentes, a conta de serviço de execução precisa de autorização para aceder aos projetos nos quais esses serviços ou tarefas estão definidos.
Consulte o artigo Conta de serviço de execução do Cloud Deploy e Funções e autorizações do Identity and Access Management para mais informações.
Implementar funções do Cloud Run
As funções do Cloud Run compilam o seu código fonte sempre que uma função é implementada. Por este motivo, cada tempo de execução de destino no seu pipeline pode receber um artefacto ligeiramente diferente. Isto é contrário às práticas recomendadas no Cloud Deploy. Em alternativa, sugerimos que use um serviço do Cloud Run diretamente. Isto permite-lhe criar um único artefacto e promovê-lo em todos os seus ambientes.
Verifique o
service.yaml
da sua função do Cloud Run.Pode obter esta informação executando o seguinte comando:
gcloud run services describe FUNCTION_NAME \ --format=export \ --region=REGION \ --project=PROJECT
Remova as seguintes anotações, se estiverem presentes:
run.googleapis.com/build-base-image
run.googleapis.com/build-name
run.googleapis.com/build-source-location
run.googleapis.com/build-enable-automatic-updates
Substitua o valor em
spec.spec.containers.image
porIMAGE_TAG
.Crie o seu pipeline de entrega e alvos, com o serviço Cloud Run como alvo.
Separe o passo de compilação do passo de implementação no seu processo de CI. Em vez de usar a CLI do Google Cloud para implementar a sua função, substitua-a pelos seguintes passos:
Crie a função num contentor através do Cloud Build:
gcloud builds submit --pack image=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME \ --project=PROJECT \ --region=REGION
Crie um lançamento com o Cloud Deploy:
gcloud deploy releases create RELEASE_NAME \ --project=DEPLOY_PROJECT \ --region=REGION \ --delivery-pipeline=DELIVERY_PIPELINE --images=IMAGE_TAG=REGION-docker.pkg.dev/PROJECT/cloud-run-source-deploy/IMAGE_NAME
Neste comando…
RELEASE_NAME
é um nome a atribuir a este lançamento. O nome tem de ser exclusivo entre todos os lançamentos desta pipeline de envio.DEPLOY_PROJECT
é o ID do projeto onde criou o pipeline de implementação.DELIVERY_PIPELINE
é o nome do pipeline de entrega que vai gerir a implementação desta versão através da progressão dos destinos. Este nome tem de corresponder ao camponame
na definição do pipeline.REGION
é o nome da região na qual está a criar o lançamento, por exemplo,us-central1
. Este campo é obrigatório.IMAGE_NAME
é o nome que deu à imagem no passo anterior, quando criou a função.
O que se segue?
Experimente o início rápido: implemente uma aplicação no Cloud Run
Saiba mais sobre a configuração de destinos do Cloud Deploy
Saiba mais sobre os ambientes de execução do Cloud Deploy.
Saiba mais acerca do apoio técnico do Skaffold para o Cloud Run
Saiba mais sobre o Cloud Run