Aula 06 - Kubernetes - Deployments
Introdução
Bem-vindos à sexta aula do curso de
Kubernetes!
Nesta, vamos dar continuidade ao aprendizado, explorando agora o conceito de
Deployments.
Deployment - Visão Geral
O que é um Deployment?
Um
Deployment é um recurso no
Kubernetes que gerencia a implantação declarativa de aplicativos.
Ele fornece atualizações para aplicações declarando o estado desejado da aplicação.
Um
Deployment permite que você descreva um estado desejado em um arquivo e o
Kubernetes cuida da execução desse estado na infraestrutura.
Por que usar Deployments?
Enquanto o
ReplicaSet é eficaz para garantir que um número específico de réplicas de
Pods esteja sempre em execução, o
Deployment oferece uma camada de abstração adicional e traz benefícios significativos:
- Declaratividade: Com um Deployment, você declara o estado desejado do sistema e o Kubernetes se encarrega de fazer com que o sistema alcance esse estado.
- Atualizações Declarativas: Os Deployments facilitam as atualizações de aplicativos. Você pode declarar uma nova versão de seu aplicativo e o Kubernetes cuidará da atualização gradual dos Pods, garantindo zero tempo de inatividade, se configurado adequadamente.
- Rollback Simples: Se algo der errado durante uma atualização, você pode facilmente reverter para a versão anterior com um comando simples.
Exemplo de Deployment
Inicie o
minikube
minikube start
Veja o
status
minikube status
Agora vamos dar uma olhada em um exemplo de uso de
Deployment.
my-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16
ports:
- containerPort: 80
Explicação:
apiVersion: apps/v1 (indica a versão da
API do
Kubernetes usada)
kind: Deployment (indica o tipo de recurso criado)
metadata:
- name: nginx-deployment (nome do Deployment)
- spec: (seção onde definimos as especificações do Deployment)
spec:
- replicas: 3 (número de réplicas do container que o Deployment mantém em execução)
- selector:
- matchLabels:
- app: nginx (usado para selecionar Pods que possuem o label "app=nginx" para fazer parte deste Deployment)
template:
- metadata:
- labels:
- app: nginx (rótulos aplicados aos Pods criados pelo Deployment)
- spec:
- containers:
- name: nginx (nome do container)
- image: nginx:1.16 (imagem do container a ser executada)
- ports:
- containerPort: 80 (porta interna do container)
Hands-On: Aplicando e Gerenciando Deployments
Vamos realizar alguns comandos práticos para aplicar e gerenciar
Deployments no nosso
cluster Kubernetes. Certifique-se de ter o
Minikube iniciado.
1. Aplicar o Deployment:
kubectl apply -f my-deployment.yaml
2. Verificar o status do Deployment:
kubectl get deployments
3. Verificar os Pods associados ao Deployment:
kubectl get pods
4. Mostra do detalhes do Deployment:
kubectl describe deployment nginx-deployment
5. Aumentando o número de Replicas do Deployment de 1 Pod para 5 Pods:
kubectl scale deployment nginx-deployment --replicas=5
Veja agora os Pods que estão em execução
kubectl get pods -o wide
OBS. Veja que os pods estão em execução no mesmo nó, no caso, o nó minikube, mas em um cluster com vários nós, esses pods estariam em execução em diferentes nós.
6. Atualizar a versão da imagem do contêiner no Deployment:
kubectl set image deployment/nginx-deployment nginx=nginx:1.18
7. Verificar o histórico de revisões do Deployment:
kubectl rollout history deployment/nginx-deployment
8. Reverter para uma revisão específica:
kubectl rollout undo deployment/nginx-deployment --to-revision=2
Conclusão
Nesta aula, exploramos o conceito de
Deployments no
Kubernetes.
Vimos como eles oferecem uma camada de abstração para facilitar a implantação e atualização de aplicações de forma declarativa.
Os
Deployments são uma peça-chave na gestão de aplicações em clusters
Kubernetes, proporcionando flexibilidade e controle.
Na próxima aula, continuaremos a aprimorar nossos conhecimentos, explorando outro recurso essencial do
Kubernetes, que são os
services.
Até lá! 🚀
Meu github:
Novamente deixo meus link de afiliados:
Obrigado, até a próxima e bons estudos. ;)