Comandos Esenciales de Kubernetes: Conteneriza tu Flujo de Trabajo como un Pro

Kubernetes se ha convertido en el núcleo de la arquitectura moderna basada en contenedores. Ya sea que estés comenzando o quieras afinar tus habilidades, conocer los comandos esenciales de kubectl es clave para operar tus clústeres de manera eficiente. Este artículo recopila los comandos más útiles y algunos tips para llevar tu flujo de trabajo al siguiente nivel 🚀.


🧩 Pods: Bloques Fundamentales de Kubernetes

Un Pod representa una o más contenedores que comparten almacenamiento, red y especificaciones. Son la unidad básica de ejecución en Kubernetes.

Comandos Clave:

# Listar todos los pods
kubectl get pods

# Ver detalles de un pod específico
kubectl describe pod <pod_name>

# Crear un pod (¡recomendado solo para pruebas!)
kubectl run <pod_name> --image=<image>

# Eliminar un pod
kubectl delete pod <pod_name>

# Ver logs de un pod
kubectl logs <pod_name>

# Acceder a un contenedor dentro de un pod
kubectl exec -it <pod_name> -- /bin/bash

💡 Tip: Usa -o wide para ver más info, como IP o nodo donde corre el pod.


🚀 Deployments: Control Total del Ciclo de Vida

Los Deployments gestionan el estado deseado de las aplicaciones: crean, actualizan y escalan pods automáticamente.

Comandos Clave:

# Ver todos los deployments
kubectl get deployments

# Ver detalles
kubectl describe deployment <deployment_name>

# Crear un deployment
kubectl create deployment <deployment_name> --image=<image>

# Escalar réplicas
kubectl scale deployment <deployment_name> --replicas=<number>

# Hacer rollout de cambios
kubectl rollout restart deployment <deployment_name>

# Ver historial y estado de despliegues
kubectl rollout history deployment <deployment_name>
kubectl rollout status deployment <deployment_name>

💡 Tip: Usa kubectl apply -f archivo.yaml para un enfoque declarativo y más mantenible.


🔗 Services: Conecta y Expón tus Aplicaciones

Los Services exponen tus aplicaciones al exterior o las conectan internamente.

Comandos Clave:

# Ver servicios
kubectl get services

# Detalles del servicio
kubectl describe service <service_name>

# Exponer un deployment como servicio
kubectl expose deployment <deployment_name> --port=<port> --target-port=<container_port> --type=ClusterIP|NodePort|LoadBalancer

# Eliminar un servicio
kubectl delete service <service_name>

💡 Tip: Usa --type=LoadBalancer solo en clústeres que soporten balanceadores de carga externos (como en la nube).


📂 Namespaces: Organización y Aislamiento

Permiten aislar recursos dentro del mismo clúster: ideal para entornos dev, test y prod.

Comandos Clave:

# Ver todos los namespaces
kubectl get namespaces

# Crear uno nuevo
kubectl create namespace <namespace_name>

# Cambiar el contexto actual
kubectl config set-context --current --namespace=<namespace_name>

# Eliminar un namespace
kubectl delete namespace <namespace_name>

💡 Tip: Usa kubectl get all -n <namespace> para ver todo lo que ocurre en un espacio de nombres.


📡 Información y Diagnóstico del Clúster

Verifica el estado general y resuelve problemas rápidamente.

# Ver nodos del clúster
kubectl get nodes

# Ver eventos recientes
kubectl get events

# Información general del clúster
kubectl cluster-info

# Ver recursos que consumen los pods
kubectl top pods

💡 Tip: Usa herramientas como k9s, lens o kubectx/kubens para una experiencia más visual y fluida.


⚙️ Flags y Filtros Útiles

Mejora tu productividad en la terminal:

  • -o wide: muestra más información.
  • -n <namespace>: ejecuta comandos en un namespace específico.
  • --all-namespaces: muestra recursos globalmente.
  • -f <archivo.yaml>: aplica configuración desde YAML.
  • --dry-run=client: valida sin aplicar cambios.
  • --selector=<key>=<value>: filtra recursos por etiquetas.
# Ver pods en un namespace específico
kubectl get pods -n <namespace>

# Aplicar configuración sin ejecutarla
kubectl apply -f deployment.yaml --dry-run=client

Conclusión

Dominar estos comandos te permitirá gestionar de forma eficiente cualquier entorno en Kubernetes. No se trata solo de escribir comandos, sino de entender cómo encajan en el ciclo de vida de tus aplicaciones.