Volver al inicio

Kubernetes para Desarrolladores: Práctica y Depuración

El artículo ofrece una introducción práctica a Kubernetes para desarrolladores de nivel middle/senior. Cubre la instalación de un clúster local, objetos básicos (Pod, Deployment, Service), transición a servicios gestionados en la nube y métodos para depurar errores comunes.

Kubernetes Sin Rodeos: De Pod a Clúster en la Nube
Advertisement 728x90

Introducción práctica a Kubernetes: De clúster local a despliegue en la nube

Kubernetes no es solo una herramienta de orquestación de contenedores, es el estándar de facto para gestionar aplicaciones distribuidas. Este artículo va dirigido a desarrolladores e ingenieros que quieran pasar rápidamente de la teoría a la práctica: desplegar un clúster local, entender los objetos básicos y prepararse para servicios gestionados en la nube.

Configurando tu entorno de trabajo

El primer paso es instalar kubectl, la herramienta CLI principal para interactuar con la API de Kubernetes. La versión del cliente no debe diferir de la versión del clúster en más de una rama de lanzamiento menor. La instalación varía según el SO:

  • Linux: script oficial del repositorio de Kubernetes;
  • macOS: brew install kubectl;
  • Windows: mediante winget, Chocolatey o descarga directa del binario.

Importante: si usas Docker Desktop, su kubectl integrado puede entrar en conflicto con el principal. Se recomienda usar un único punto de instalación y gestionar la variable PATH.

Google AdInline article slot

Para desarrollo local, dos soluciones funcionan bien:

Minikube

Minikube crea un clúster de un solo nodo dentro de una máquina virtual o contenedor (según el driver). Lánzalo con un comando:

minikube start

Tras iniciarlo, verifica el estado del nodo:

Google AdInline article slot
kubectl get nodes

Resultado esperado: un nodo con estado Ready.

Kind (Kubernetes in Docker)

Kind ejecuta nodos como contenedores Docker. Es especialmente útil con una integración estrecha en flujos de trabajo Docker existentes:

kind create cluster

Las ventajas de Kind incluyen arranque rápido y limpieza sencilla. Sin embargo, para principiantes, Minikube sigue siendo la opción preferida por su extensa documentación y comunidad.

Google AdInline article slot

Tras lanzar el clúster, verifica la conectividad:

kubectl cluster-info

Si el comando devuelve información sobre los componentes del plano de control, tu entorno está listo.

Objetos básicos de Kubernetes

Cualquier aplicación en Kubernetes se construye sobre tres abstracciones clave: Pod, Deployment y Service.

Pod: la unidad ejecutable mínima

Un Pod es un grupo de uno o más contenedores que comparten espacio de nombres de red, volúmenes e IPC. Todos los contenedores en un Pod pueden comunicarse entre sí vía localhost. Sin embargo, los Pods son efímeros: pueden eliminarse en cualquier momento por fallos, actualizaciones o escalado. No se recomienda gestionar Pods directamente.

Deployment: gestión declarativa de réplicas

Un Deployment define el estado deseado de una aplicación: número de réplicas, imagen del contenedor, estrategia de actualización. Ejemplo de manifiesto:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:v1.2
        ports:
        - containerPort: 80

Aplica el manifiesto:

kubectl apply -f deployment.yaml

Kubernetes crea automáticamente un ReplicaSet que asegura el número especificado de Pods en ejecución.

Service: punto de entrada de red estable

Un Service proporciona una dirección IP estable y un nombre DNS para un grupo de Pods seleccionados por etiquetas. Ejemplo de Service interno:

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
    - port: 8080
      targetPort: 80
  type: ClusterIP

Para acceso local en Minikube, usa:

minikube service my-app-service

El comando abrirá automáticamente un navegador con la URL correcta.

Pasando a la nube: clústeres gestionados

Tras dominar el entorno local, lo lógico es pasar a despliegues de producción. La configuración manual de clústeres con kubeadm es posible, pero poco práctica en la mayoría de escenarios. Mejor usar servicios gestionados:

  • Amazon EKS: flexible, pero requiere conocimiento profundo de AWS IAM y VPC;
  • Google GKE: la implementación más madura con gestión automática de nodos y seguridad integrada;
  • Azure AKS: conveniente al usar el ecosistema de Microsoft y Azure DevOps.

El enfoque recomendado es Infraestructura como Código (IaC). Por ejemplo, con Terraform puedes describir de forma declarativa el clúster y el grupo de nodos para reproducibilidad y control de versiones.

Tras crear el clúster en la nube, actualiza kubeconfig:

aws eks update-kubeconfig --name my-app-cluster

Ahora todos los comandos kubectl apuntarán al clúster en la nube.

Depurando problemas comunes

Los errores de Kubernetes suelen seguir patrones recurrentes. Sigue un enfoque sistemático:

  • Verifica el estado de los Pods: kubectl get pods
  • Revisa los registros: kubectl logs <pod-name>
  • Analiza eventos: kubectl describe pod <pod-name>
  • Si es necesario, entra en el contenedor: kubectl exec -it <pod-name> -- /bin/sh

Problemas comunes y soluciones:

  • ImagePullBackOff: verifica el nombre de la imagen, etiqueta y imagePullSecrets para repos privados;
  • CrashLoopBackOff: revisa registros de la app y eventos por OOMKilled o errores de inicialización;
  • Service inalcanzable: asegúrate de que las etiquetas de los Pods coincidan con el selector del Service, y que los puertos (port, targetPort, containerPort) estén alineados.

Siempre especifica resources.requests y resources.limits para CPU y memoria; esto evita inestabilidad en los nodos y mala programación.

Qué estudiar a continuación

Tras asimilar lo básico, céntrate en:

  • Ingress y Gateway API: enrutamiento de tráfico externo;
  • ConfigMaps y Secrets: gestión de configuración sin valores hardcodeados;
  • Jobs y CronJobs: tareas únicas y periódicas;
  • Horizontal Pod Autoscaler: autoescalado basado en métricas.

El ecosistema de Kubernetes es dinámico: nuevos estándares (como Gateway API) van reemplazando gradualmente a los obsoletos. Mantente actualizado, pero prioriza resolver problemas específicos antes que aprenderlo todo de golpe.

Lecciones clave

  • Kubernetes exige un enfoque declarativo: describe el estado deseado y el sistema trabaja para alcanzarlo.
  • Los clústeres locales (Minikube, Kind) proporcionan un entorno seguro para experimentos sin riesgos de producción.
  • Los servicios gestionados en la nube (EKS, GKE, AKS) ahorran cientos de horas en operaciones.
  • La depuración empieza con kubectl get, describe y logs: resuelven el 90% de los problemas.
  • Siempre establece límites de recursos para evitar inestabilidad en el clúster.

— Editorial Team

Advertisement 728x90

Leer después