implantar o aplicativo

Nesta página, descrevemos como usar o Cloud Deploy para colocar seu aplicativo nos ambientes de execução de destino pretendidos. Antes de fazer isso, você precisa criar o pipeline de entrega e os destinos.

Antes de começar

Nesta seção, descrevemos o que você precisa ter antes de implantar seu aplicativo usando o Cloud Deploy.

  • Verifique se a conta de serviço de execução tem os papéis e as permissões do IAM necessários.

  • Crie o pipeline de entrega e os destinos.

    O Cloud Deploy pode implantar no Google Kubernetes Engine, no Cloud Run e em clusters do GKE Enterprise. A configuração de destino varia de acordo com a implantação.

  • Ter suas imagens de contêiner e seus manifestos.

    Você precisa de uma ou mais imagens de contêiner para implantar e um ou mais manifestos do Kubernetes (para implantar no GKE) ou arquivos YAML de serviço (para implantar no Cloud Run).

    Você precisa de um pipeline de integração contínua ou de algum outro processo para criar e posicionar as imagens. A ferramenta de CI pode ser o Cloud Build, o Jenkins ou qualquer coisa que resulte em imagens de contêiner que você pode fornecer ao seu pipeline de entrega do Cloud Deploy.

  • Ter um arquivo de configuração skaffold.yaml.

    O Cloud Deploy chama skaffold render para renderizar os manifestos do Kubernetes usando esse arquivo e skaffold apply para implantá-los no destino. Para fazer isso, o Skaffold requer pelo menos um skaffold.yaml mínimo. É possível conseguir um de duas maneiras:

    • Crie o seu.

      Observe que o arquivo skaffold.yaml precisa fazer referência ao namespace correspondente a uma versão compatível do Skaffold na primeira linha, como neste exemplo:

      `apiVersion: skaffold/v4beta7`
      
    • Eles foram gerados para você.

      Se você ainda não tiver um arquivo skaffold.yaml, peça ao Cloud Deploy para criar um para você. Esse arquivo é adequado para integração, aprendizado ou demonstração do Cloud Deploy e não deve ser usado para cargas de trabalho de produção.

    Consulte Como usar o Skaffold com o Cloud Deploy para mais detalhes. Além disso, o artigo Como gerenciar manifestos no Cloud Deploy tem mais detalhes sobre o uso do Skaffold e do Cloud Deploy com ferramentas de gerenciamento de manifesto, como Helm, Kustomize e kpt.

Configurar o Cloud Deploy para o ambiente de execução de sua escolha

O Cloud Deploy pode implantar o aplicativo em qualquer um dos seguintes ambientes de execução:

Invocar o pipeline de entrega para criar uma versão

Depois de configurar o Cloud Deploy para implantar no ambiente de execução, agora é possível enviar seu aplicativo para ser implantado de acordo com o pipeline de entrega criado.

  1. Execute seu processo regular de integração contínua (CI, na sigla em inglês), criando os artefatos implantáveis.

  2. Inicie o pipeline de entrega chamando o Cloud Deploy para criar uma versão.

    Execute o seguinte comando no diretório que contém a configuração do Skaffold:

    gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --region=REGION
    

    Como esse comando cria um arquivo .tar com todo o conteúdo do diretório e de todos os subdiretórios, não convém executar esse comando no diretório inicial ou raiz. Execute o comando no diretório que contém a configuração do Skaffold ou inclua a opção --source=, descrita posteriormente.

    Neste comando...

    RELEASE_NAME é um nome que será atribuído à versão. O nome precisa ser exclusivo entre todas as versões do pipeline de entrega.

    É possível especificar nomes de versões dinâmicos incluindo '$DATE', '$TIME' ou ambos. Por exemplo, se você invocar esse comando às 15h07 UTC, 'rel-$TIME' será resolvido como rel-1507. '$DATE' e '$TIME' precisam estar entre aspas simples. O horário é UTC na máquina em que você invoca o comando.

    PIPELINE_NAME é o nome do pipeline de entrega que gerenciará a implantação dessa versão por meio da progressão de destinos. Esse nome precisa corresponder ao campo name na definição do pipeline.

    REGION é o nome da região em que você está criando a versão, por exemplo, us-central1. Obrigatório.

