Skip to main content

Apuntes iniciales de Kubernetes


Estos apuntes no pretenden ser una guía completa, sino un registro personal mientras aprendo Kubernetes. Sirven para tener a mano los comandos básicos, los errores más comunes y las ideas que conviene no olvidar al empezar.


Fundamentos del comando kubectl

Sintaxis general:

kubectl [comando] [tipo_recurso] [nombre] [flags]

Ejemplo rápido:

kubectl get pods -n kube-system

Comandos esenciales

Comando Descripción
kubectl get pods Lista los pods en el namespace actual.
kubectl get all Muestra todos los recursos del namespace.
kubectl describe pod <nombre> Detalla estado, eventos y errores de un pod.
kubectl logs <pod> Muestra los logs de un pod.
kubectl exec -it <pod> -- /bin/bash Accede a una shell dentro del pod.
kubectl apply -f <archivo.yaml> Crea o actualiza recursos de forma declarativa.
kubectl delete -f <archivo.yaml> Elimina los recursos definidos en el archivo.
kubectl create deployment nginx --image=nginx Crea un deployment de forma imperativa.
kubectl get namespaces Lista todos los namespaces.
kubectl create namespace <ns> Crea un nuevo namespace.
kubectl config get-contexts Muestra los contextos configurados.
kubectl config use-context <contexto> Cambia entre contextos de clúster.
kubectl scale deployment <nombre> --replicas=<n> Escala un deployment.
kubectl set image deployment/<nombre> <contenedor>=<imagen> Actualiza la imagen de un contenedor.
kubectl top pod / kubectl top node Muestra el uso de CPU y memoria.
kubectl get events Lista los eventos recientes del clúster.
kubectl cordon <nodo> Marca un nodo como no programable.
kubectl drain <nodo> Desprograma los pods de un nodo.
kubectl uncordon <nodo> Reactiva el nodo para nuevas cargas.

Consejos prácticos

  • Usa alias k=kubectl para escribir menos.
  • Añade -n <namespace> para trabajar fuera del namespace default.
  • Prefiere apply frente a create o run en entornos reales.
  • Al depurar: combina describe, logs y events.
  • Antes de culpar al clúster, revisa tu kubeconfig y el contexto activo.

Flujo típico de trabajo

# 1. Ver qué hay
kubectl get all -n miapp

# 2. Revisar logs
kubectl logs <pod>

# 3. Entrar al contenedor
kubectl exec -it <pod> -- /bin/bash

# 4. Aplicar cambios
kubectl apply -f deployment.yaml

# 5. Ver resultados
kubectl describe deployment miapp

Lo que hay que tener presente...

  1. Curva de aprendizaje empinada Kubernetes no es “Docker elevado”. Hay conceptos complejos (control plane, API server, etcd, scheduler, controllers). No esperes que todo tenga sentido de golpe.

  2. Manifestos YAML = fuente de errores humanos Un indentado mal, un label selector incorrecto o un puerto mal mapeado pueden romper el sistema. Revisa siempre que tus spec.selector.matchLabels coincidan con template.metadata.labels.

  3. No usar latest en las imágenes La etiqueta latest cambia sin aviso. Evítala en producción.

  4. Define probes (liveness / readiness) Si no lo haces, tu aplicación puede parecer viva aunque no sirva tráfico correctamente.

  5. Requests / Limits son obligatorios Define siempre límites de CPU y memoria para evitar que un pod consuma todo un nodo.

  6. Namespaces y contexto Comprueba siempre kubectl config current-context y usa -n <namespace> para evitar confusiones.

  7. Seguridad desde el día cero

    • Activa y configura RBAC con mínimos privilegios.
    • No expongas la API del clúster a internet.
    • Gestiona secretos con cifrado y control de acceso.
    • Define securityContext y NetworkPolicies para limitar privilegios y tráfico.
    • Activa auditorías y logs.
  8. Diseña para fallar Kubernetes no elimina errores: los gestiona. Usa readinessProbes, rolling updates y PodDisruptionBudgets.

  9. Observabilidad no es opcional Métricas, logs y alertas son esenciales para entender el estado del clúster.

  10. Versiones y compatibilidad Las APIs cambian rápido. Mantén tus manifiestos y clúster actualizados.

  11. Segmentación lógica Divide por entorno (dev, staging, prod) o por equipo. Evita permisos amplios o namespaces únicos.

  12. Infraestructura declarativa / GitOps No gestiones todo a mano. Usa Terraform, Helm, ArgoCD o similares para mantener reproducibilidad y control.


📚 Referencia útil: Kubernetes kubectl Cheat Sheet (oficial)