Introdução
Nos laboratórios anteriores, você criou um único Pod. Embora os Pods sejam os componentes básicos, gerenciá-los manualmente é trabalhoso. Se um Pod parar, você precisa reiniciá-lo manualmente. Se quiser mais cópias, também precisará criar mais Pods manualmente.
É aí que entra o Deployment.
Um Deployment é um controlador de nível mais alto que gerencia ReplicaSets e Pods para você. Você declara quantas réplicas devem existir e qual modelo de Pod elas devem usar; então, o Kubernetes trabalha para manter o estado real alinhado a essa declaração.
A principal mudança aqui é deixar de gerenciar um Pod individual e passar a gerenciar uma carga de trabalho reproduzível. Um único Pod é frágil porque representa apenas uma instância. Um Deployment descreve um padrão para criar Pods e define quantos deles devem existir. É esse padrão que torna possível escalar e usar a autorrecuperação.
Neste laboratório, você aprenderá a:
- Criar um Manager rigoroso (Deployment) com um objetivo específico (3 réplicas).
- Observar o Manager contratar trabalhadores (Pods).
- “Demitir” um trabalhador para testar a reação do Manager (autorrecuperação).
- Pedir ao Manager que contrate mais trabalhadores (escalabilidade).
Criar o YAML do Deployment
Nesta etapa, você escreverá a descrição do trabalho para o seu Manager. Esse arquivo YAML define qual imagem deve ser executada e quantas cópias (réplicas) você deseja.
Observe a estrutura adicional em comparação com um manifesto simples de Pod. Um Deployment contém um selector e um template. O selector informa ao Kubernetes quais Pods pertencem a esse Deployment, enquanto o template descreve como os novos Pods devem ser criados. Essas duas partes precisam permanecer alinhadas; caso contrário, o Deployment não gerenciará corretamente os Pods pretendidos.
Primeiro, confirme que você está no diretório do projeto:
cd ~/project
Crie um novo arquivo chamado deployment.yaml usando o nano:
nano deployment.yaml
Cole a configuração a seguir no arquivo. Preste atenção à linha replicas: 3: é nela que você define o tamanho da sua equipe.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Para salvar, pressione Ctrl+X, depois Y e, em seguida, Enter.
Este arquivo informa ao Kubernetes: “Crie um Deployment chamado nginx-deployment. Garanta que sempre existam 3 Pods executando a imagem nginx:1.14.2. Quando precisar localizar esses Pods, procure aqueles rotulados com app: nginx.”
Aplicar e observar
Agora que você tem a descrição do trabalho, vamos contratar o manager. Aplique a configuração ao cluster:
Quando você cria um Deployment, o Kubernetes normalmente cria outro objeto chamado ReplicaSet nos bastidores. O ReplicaSet é o componente diretamente responsável por manter ativo o número solicitado de Pods. Neste momento, iniciantes não precisam gerenciar ReplicaSets diretamente, mas é útil saber que eles existem, pois você verá esses objetos com frequência na saída dos comandos.
kubectl apply -f deployment.yaml
O Kubernetes confirmará: deployment.apps/nginx-deployment created.
O Deployment (Manager) começará imediatamente a criar 3 Pods. Para visualizá-los rapidamente, execute:
kubectl get pods
Você deverá ver 3 Pods diferentes, todos com nomes que começam com nginx-deployment-:
NAME READY STATUS RESTARTS AGE
nginx-deployment-66b6c48dd5-8j64w 1/1 Running 0 5s
nginx-deployment-66b6c48dd5-d95l2 1/1 Running 0 5s
nginx-deployment-66b6c48dd5-lzr5w 1/1 Running 0 5s
Você também pode verificar o status do próprio Deployment:
kubectl get deployments
A saída deverá mostrar READY 3/3, confirmando que todas as 3 réplicas solicitadas estão ativas e em execução.
Testar a autorrecuperação
Um dos recursos mais poderosos do Kubernetes é a autorrecuperação. O Deployment garante que o número real de Pods seja sempre igual ao número desejado (3). Se um Pod desaparecer, ele será substituído imediatamente.
Isso funciona porque o Kubernetes compara continuamente o estado real com o estado desejado. Excluir um Pod não altera a quantidade desejada de réplicas armazenada no Deployment; por isso, o sistema interpreta a exclusão como uma divergência e cria um substituto.
Vamos testar isso excluindo manualmente um dos Pods.
Primeiro, liste os Pods novamente:
kubectl get pods
Copie o nome completo de um dos Pods, por exemplo, nginx-deployment-66b6c48dd5-8j64w.
Agora, exclua esse Pod específico:
kubectl delete pod <paste-pod-name-here>
O Kubernetes informará que o Pod foi excluído. Execute imediatamente kubectl get pods novamente:
kubectl get pods
Você verá algo impressionante:
- O Pod antigo está sendo encerrado ou já desapareceu.
- Um novo Pod, com um nome diferente e uma idade muito baixa, por exemplo, 2 segundos, já apareceu.
O Deployment percebeu que faltava um trabalhador e contratou imediatamente um novo para manter o tamanho da equipe em 3. Isso garante que sua aplicação continue disponível mesmo quando servidores ou contêineres individuais apresentarem falhas.
Aumentar a escala
Imagine que seu site está ficando popular. Três servidores web já não são suficientes; você precisa de cinco. Você precisa criar novos arquivos manualmente ou correr para criar Pods?
Escalar um Deployment altera a quantidade desejada declarada, e não apenas o conjunto atual de processos em execução. Por isso, o novo tamanho permanece válido além de uma única ação manual. Os controladores continuam tratando o número atualizado de réplicas como a referência até que você o altere novamente.
Não. Basta informar ao Manager que você quer aumentar a quantidade.
Podemos atualizar o número de réplicas em tempo real usando o comando kubectl scale.
Altere a quantidade de réplicas de 3 para 5:
kubectl scale deployment/nginx-deployment --replicas=5
Agora, observe a mudança:
kubectl get pods
Você verá 5 Pods em execução. Dois novos Pods foram iniciados para atender ao novo requisito.
Também é possível reduzir a escala. Se o tráfego diminuir, você poderá economizar recursos reduzindo a quantidade:
kubectl scale deployment/nginx-deployment --replicas=2
Execute kubectl get pods novamente. Você verá o Kubernetes encerrando os Pods extras até restarem apenas 2.
Essa escalabilidade dinâmica é uma das razões pelas quais as empresas gostam do Kubernetes.
Resumo
Neste laboratório, você aprendeu sobre o Deployment, o manager inteligente que mantém suas aplicações em execução.
Você conseguiu:
- Criar um Deployment com 3 Pods trabalhadores.
- Verificar que o Deployment substitui automaticamente os Pods que falham (autorrecuperação).
- Aumentar e reduzir o número de réplicas com um único comando (escalabilidade).
Agora você entende por que raramente criamos Pods independentes. Os Deployments oferecem confiabilidade e flexibilidade, gerenciando o trabalho complexo de agendamento e reinicialização para que você não precise fazer isso manualmente.