Esse comando faz upload de um arquivo .tar contendo suas configurações em um bucket do Cloud Storage e cria a versão. O Cloud Deploy também cria automaticamente um lançamento e implanta sua imagem no primeiro destino definido no pipeline de entrega.

Além dos parâmetros exibidos com o comando, inclua qualquer uma das seguintes opções:

  • --images=<name=path/name:$IMAGE_SHA>,<name=path/name:$IMAGE_SHA>

    Uma coleção de nomes de imagens para substituições de caminhos completos.

  • --build-artifacts=<path/file>

    Uma referência a um arquivo de saída de artefatos de build do Skaffold, que pode ser transmitida para representar as substituições de caminho completo da imagem.

Essas duas opções são mutuamente exclusivas.

Também é possível incluir uma das seguintes sinalizações para que o Cloud Deploy gere um arquivo skaffold.yaml para você:

  • --from-k8s-manifest=K8S_MANIFEST

    A configuração do Skaffold gerada é baseada no manifesto do Kubernetes que transmite essa sinalização. O uso dessa sinalização com as sinalizações --skaffold-file ou --source gera um erro. Consulte Como gerar o skaffold.yaml para mais detalhes.

  • --from-run-manifest=RUN_MANIFEST

    A configuração do Skaffold gerada é baseada no YAML de serviço do Cloud Run em que você transmite essa sinalização. O uso dessa sinalização com as flags --skaffold-file ou --source gera um erro. Consulte Como gerar o skaffold.yaml para mais detalhes.

Essas duas opções são mutuamente exclusivas.

Você também pode incluir um arquivo .gcloudignore se houver algum arquivo no diretório que não queira incluir no arquivo .tar.

Criar uma versão no console do Google Cloud

Use o console do Google Cloud para criar uma versão para um pipeline de entrega. Isso é útil para testar o Cloud Deploy, mas não é adequado para cargas de trabalho de produção.

O procedimento a seguir pressupõe que você já criou um pipeline de entrega e um ou mais destinos. Também é possível usar o console do Google Cloud para criar seu pipeline de entrega.

  1. Na página Detalhes do pipeline de entrega, para um pipeline de entrega específico, clique em Criar versão.

    Detalhes do pipeline de entrega, mostrando o botão "Criar versão"

  2. No campo Escolher um contêiner, cole ou digite o caminho para a imagem do contêiner que você quer implantar. Para avaliação, é possível usar o contêiner padrão pré-preenchido nesse campo.

    Também é possível clicar em Selecionar para escolher uma imagem de contêiner do Artifact Registry ou do Container Registry.

  3. Forneça um nome exclusivo para essa versão, no campo Nome da versão, ou use o nome padrão fornecido.

  4. Forneça um nome para o lançamento, no campo Nome do lançamento, ou use o nome padrão fornecido.

    Esse nome é usado para o lançamento do primeiro destino desta versão. Para destinos subsequentes, você pode nomear o lançamento na caixa de diálogo Promover ou com o comando gcloud deploy releases promote.

  5. Se quiser, inclua uma descrição para essa versão no campo Descrição.

  6. Em Detalhes da implantação, insira um nome para a implantação do GKE ou o serviço do Cloud Run, ou use o nome padrão fornecido.

    Para o GKE, o Cloud Deploy gera o manifesto para você. Para o Cloud Run, o Cloud Deploy gera a definição de serviço, que é usada para criar o serviço.

  7. Clique em Criar.

    Caixa de diálogo de criação da versão

O Cloud Deploy usa o manifesto gerado ou a definição de serviço do Cloud Run e o skaffold.yaml gerado para criar a versão.

Alterar o tempo limite da implantação

