Documentation
k8s

Kubernetes - Orquestación de Contenedores

Guía completa de Kubernetes para orquestar y gestionar contenedores a escala.

¿Qué es Kubernetes?

Kubernetes (K8s) es una plataforma open-source para automatizar el despliegue, escalado y gestión de aplicaciones en contenedores.

Origen

Creado por Google basado en su experiencia con Borg y Omega, donado a la CNCF en 2014.

¿Por qué Kubernetes?

  • Orquestación automática: Gestiona miles de contenedores
  • Auto-scaling: Escala según demanda
  • Self-healing: Reinicia contenedores fallidos
  • Load balancing: Distribuye tráfico automáticamente
  • Rolling updates: Actualizaciones sin downtime

Arquitectura de Kubernetes

Arquitectura de Kubernetes

Loading diagram...

Control Plane (Master)

API Server: Punto de entrada para todas las operaciones etcd: Almacén de configuración distribuido Scheduler: Asigna Pods a Nodos Controller Manager: Mantiene el estado deseado

Data Plane (Worker Nodes)

kubelet: Agente que corre en cada nodo kube-proxy: Gestiona networking Container Runtime: Docker, containerd, CRI-O

Conceptos Fundamentales

Pod

Unidad mínima desplegable, agrupa uno o más contenedores.

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.21
    ports:
    - containerPort: 80

Deployment

Gestiona el despliegue y actualización de Pods.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80

Service

Expone Pods como un servicio de red.

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer

ConfigMap y Secret

ConfigMap: Datos de configuración no sensibles Secret: Datos sensibles (passwords, tokens)

Comandos Esenciales kubectl

# Ver recursos
kubectl get pods
kubectl get deployments
kubectl get services

# Describir recurso
kubectl describe pod nginx-pod

# Ver logs
kubectl logs nginx-pod

# Ejecutar comando en pod
kubectl exec -it nginx-pod -- /bin/bash

# Aplicar configuración
kubectl apply -f deployment.yaml

# Eliminar recurso
kubectl delete pod nginx-pod

# Escalar deployment
kubectl scale deployment nginx-deployment --replicas=5

# Ver eventos
kubectl get events

Namespaces

Aíslan recursos lógicamente dentro del cluster.

# Crear namespace
kubectl create namespace development

# Listar namespaces
kubectl get namespaces

# Usar namespace
kubectl get pods -n development

Helm - Package Manager

Helm gestiona aplicaciones Kubernetes complejas.

# Instalar chart
helm install my-release stable/mysql

# Listar releases
helm list

# Actualizar release
helm upgrade my-release stable/mysql

# Desinstalar
helm uninstall my-release

Estrategias de Deployment

Rolling Update (Default)

Actualiza pods gradualmente, sin downtime.

Recreate

Detiene todos los pods antes de crear nuevos.

Blue/Green

Mantiene dos versiones y cambia tráfico.

Canary

Despliega gradualmente a un porcentaje de usuarios.

Mejores Prácticas

  1. Resources limits: Define CPU/memoria para cada container
  2. Health checks: Liveness y readiness probes
  3. RBAC: Control de acceso basado en roles
  4. Network Policies: Segmenta tráfico entre pods
  5. Horizontal Pod Autoscaler: Auto-scaling basado en métricas
  6. Persistent Volumes: Para datos que deben persistir
  7. Secrets management: Usa herramientas como Sealed Secrets o External Secrets

Distribuciones Kubernetes

Managed Services:

  • EKS (AWS)
  • GKE (Google Cloud)
  • AKS (Azure)

Self-managed:

  • kubeadm
  • k3s (ligero)
  • MicroK8s
  • Kind (local)

Ecosystem y Herramientas

  • Prometheus + Grafana: Monitoreo
  • Istio/Linkerd: Service mesh
  • ArgoCD/Flux: GitOps
  • Cert-Manager: Gestión de certificados
  • Ingress Controllers: NGINX, Traefik

Explora configuraciones y ejemplos específicos en nuestra documentación.

#kubernetes#k8s#orchestration#containers#devops