Post

Kubernetes 101: Deployment

Fala galera! Seis tão baum?

Chegamos a mais um capítulo da nossa série “Kubernetes 101”. Depois de explorar os Pods e ReplicaSets, vamos mergulhar no conceito de Deployments, um componente fundamental para gerenciar e escalar aplicações de forma eficiente no Kubernetes.

O que é um Deployment?

Um Deployment é um recurso essencial no Kubernetes que permite gerenciar a implantação e o ciclo de vida das aplicações de maneira declarativa. Ele define o estado desejado de uma aplicação e garante que o Kubernetes ajuste o estado atual para corresponder ao estado desejado, mesmo em face de falhas ou mudanças. Ao especificar um Deployment, você pode controlar a criação, atualização e exclusão de Pods de forma automatizada e consistente.

O Deployment gerencia ReplicaSets, que são responsáveis por manter o número correto de réplicas de Pods em execução. Dessa forma, o Deployment facilita a gestão de aplicações, proporcionando recursos como atualizações contínuas (rollouts) e reversões (rollbacks) automáticas, garantindo alta disponibilidade e resiliência da sua aplicação.

Funcionamento de um Deployment

Gerenciamento de ReplicaSets

Deployments são responsáveis por criar e gerenciar ReplicaSets, que asseguram que o número desejado de Pods esteja sempre em execução. Cada vez que você atualiza um Deployment, o Kubernetes cria um novo ReplicaSet e escala o antigo para baixo, garantindo uma transição suave e sem interrupções.

Exemplo de gerenciamento de Deployment, ReplicaSet e Pods

Vamos criar um Deployment e observar a criação dos ReplicaSets e Pods associados.

Criação do Deployment

Arquivo YAML para criar um Deployment:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: apps/v1
kind: Deployment
metadata:
  name: exemplo-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: exemplo-app
  template:
    metadata:
      labels:
        app: exemplo-app
    spec:
      containers:
      - name: nginx
        image: nginx:1.17
        ports:
        - containerPort: 80

Comando para aplicar o Deployment:

1
kubectl apply -f exemplo-deployment.yaml

Exibição dos recursos criados”

Vamos verificar os recursos criados pelo Deployment:

1
kubectl get deployments

Output esperado:

1
2
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
exemplo-deployment  3/3     3            3           1m
1
kubectl get replicasets

Output esperado:

1
2
NAME                           DESIRED   CURRENT   READY   AGE
exemplo-deployment-abc123      3         3         3       1m
1
kubectl get pods

Output esperado:

1
2
3
4
NAME                                 READY   STATUS    RESTARTS   AGE
exemplo-deployment-abc123-1a2b3c     1/1     Running   0          1m
exemplo-deployment-abc123-4d5e6f     1/1     Running   0          1m
exemplo-deployment-abc123-7g8h9i     1/1     Running   0          1m

Relação entre Deployment, ReplicaSet e Pods

  • Deployment: exemplo-deployment
  • ReplicaSet: abc123
  • Pods: 1a2b3c

Ficando assim a representação dos objetos: exemplo-deployment-abc123-1a2b3c

Atualizações e Rollouts

Deployments suportam atualizações contínuas, permitindo que você faça mudanças na aplicação de forma gradual. Isso é particularmente útil para evitar downtime e garantir que a aplicação funcione corretamente antes que todas as instâncias sejam atualizadas.

Como Funciona o Rollout

Quando você atualiza um Deployment, o Kubernetes cria um novo ReplicaSet para a nova versão dos Pods. O processo de rollout substitui gradualmente os Pods do antigo ReplicaSet pelos novos Pods, conforme especificado na atualização. Isso garante que a aplicação continue a funcionar durante o processo de atualização.

Comando para atualizar um Deployment:

1
kubectl set image deployment/exemplo-deployment nginx=nginx:1.18

Visualizando o status do rollout:

1
kubectl rollout status deployment/exemplo-deployment

Output esperado:

1
deployment "exemplo-deployment" successfully rolled out

Rollback

Em caso de problemas durante uma atualização, os Deployments permitem reverter para uma versão anterior. Essa capacidade de rollback é crucial para manter a estabilidade dos serviços e minimizar o impacto de erros.

Como realizar o Rollback

O Kubernetes mantém um histórico de revisões de um Deployment, o que facilita a reversão para uma versão anterior se necessário.

Comando para reverter um Deployment para a versão anterior:

1
kubectl rollout undo deployment/exemplo-deployment

Verificando a revisão do Deployment:

1
kubectl rollout history deployment/exemplo-deployment

Output esperado:

1
2
3
4
deployments "exemplo-deployment"
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

Se precisar reverter para uma revisão específica:

1
kubectl rollout undo deployment/exemplo-deployment --to-revision=1

Comandos Adicionais: Pause, Resume e Restart

Além de rollback, o Kubernetes oferece comandos para pausar, resumir e reiniciar rollouts, proporcionando maior controle sobre o processo de atualização.

Pause

Pausar um rollout permite interromper temporariamente o processo de atualização. Isso pode ser útil se você precisar investigar um problema antes de prosseguir com a atualização.

Comando para pausar um rollout:

1
kubectl rollout pause deployment/exemplo-deployment

Resume

Resumir um rollout continua o processo de atualização após ele ter sido pausado.

Comando para retomar um rollout pausado:

1
kubectl rollout resume deployment/exemplo-deployment

Restart

Reiniciar um rollout força todos os Pods a serem recriados, útil para aplicar novas configurações ou resolver problemas persistentes.

Comando para reiniciar um rollout:

1
kubectl rollout restart deployment/exemplo-deployment

Conclusão

Os Deployments são uma ferramenta poderosa no Kubernetes, proporcionando controle granular sobre o ciclo de vida das aplicações. Eles complementam os ReplicaSets, oferecendo funcionalidades adicionais como rollouts, rollbacks, pausas, retomadas e reinicializações, essenciais para ambientes de produção. Essa flexibilidade garante atualizações contínuas e seguras, minimizando downtime e mantendo a estabilidade dos serviços.

Além de ler este artigo, encorajo fortemente que você consulte a documentação oficial do Kubernetes para obter informações mais detalhadas e atualizadas. A documentação oficial é uma excelente fonte de conhecimento e irá complementar o que foi abordado aqui.

Você pode acessar a documentação oficial aqui: Deployment

Nos próximos artigos, exploraremos mais a fundo as práticas recomendadas para Deployments e outros recursos avançados do Kubernetes. Vamos abordar como otimizar a utilização dos Deployments, estratégias de atualização, e como solucionar problemas comuns.

Fique ligado!

É isso galera, espero que gostem!

Se você tiver alguma dúvida ou comentário, sinta-se à vontade para compartilhá-los conosco na seção de comentários abaixo!

Forte Abraço!

Este post está licenciado sob CC BY 4.0 e pelo autor.