Para implantações em clusters de destino do GKE e do GKE Enterprise, há três tempos limite separados que afetam quanto tempo o sistema espera o Kubernetes para relatar uma implantação estável:

  • O Cloud Build tem um tempo limite de uma hora em operações que ele executa para o Cloud Deploy.

    É possível alterar esse tempo limite na configuração do seu ambiente de execução.

  • O Skaffold tem um tempo limite de verificação de integridade (deploy.statusCheckDeadlineSeconds), que é o tempo, em segundos, de espera até que as implantações se estabilizam.

    O padrão é 600 segundos (10 minutos). Para usar esse tempo limite, deploy.statusCheck precisa ser definido como true. Por padrão, é. Se statusCheck for false, não haverá verificação de status, o lançamento será marcado como bem-sucedido depois que kubectl apply for concluído com êxito.

  • Para recursos do Kubernetes de kind: Deployment, existe Deployment.spec.progressDeadlineSeconds, que é a quantidade de tempo que o Kubernetes espera até que a implantação seja relatada como estável.

    Esse tempo limite é aplicável apenas a recursos Deployment. Veja como esses dois primeiros tempos limite funcionam juntos:

    • Se Deployment.spec.progressDeadlineSeconds, no Kubernetes, não estiver definido, o tempo limite da verificação de integridade do Skaffold será o tempo limite efetivo, seja ele o padrão ou definido explicitamente.

    • Se Deployment.spec.progressDeadlineSeconds, no Kubernetes, estiver definido, o Skaffold ignorará o próprio tempo limite de verificação de integridade, e o prazo de progresso do Kubernetes será o tempo limite efetivo. No entanto, se o tempo limite do Kubernetes for definido explicitamente como 600 (10 minutos), o Skaffold presumirá que esse é o padrão (não definido), ignorará esse tempo e será usado (se definido).

    • Se nenhum tempo limite for definido, o tempo limite efetivo será o padrão do Skaffold de 600 (10 minutos).

    Além de Deployments, outros recursos do Kubernetes podem ter tempos limite, o que não influencia o tempo limite de estabilidade. Se algum deles estiver presente, revise para garantir que não esteja em conflito com o tempo limite de estabilidade.

    Se o Skaffold (ou Cloud Build) expirar, a implantação do GKE continuará sendo executada. O Cloud Deploy mostra uma falha, mas ainda pode ser bem-sucedido ou falhar no cluster do GKE.

Para alterar o tempo limite de estabilidade da implantação:

  1. Verifique se deploy.statusCheck está definido como true em skaffold.yaml.

    O padrão é true. Quando true, o Skaffold aguarda as verificações de integridade para informar uma implantação estável, sujeito ao valor de tempo limite na próxima etapa.

  2. Em skaffold.yaml, defina statusCheckDeadlineSeconds como o número de segundos que você quer esperar.

    deploy:
      ...
      statusCheck: true
      statusCheckDeadlineSeconds: 600
      ...
    

    O padrão é 600 (10 minutos). O Skaffold aguarda esse tempo para uma implantação estável. Se esse tempo for excedido antes da implantação ficar estável, ela falhará.

  3. Também é possível adicionar tolerateFailuresUntilDeadline: true após statusCheckDeadlineSeconds.

    Essa configuração instrui o Skaffold a não sair se uma única implantação falhar, mas a tolerar falhas até que statusCheckDeadlineSeconds expire. Essa configuração pode ajudar em situações em que você tem recursos que talvez precisem de mais tempo (até o prazo de verificação de status) para atingir um estado estável.

    Por exemplo, se você estiver usando o Istio ou o Anthos Service Mesh, talvez tenha uma implantação com falha com uma mensagem semelhante a esta:

    error iptables validation failed; workload is not ready for Istio.
    When using Istio CNI, this can occur if a pod is scheduled before the node is ready.
    

    A configuração funciona apenas com o Skaffold 2.0 ou mais recente.

  4. No manifesto do Kubernetes, defina Deployment.spec.progressDeadlineSeconds como o mesmo valor de statusCheckDeadlineSeconds para recursos de kind: Deployment.

A seguir