Um Deployment no Kubernetes é um recurso de nível superior que gerencia conjuntos de réplicas de Pods. Os Pods são a menor unidade implantável no Kubernetes e contêm um ou mais contêineres. O Deployment é responsável por garantir que um número especificado de réplicas do Pod esteja em execução em um determinado momento. Se um Pod falhar, o Deployment automaticamente cria e inicia um novo Pod para manter o estado desejado. Aqui estão os detalhes principais sobre Deployments no Kubernetes:
Componentes Principais do Deployment
- Pods: Unidades básicas de implantação no Kubernetes, contendo um ou mais contêineres.
- Réplicas: Número de instâncias do Pod que devem estar em execução. Especificado pelo campo
replicas
no manifesto do Deployment. - Labels e Selectors: Usados para associar um Deployment aos Pods que ele gerencia. O Deployment utiliza
selectors
para identificar os Pods que devem ser gerenciados. - Template de Pod: Define a estrutura do Pod, incluindo os contêineres e volumes que devem ser criados. Cada vez que o Deployment cria um novo Pod, ele usa este template.
Funcionalidades do Deployment
- Atualizações Declarativas: Permite atualizar Pods e contêineres para novas versões de forma declarativa, utilizando o arquivo de manifesto.
- Rollouts e Rollbacks: Gerencia o rollout (implantação) de novas versões e permite rollbacks (retornos) para versões anteriores em caso de falhas ou problemas.
- Estratégias de Implantação: Suporta diferentes estratégias de implantação, como
Recreate
(recria todos os Pods) eRollingUpdate
(atualiza os Pods um a um). - Manutenção do Estado Desejado: Continuamente monitora os Pods e recria-os se eles falharem ou forem excluídos.
- Escalabilidade: Permite o escalonamento para cima ou para baixo do número de réplicas de Pods.
Manifesto do Deployment
Um exemplo de manifesto do Deployment em YAML pode parecer com o seguinte:
apiVersion: apps/v1
kind: Deployment
metadata:
name: meu-deployment
spec:
replicas: 3
selector:
matchLabels:
app: minha-aplicacao
template:
metadata:
labels:
app: minha-aplicacao
spec:
containers:
- name: meu-container
image: minha-imagem:tag
ports:
- containerPort: 80
Neste exemplo:
apiVersion
: Define a versão da API do Kubernetes utilizada.kind
: Especifica que o recurso é um Deployment.metadata
: Metadados sobre o Deployment, comoname
.spec
: Especificações do Deployment.replicas
: Número de réplicas desejadas.selector
: Define como o Deployment identifica os Pods que deve gerenciar.template
: Template para a criação de novos Pods.
Uso e Casos Práticos
Os Deployments são comumente usados para:
- Gerenciar o ciclo de vida de aplicações stateless (sem estado).
- Implementar padrões de implantação como zero-downtime deployments, canary releases, etc.
- Facilitar a atualização e o rollback de aplicações.
Em resumo, o Deployment no Kubernetes é uma ferramenta poderosa e flexível para o gerenciamento de aplicações, fornecendo uma maneira declarativa de gerenciar atualizações, escalabilidade e o estado desejado dos Pods.
Sou um profissional na área de Tecnologia da informação, especializado em monitoramento de ambientes, Sysadmin e na cultura DevOps. Possuo certificações de Segurança, AWS e Zabbix.