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.