Implantação


Nesta página, você verá descrições sobre os objetos de implantação do Kubernetes e como são usados no Google Kubernetes Engine (GKE).

O que é uma implantação?

As implantações representam um conjunto de vários pods idênticos, sem identidades exclusivas. Elas executam várias réplicas do aplicativo e substituem automaticamente todas as instâncias que falham ou não respondem. Assim, as implantações ajudam a garantir que uma ou mais instâncias do aplicativo estejam disponíveis para veicular solicitações dos usuários. Elas são gerenciadas pelo controlador de implantação do Kubernetes.

As implantações usam um modelo de pod contendo uma especificação (em inglês) para os próprios pods. Ela determina como cada pod será: quais aplicativos serão executados dentro dos contêineres, quais volumes os pods ativarão, os rótulos e muito mais.

Quando um modelo de pod de implantação é alterado, novos pods são criados automaticamente um por um.

Padrões de uso

As implantações são adequadas para aplicativos sem estado que usam volumes ReadOnlyMany ou ReadWriteMany montados em várias réplicas, mas não são adequados para cargas de trabalho que usam volumes ReadWriteOnce. Para aplicativos com estado que usam volumes ReadWriteOnce, use os StatefulSets. Eles são projetados para implantar aplicativos com estado e aplicativos em cluster que salvam dados em armazenamento permanente, como os discos permanentes do Compute Engine. Os StatefulSets são adequados para implantar Kafka, MySQL, Redis, ZooKeeper e outros aplicativos que precisam de identidades únicas e permanentes e nomes de host estáveis.

Crie implantações

É possível criar uma implantação usando os comandos kubectl apply ou kubectl create.

Depois de criada, a implantação garante que o número pretendido de pods esteja constantemente disponível e em execução. A implantação substitui automaticamente os pods que falham ou são despejados dos respectivos nodes.

A seguir, você encontra um exemplo de um arquivo de manifesto de implantação no formato YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

Neste exemplo:

  • Uma implantação denominada nginx é criada, indicada pelo campo metadata: name.
  • A implantação cria três pods replicados, indicados pelo campo replicas.
  • O modelo do pod ou o campo spec: template indica que os pods estão marcados como app: nginx.
  • A especificação do modelo do pod, ou o campo template: spec, indica que os pods executam um contêiner, nginx, que executa a imagem nginx do Docker Hub (em inglês) na versão 1.7.9.
  • A implantação abre a porta 80 para os pods usarem.

Para mais informações sobre as especificações de implantação, consulte a documentação da API Kubernetes (em inglês).

Resumindo, o modelo de pod contém as seguintes instruções para pods criados por esta implantação:

  • Cada pod é marcado como app: nginx.
  • Crie um contêiner e nomeie-o como nginx.
  • Execute a imagem nginx na versão 1.7.9.
  • Abra a porta 80 para enviar e receber o tráfego.

Para mais informações sobre como criar implantações, consulte Como criar uma implantação.

Como atualizar implantações

Para atualizar uma implantação, faça alterações na especificação do modelo de pod da implantação. Alterar o campo de especificação desencadeia automaticamente um lançamento de atualização. É possível usar o kubectl, a API Kubernetes ou o menu de cargas de trabalho do GKE no console do Google Cloud.

Por padrão, quando uma implantação aciona uma atualização, ela faz com que os pods parem, gradualmente os reduz para zero, depois drena e encerra os pods. Então, a implantação usa o modelo de pod atualizado para criar novos.

Os pod antigos não são removidos até que um número suficiente de novos esteja em execução, e novos pods não são criados até que um número suficiente dos antigos tenha sido removido. Para ver em que ordem os pods são ativados e removidos, execute kubectl describe deployments (em inglês).

As implantações podem garantir que a quantidade de réplicas pretendida seja executada, com no máximo um pod indisponível. Da mesma forma, as implantações podem garantir que seja executado, no máximo, um número a mais que o pretendido de réplicas, com até um pod a mais que o pretendido para execução.

Reverta uma atualização usando o comando kubectl rollout undo (em inglês). Também é possível usar kubectl rollout pause para interromper temporariamente uma implantação.

Como gerenciar implantações

Veja a seguir uma lista de tarefas de gerenciamento comuns para implantações:

Status e ciclo de vida

As implantações podem estar em um dos três estados durante seu ciclo de vida: em andamento, concluído ou com falha.

Um estado em andamento indica que a implantação está em processo de realização das tarefas, como criar ou dimensionar seus pods.

Um estado concluído indica que a implantação concluiu com êxito suas tarefas, todas as pods estão sendo executadas com as especificações mais recentes e estão disponíveis, e nenhum pod está em execução.

Um estado com falha indica que a implantação encontrou um ou mais problemas que impedem que ele complete suas tarefas. Algumas causas incluem cotas ou permissões insuficientes, erros de pull de imagem, intervalos de limites ou de ambiente de execução. Para investigar o que causa uma falha na implantação, execute kubectl get deployment [DEPLOYMENT+NAME] -o yaml e examine as mensagens no campo status: conditions.

Monitore o progresso de uma implantação ou verifique seu status usando o comando kubectl rollout status (em inglês).

A seguir