Arquitectura Kubernetes para principiantes
|

Kubernetes para principiantes: arquitectura y conceptos clave

Si ya tienes claro Docker y los contenedores, el siguiente paso natural es Kubernetes. Es la herramienta de orquestacion de contenedores mas usada en el mundo: gestiona automaticamente el despliegue, escalado y disponibilidad de tus aplicaciones. En este post te explico la arquitectura y los conceptos clave para entender Kubernetes desde cero. Consulta la documentacion oficial de Kubernetes para profundizar.

Que es Kubernetes y por que usarlo

Kubernetes (K8s) es un orquestador de contenedores de codigo abierto desarrollado originalmente por Google. Resuelve el problema de gestionar muchos contenedores en produccion: cuando tienes 10, 100 o 1000 contenedores, no puedes gestionarlos manualmente. Kubernetes lo hace por ti.

Docker soloKubernetes
Gestiona contenedores en un hostGestiona contenedores en multiples hosts
Escalado manualEscalado automatico
Sin recuperacion automaticaReinicia contenedores caidos automaticamente
Actualizaciones manualesRolling updates sin downtime
Sin balanceo de carga nativoLoad balancing integrado

Arquitectura de Kubernetes

Un cluster de Kubernetes tiene dos tipos de maquinas: el Control Plane (cerebro del cluster) y los Nodes (donde corren las aplicaciones).

Control Plane: el cerebro de Kubernetes

  • API Server: punto de entrada para todas las operaciones. Cuando ejecutas kubectl, hablas con el API Server.
  • etcd: base de datos distribuida donde se guarda todo el estado del cluster.
  • Scheduler: decide en que nodo se ejecuta cada Pod.
  • Controller Manager: mantiene el estado deseado del cluster. Si un Pod muere, lo recrea.

Nodes: donde corren tus aplicaciones

  • kubelet: agente que comunica el nodo con el Control Plane.
  • kube-proxy: gestiona las reglas de red del nodo.
  • Container Runtime: el motor de contenedores (containerd, CRI-O).

Conceptos clave de Kubernetes

Pod: la unidad minima de Kubernetes

Un Pod es el objeto mas basico de Kubernetes. Contiene uno o varios contenedores que comparten red y almacenamiento. En la practica, un Pod suele tener un solo contenedor.

# Ver todos los pods
kubectl get pods

# Ver pods en todos los namespaces
kubectl get pods -A

# Ver detalles de un pod
kubectl describe pod mi-pod

# Ver logs de un pod
kubectl logs mi-pod

# Acceder al shell de un pod
kubectl exec -it mi-pod -- bash

Deployment: gestiona el ciclo de vida de tus Pods

Un Deployment define cuantas replicas de un Pod quieres tener. Si un Pod muere, el Deployment lo recrea automaticamente.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mi-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mi-app
  template:
    metadata:
      labels:
        app: mi-app
    spec:
      containers:
      - name: mi-app
        image: nginx:1.25
        ports:
        - containerPort: 80
# Aplicar el manifiesto
kubectl apply -f deployment.yaml

# Ver deployments
kubectl get deployments

# Escalar a 5 replicas
kubectl scale deployment mi-app --replicas=5

# Deshacer un rollout
kubectl rollout undo deployment mi-app

Service: como exponer tus Pods

Los Pods tienen IPs efimeras que cambian cuando se recrean. Un Service proporciona una IP y DNS estables para acceder a un grupo de Pods.

Tipo de ServicePara que sirve
ClusterIPSolo accesible dentro del cluster (por defecto)
NodePortExpone el servicio en un puerto de cada nodo
LoadBalancerCrea un balanceador externo (cloud providers)
ExternalNameMapea a un DNS externo

Namespace: organizacion del cluster

# Ver namespaces
kubectl get namespaces

# Crear namespace
kubectl create namespace produccion

# Trabajar en un namespace especifico
kubectl get pods -n produccion

Instalar Kubernetes en local con minikube

Para practicar en local sin necesidad de un cluster en la nube, la opcion mas sencilla es minikube:

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

# Arrancar el cluster
minikube start

# Ver el estado
minikube status

# Acceder al dashboard web
minikube dashboard

kubectl: comandos esenciales

kubectl get nodes              # ver nodos del cluster
kubectl get pods               # ver pods
kubectl get services           # ver services
kubectl get deployments        # ver deployments
kubectl apply -f archivo.yaml  # aplicar manifiesto
kubectl delete -f archivo.yaml # eliminar recurso
kubectl describe pod mi-pod    # detalles de un pod
kubectl logs mi-pod            # logs de un pod
kubectl exec -it mi-pod -- sh  # acceder al pod

Conclusion

Kubernetes puede parecer complejo al principio, pero una vez entiendes los conceptos basicos (Pod, Deployment, Service) todo lo demas encaja. La clave es practicar con minikube en local antes de tocar un cluster en produccion. Si vienes del mundo Docker, repasa el post de Introduccion a Docker para tener clara la base.

En el proximo post veremos CrashLoopBackOff en Kubernetes: causas y soluciones. Tienes preguntas sobre Kubernetes? Dejame un comentario.

¡No te pierdas los próximos posts!

¡No hacemos spam! Lee nuestra política de privacidad para obtener más información.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *