Kubernetes

Orquesta aplicaciones en contenedores a escala - automatiza despliegue, escalado y gestión en clusters

TL;DR

Qué: Plataforma de orquestación de contenedores para automatizar despliegue, escalado y gestión.

Por qué: Ejecutar contenedores a escala con alta disponibilidad, rolling updates y auto-reparación.

Quick Start

Instalar kubectl:

# macOS
brew install kubectl

# Linux
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/

# Verificar
kubectl version --client

Instalar Minikube (cluster local):

# macOS
brew install minikube

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

Iniciar un cluster:

minikube start

# Verificar
kubectl get nodes

Desplegar una aplicación:

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
minikube service nginx

Cheatsheet

ComandoDescripción
kubectl get podsListar pods
kubectl get servicesListar servicios
kubectl get deploymentsListar deployments
kubectl describe pod NAMEDetalles del pod
kubectl logs PODVer logs del pod
kubectl exec -it POD -- bashShell en el pod
kubectl apply -f file.yamlAplicar config
kubectl delete -f file.yamlEliminar recursos
kubectl scale deploy NAME --replicas=3Escalar deployment
kubectl rollout restart deploy NAMEReiniciar deployment

Gotchas

Pod stuck in Pending

# Verificar eventos
kubectl describe pod POD_NAME

# Causas comunes:
# - Recursos insuficientes → añadir nodos o reducir requests
# - Error de pull de imagen → verificar nombre de imagen y acceso al registry

CrashLoopBackOff

# Verificar logs
kubectl logs POD_NAME --previous

# Causas comunes:
# - Crash de la app → corregir código de la aplicación
# - Config faltante → verificar ConfigMaps/Secrets

Can’t connect to cluster

# Verificar contexto actual
kubectl config current-context

# Listar contextos
kubectl config get-contexts

# Cambiar contexto
kubectl config use-context CONTEXT_NAME

Apply vs Create

kubectl create    # Crear nuevo recurso (falla si existe)
kubectl apply     # Crear o actualizar (idempotente)

# Siempre preferir apply para producción
kubectl apply -f deployment.yaml

Next Steps