Deployment - Kubernetes (BR)
Tags: kubernetes, devops
Published: 2023-08-12 13:06:18

---
title: Deployment - Kubernetes (BR)
published: true
description: Introdução sobre deployment's
tags: #kubernetes #devops
# cover_image: https://direct_url_to_image.jpg
# Use a ratio of 100:42 for best results.
# published_at: 2023-07-15 18:14 +0000
---
## Pré-requisitos
- [Pods](https://dev.to/daniellcas/pods-kubernetes-507k)
- [ReplicaSet](https://dev.to/daniellcas/replicaset-kubernetes-55gn)

## O que é deployment ?
É um gerenciador de Pods e ReplicaSet, você pode definir o `state` desejado e ele trabalhará para atualizar o seu `state`.

## Criação de um deployment
 - sintaxe
```yaml
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
```

O script acima irá criar um deployment que cria um ReplicaSet com 3 replicas como definido, que cria 3 pods que terão o template definido, com a imagem do nginx e o label de app:nginx.

 - Comandos para criar e observar

Para aplicar o código acima.
```bash
kubectl apply -f {nome_do_arquivo}
```

Para verificar se o deploment foi criado
```bash
kubectl get deployments
```

Ao rodar o `kubectl get deployments`, aparecerá os seguintes nomes.

> NAME
nome do deployment que foi criado no `namespace`.

> READY
exibe quantas réplicas do aplicativo estão disponíveis. (pronto/desejado)


> UP-TO-DATE
exibe o número de réplicas que foram atualizadas para atingir o `state` desejado.


> AVAILABLE
exibe quantas réplicas do aplicativo estão disponíveis.

> AGE
exibe a quantidade de tempo que o aplicativo está em execução.

---

Para verificar o status de lançamento do deployment
```bash
kubectl rollout status deployment/{nome_do_deployment}
```

---

- Atualizações de Pods.

O **deployment** garante que apenas um determinado número de pods fiquem inativos, enquanto eles são atualizados. Por padrão 75% dos pods devem ficar ativos e somente 25% inativos para atualizações. ele primeiro cria novos pods para então começar a destruir os antigos. Ele não mata pods antigos até que um número suficiente de novos pods surjam e não cria novos pods até que um número suficiente de pods antigos tenha sido eliminado.

---

- Caso de criação de deployment's com erros.

Para esses casos a gente consegue ter o histórico de alterações do deployment pelo comando a seguir:
```bash
kubectl rollout history deployment/{nome_do_deployment}
```
esse comando mostrará o `history` de alteração do deployment.

para voltar a uma versão anterior basta:
```bash
kubectl rollout undo deployment/{nome_do_deployment}
```

para voltar a uma versão específica:
```bash
kubectl rollout undo deployment/{nome_do_deployment} --revision={numero_da_revisao}
```

---

## Política de limpeza

Você pode definir um campo na criação do seu deployment para especificar quantos ReplicaSets antigos para esta implantação você deseja reter. por padrão e 10.
```yaml
spec:
  revisionHistoryLimit: <-- Esse e o campo de definição 
```

---

## Conclusão:
Observe a imagem a seguir:
![Deployment kubernetes](https://miro.medium.com/v2/resize:fit:1400/1*KtnpIx1twobr16FP7hvAUg.png)

Basicamente **deployment** vai fazer o controle de seus ReplicaSets e Pods por você, pode ser configurado da melhor maneira ao seu negócio. Podendo tanto fazer o controle, até definir seus recursos máximos e mínimos. também tem como trabalhar com suas escalas tanto vertical quanto horizontal junto com um serviço de **HorizontalPodAutoscaler**.


---

> ### Referências
>> [Kubernetes](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/)