# Guia Prático de Kubernetes para DevOps

## Guia Prático de Kubernetes para DevOps

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1715130123457/12359780-3781-4ed3-86da-aa9b734c2623.png align="center")

### Introdução

Kubernetes é uma plataforma open-source poderosa para orquestrar containers. Pense nela como o maestro de uma orquestra, coordenando a execução de diversos containers (microserviços) de forma eficiente e escalável.

Com a arquitetura de microsserviços crescendo em popularidade, o Kubernetes se tornou essencial para DevOps que buscam:

* **Escalabilidade:** Aumente ou diminua a capacidade da sua aplicação com facilidade, atendendo às demandas do usuário.
    
* **Portabilidade:** Execute sua aplicação em qualquer ambiente, seja local, na nuvem ou híbrido.
    
* **Resiliência:** Garanta alta disponibilidade com recuperação automática de falhas.
    
* **Automação:** Simplifique processos de deploy e gerenciamento de infraestrutura.
    

Este guia prático irá apresentar os conceitos fundamentais do Kubernetes e prepará-lo para explorar suas capacidades avançadas.

**Kubernetes Vanilla vs. Distribuições e Serviços Gerenciados**

Este guia foca no Kubernetes de código aberto, o "Kubernetes Vanilla". Existem também distribuições como OpenShift e Rancher, que adicionam funcionalidades extras, e serviços gerenciados como GKE (Google Kubernetes Engine), EKS (Amazon Elastic Kubernetes Service) e AKS (Azure Kubernetes Service), que simplificam o gerenciamento da infraestrutura. O Kubernetes Vanilla oferece maior flexibilidade, porém requer mais conhecimento e experiência para operar.

### Capítulo 1: Deployments

![](https://ideogram.ai/api/images/direct/v-d8fcdVSs2LMU9pFWDDow.png align="left")

Um deployment é um objeto Kubernetes que define como uma aplicação será executada. Ele especifica:

* **Pod Specification:** Define os containers que compõem a aplicação e seus requisitos de recursos.
    
* **Replica Count:** Define quantas instâncias (pods) da aplicação devem ser executadas.
    
* **Deployment Strategy:** Define como as atualizações serão aplicadas, permitindo rollbacks e zero downtime.
    

**Gerenciando Deployments com kubectl**

O kubectl é a ferramenta de linha de comando para interagir com o Kubernetes. Você pode criar, atualizar e inspecionar deployments com comandos como:

* kubectl apply -f deployment.yaml: Cria ou atualiza um deployment a partir de um arquivo YAML.
    
* kubectl get deployments: Lista os deployments existentes.
    
* kubectl describe deployment: Exibe detalhes de um deployment específico.
    
* kubectl scale deployment: Ajusta o número de réplicas de um deployment.
    
* kubectl rollout: Gerencia o processo de atualização de um deployment, incluindo rollbacks e histórico de revisões.
    

### Exemplo de código YAML para deployment e comandos kubectl

Este código YAML define um deployment básico chamado "meu-app" com uma réplica de um pod executando a imagem "nginx:latest".

**deployment.yaml:**

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: meu-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: meu-app
  template:
    metadata:
      labels:
        app: meu-app
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
```

#### **Comandos kubectl para gerenciar o deployment:**

```bash
kubectl apply -f deployment.yaml

kubectl get deployments

kubectl describe deployment meu-app

kubectl scale deployment meu-app --replicas=3

kubectl rollout undo deployment meu-app

kubectl rollout history deployment meu-app
```

---

### Capítulo 2: Kubernetes Networking

![](https://ideogram.ai/api/images/direct/emsm1speQzmb7ifWepAVcg.png align="left")

O Kubernetes fornece uma rede virtual para seus pods, permitindo que eles se comuniquem entre si e com o mundo externo.

**Princípios Básicos:**

* **IP Único por Pod:** Cada pod recebe um IP único, facilitando o roteamento de tráfego.
    
* **DNS:** O Kubernetes gerencia um servidor DNS para resolução de nomes de serviços e pods.
    
* **Network Namespace:** Containers dentro do mesmo pod compartilham o mesmo namespace de rede, permitindo comunicação via [localhost](http://localhost).
    

**Serviços**

Serviços expõem pods para outros pods ou para o mundo externo, independentemente do IP dos pods. Existem diferentes tipos de serviços:

* **ClusterIP:** Exposição interna dentro do cluster.
    
* **NodePort:** Exposição externa através de um port específico em cada nó do cluster.
    
* **LoadBalancer:** Exposição externa através de um balanceador de carga.
    
* **ExternalName:** Alias para um serviço externo ao cluster.
    

**Ingresse**

Ingresses são objetos que definem regras de roteamento HTTP para serviços, permitindo funcionalidades como balanceamento de carga, SSL termination e roteamento baseado em nome de host e caminho.

### Capítulo 3: Kubernetes Volumes

![](https://ideogram.ai/api/images/direct/2r8UCD8yToy8u4kDZl2trQ.png align="left")

Volumes são diretórios que armazenam dados para pods. Eles permitem que os dados persistam mesmo após a reinicialização de um pod.

**Tipos de Volumes:**

* **emptyDir:** Volume temporário que é apagado quando o pod é excluído.
    
* **hostPath:** Volume que mapeia um diretório do nó do cluster.
    
* **Persistent Volumes (PVs) e Persistent Volume Claims (PVCs):** Volumes persistentes que podem ser provisionados dinamicamente e desacoplados dos pods.
    
* **Volumes em nuvem:** Volumes que utilizam serviços de armazenamento em nuvem como AWS EBS e GCE Persistent Disk.
    

**Modos de Acesso a Volumes:**

* **ReadWriteOnce (RWO):** Somente um nó pode acessar o volume para leitura e escrita.
    
* **ReadOnlyMany (ROX):** Vários nós podem acessar o volume somente para leitura.
    
* **ReadWriteMany (RWX):** Vários nós podem acessar o volume para leitura e escrita.
    

### Capítulo 4: Kubernetes Security

![](https://ideogram.ai/api/images/direct/rx_6IqDqSLOn4R3miTygXQ.png align="left")

A segurança é crucial em qualquer ambiente Kubernetes.

**Secrets:**

Secrets armazenam informações sensíveis, como senhas e tokens, de forma segura. Eles podem ser usados como variáveis de ambiente ou montados como arquivos em pods.

**Service Accounts:**

Service accounts são identidades para processos que rodam em pods, permitindo controle de acesso aos recursos do cluster.

**RBAC (Role-Based Access Control):**

RBAC controla o acesso aos recursos do cluster com base em funções e permissões.

**Audit Log:**

O audit log registra as solicitações à API do Kubernetes, permitindo auditoria e rastreamento de atividades.

### Próximos Passos

Este guia prático forneceu uma base sólida para o seu aprendizado em Kubernetes. Explore a documentação oficial do Kubernetes e cursos online para aprofundar seus conhecimentos.

Lembre-se, o Kubernetes é uma ferramenta poderosa que pode transformar a forma como você gerencia suas aplicações em container. Com dedicação e prática, você poderá dominar esta tecnologia e elevar o seu nível de expertise em DevOps.
