# MANUAL TÉCNICO - KUBERNETES: VISÃO GERAL E FERRAMENTAS BÁSICAS

**Código:** ITGENG 0015/26 | **Classificação:** RESTRITO
**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}}

## 1. HISTÓRICO DE REVISÃO

> ⚠️ **REGRA DE OURO:**
> 1. **Autor:** João Pedro Toledo Gonçalves.
> 2. **Descrição:** Criação do documento.

| Data | Versão | Descrição | Autor |
| :--- | :--- | :--- | :--- |
| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves |

## 2. OBJETIVO
Introduzir os conceitos fundamentais do Kubernetes (K8s) e o uso da ferramenta de linha de comando `kubectl` para administração de clusters.

## 3. PRÉ-REQUISITOS
- [ ] Um cluster Kubernetes ativo (Pode ser Minikube, K3s, EKS, AKS).
- [ ] Ferramenta `kubectl` instalada localmente.
- [ ] Arquivo de configuração `~/.kube/config` (kubeconfig).

## 4. CONCEITOS CHAVE
> ℹ️ **NOTA:** O K8s é declarativo. Você define o estado desejado (YAML) e ele trabalha para manter esse estado.

| Componente | Função | Equivalente Docker |
| :--- | :--- | :--- |
| **Pod** | Menor unidade deployável. Pode ter 1+ containers. | Container "Grupo" |
| **Deployment** | Gerencia réplicas e updates de Pods. | Service (Swarm) |
| **Service** | Expõe o Deployment na rede (ClusterIP, NodePort). | Port Mapping |
| **Namespace** | Segregação virtual de recursos. | ~Stack Name |

## 5. PASSO A PASSO (EXECUÇÃO)

**Etapa 1: Verificação de Conexão**
1.  Verifique se o `kubectl` consegue falar com o cluster.

```bash
kubectl cluster-info
kubectl get nodes
```

**Etapa 2: Deploy Imperativo (Rápido)**
1.  Crie um deployment simples do Nginx.

```bash
kubectl create deployment demo-nginx --image=nginx
```

**Etapa 3: Deploy Declarativo (YAML - Recomendado)**
1.  Crie um arquivo `app.yaml`:

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

2.  Aplique o arquivo:
    ```bash
    kubectl apply -f app.yaml
    ```

**Etapa 4: Debug e Logs**
1.  Liste os pods para pegar o nome.
    ```bash
    kubectl get pods
    ```
2.  Veja os logs de um pod específico.
    ```bash
    kubectl logs -f meu-app-xxxxx-xxxxx
    ```
3.  Acesse o shell interativo.
    ```bash
    kubectl exec -it meu-app-xxxxx-xxxxx -- /bin/bash
    ```

## 6. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING)

**Problema 1: `ErrImagePull` ou `ImagePullBackOff`**
*   **Causa:** Nome da imagem errado, tag inexistente ou falta de credenciais (Private Registry).
*   **Solução:**
    1.  `kubectl describe pod [NOME_POD]` -> Veja a seção "Events".

**Problema 2: `CrashLoopBackOff`**
*   **Causa:** O container iniciou e "morreu" imediatamente (Erro na aplicação).
*   **Solução:**
    1.  `kubectl logs [NOME_POD] --previous` para ver o log antes do crash.

## 7. VALIDAÇÃO FINAL
- [ ] `kubectl get nodes` retorna status **Ready**?
- [ ] `kubectl get pods` mostra todos os pods como **Running**?
- [ ] É possível aplicar mudanças editando o YAML e rodando `apply` novamente?
