kb.erickguedes.com
Kubernetes: Orquestração em Produção

Arquitetura do Kubernetes

Aula 1 de 8

O que é Kubernetes?

Kubernetes (K8s) é um orquestrador de containers declarativo, open-source, original do Google (Borg). Automatiza deploy, scaling e operação.

┌──────────────┐
│   Control Plane (Master)           │
│  ├── kube-apiserver (REST API)     │
│  ├── kube-scheduler (agendador)    │
│  ├── kube-controller-manager       │
│  └── etcd (key-value store)        │
└──────────────┘
         │
    ┌────┴────┐
    │  Node   │          Worker
    ├─────────┤
    │ kubelet │   ←→  API Server
    │ kube-proxy │  ←→  Network rules
    │ CRI (containerd) │  ←→  Container runtime
    └─────────┘
    ┌─────────┐
    │  Pods   │
    └─────────┘

Instalação — Minikube (local)

# Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

minikube start --cpus 4 --memory 8g --driver docker
minikube status
minikube dashboard   # UI web

# kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/

kubectl Essencial

kubectl cluster-info                # info do cluster
kubectl get nodes                   # nós do cluster
kubectl get pods                    # pods no namespace atual
kubectl get pods -A                 # pods em todos namespaces
kubectl get all                     # recursos comuns

kubectl describe node minikube     # detalhes do nó
kubectl api-resources              # lista recursos disponíveis
kubectl explain pod                # documentação inline

kubectl apply -f deployment.yaml   # criar/atualizar
kubectl delete -f deployment.yaml  # deletar
kubectl logs pod-name              # logs
kubectl logs -f pod-name           # seguir logs
kubectl exec -it pod-name -- bash  # dentro do pod

Pod — Menor Unidade

# pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
    tier: frontend
spec:
  containers:
    - name: nginx
      image: nginx:alpine
      ports:
        - containerPort: 80
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
        limits:
          cpu: 500m
          memory: 256Mi
kubectl apply -f pod.yaml
kubectl port-forward pod/nginx-pod 8080:80
# Acesse: http://localhost:8080

Namespaces

# Namespaces organizam o cluster
kubectl get ns
kubectl create ns dev
kubectl create ns staging
kubectl create ns prod

# Recursos em namespace específico
kubectl get pods -n dev
kubectl apply -f deployment.yaml -n prod

# Context (namespace padrão)
kubectl config set-context --current --namespace=dev

Contexts e kubeconfig

# Múltiplos clusters/namespaces
kubectl config get-contexts
kubectl config use-context minikube
kubectl config set-context dev --namespace=dev --cluster=minikube --user=minikube

# kubeconfig location: ~/.kube/config

Kubernetes não é Docker. É um sistema declarativo — você descreve o estado desejado e o control loop reconcilia. Pod é a menor unidade (1+ containers). Use namespaces para isolar ambientes.