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=kubectlpara escribir menos. - Añade
-n <namespace>para trabajar fuera del namespacedefault. - Prefiere
applyfrente acreateorunen entornos reales. - Al depurar: combina
describe,logsyevents. - Antes de culpar al clúster, revisa tu
kubeconfigy 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...
-
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.
-
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.matchLabelscoincidan contemplate.metadata.labels. -
No usar
latesten las imágenes La etiquetalatestcambia sin aviso. Evítala en producción. -
Define probes (liveness / readiness) Si no lo haces, tu aplicación puede parecer viva aunque no sirva tráfico correctamente.
-
Requests / Limits son obligatorios Define siempre límites de CPU y memoria para evitar que un pod consuma todo un nodo.
-
Namespaces y contexto Comprueba siempre
kubectl config current-contexty usa-n <namespace>para evitar confusiones. -
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
securityContextyNetworkPoliciespara limitar privilegios y tráfico. - Activa auditorías y logs.
-
Diseña para fallar Kubernetes no elimina errores: los gestiona. Usa
readinessProbes, rolling updates y PodDisruptionBudgets. -
Observabilidad no es opcional Métricas, logs y alertas son esenciales para entender el estado del clúster.
-
Versiones y compatibilidad Las APIs cambian rápido. Mantén tus manifiestos y clúster actualizados.
-
Segmentación lógica Divide por entorno (dev, staging, prod) o por equipo. Evita permisos amplios o namespaces únicos.
-
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)