Aula 06 - Kubernetes - Deployments

Documentação do Minikube: https://minikube.sigs.k8s.io/docs

Documentação do Kubernates: https://kubernetes.io/docs/home/

Github do Kubernates: https://github.com/kubernetes/kubernetes

Playground: https://killercoda.com/kubecon

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:
  1. 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.
  2. 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.
  3. 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:

https://github.com/toticavalcanti

Novamente deixo meus link de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado, até a próxima e bons estudos. ;)