Implantar seu aplicativo

Nesta página, descrevemos como usar o Cloud Deploy para conseguir seu aplicativo nos ambientes de execução de destino pretendidos. Antes disso, é necessário criar o pipeline de envio e as metas.

Antes de começar

Esta seção descreve o que você precisa configurar 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 em clusters do Google Kubernetes Engine, Cloud Run e GKE Enterprise. A configuração de destino varia de acordo com o destino da implantação.

  • Tenha as imagens de contêiner e os manifestos.

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

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

  • Tenha 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 obter um de duas maneiras:

    • Crie o seu.

      O arquivo skaffold.yaml precisa referenciar o namespace correspondente a uma versão do Skaffold com suporte na primeira linha, como neste exemplo:

      `apiVersion: skaffold/v4beta7`
      
    • Gere os dados para você.

      Se você ainda não tiver um arquivo skaffold.yaml, poderá pedir que o Cloud Deploy crie 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, Como gerenciar manifestos no Cloud Deploy tem mais detalhes sobre o uso do Skaffold e do Cloud Deploy com ferramentas de gerenciamento de manifestos, como Helm, Kustomize e kpt.

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

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

Invoque o pipeline de entrega para criar uma versão

Depois de configurar o Cloud Deploy para implantar no ambiente de execução, você pode enviar o aplicativo para ser implantado de acordo com o canal 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 de um lançamento.

    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 de todo o conteúdo do diretório e de todos os subdiretórios, talvez não seja recomendável executá-lo no diretório inicial ou raiz. Execute o comando no diretório contendo sua configuração do Skaffold ou inclua a opção --source=, descrita mais tarde.

    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 lançamento dinâmicos incluindo '$DATE' ou '$TIME' ou ambos. Por exemplo, se você invocar esse comando às 15h07 UTC, 'rel-$TIME' se refere a rel-1507. '$DATE' e '$TIME' precisam estar entre aspas simples, e O horário é o UTC da 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 que contém suas configurações para um Cloud Storage e cria a versão. O Cloud Deploy também cria automaticamente um lançamento e implanta a 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 transmitido para representar as substituições de caminho completo da imagem.

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

Você também pode incluir uma das flags a seguir para que o Cloud Deploy gere um arquivo skaffold.yaml:

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

Também é possível incluir um arquivo .gcloudignore se houver algum arquivo na que você não quer 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 uma entrega pipeline. 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 uma ou mais segmentações. 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, clique em Criar versão para um pipeline de entrega específico.

    detalhes do pipeline de entrega, mostrando o botão &quot;Criar versão&quot;

  2. No campo Escolha um contêiner, cole ou digite o caminho do contêiner. imagem que você quer implantar. Você também pode usar o contêiner padrão pré-preenchido neste campo, para avaliação.

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

  3. Informe um nome exclusivo para essa versão no campo Nome da versão ou use o nome padrão fornecido.

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

    Esse nome é usado no lançamento para o primeiro destino desta versão. Para segmentações subsequentes, nomeie o lançamento na caixa de diálogo Promover ou 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 &quot;Criar versão&quot;

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 no GKE e GKE Enterprise target clusters, há três tempos limite separados que afetam o tempo espera o Kubernetes relatar uma implantação estável:

  • O Cloud Build tem um tempo limite de 1 hora em operações que O Cloud Build é executado no Cloud Deploy.

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

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

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

  • Para recursos do Kubernetes de kind: Deployment, há Deployment.spec.progressDeadlineSeconds, que é o tempo que o Kubernetes espera para que a implantação seja informada como estável.

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

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

    • Se o Deployment.spec.progressDeadlineSeconds no Kubernetes estiver definido, o Skaffold vai 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 estiver explicitamente definido como 600 (10 minutos), o Skaffold vai presumir que ele é o padrão (não definido) e o ignorará. O tempo limite do Skaffold será usado (se definido).

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

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

    Se o Skaffold (ou o Cloud Build) expirar, o GKE e implantação continua em execução. O Cloud Deploy mostra uma falha, ele ainda poderá ter êxito 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 que as verificações de integridade informem uma implantação estável, sujeita 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 por uma implantação estável. Se esse tempo for excedido antes que a implantação esteja estável, ela vai falhar.

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

    Essa configuração informa ao Skaffold que ele não deve sair se uma única implantação falhar, mas tolerar falhas até que statusCheckDeadlineSeconds expire. Essa configuração pode ajudar em situações em que você tem recursos que podem precisar de mais tempo (até o prazo de verificação de status) para alcançar um estado estável.

    Por exemplo, se você estiver usando o Istio ou o Cloud 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 só funciona com o Skaffold 2.0 ou posterior.

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

A seguir