
En el centro del kit de herramientas de cualquier administrador de Kubernetes está kubectl: la potente interfaz de línea de comandos diseñada para gestionar clústeres de Kubernetes de forma eficiente.
Kubectl (se pronuncia "kube-control" o "kube-C-T-L") es tu canal directo de comunicación con el servidor API de Kubernetes y te permite desplegar aplicaciones, inspeccionar recursos, ver logs y ejecutar prácticamente cualquier operación dentro de tu clúster. Ya sea que trabajes como ingeniero DevOps, administrador de plataforma o desarrollador con aplicaciones en contenedores, dominar kubectl es clave para una gestión eficaz de Kubernetes en cloud computing.
Este práctico cheat sheet reúne los comandos de kubectl más útiles, con ejemplos prácticos y consejos para llevar tus tareas diarias en Kubernetes al siguiente nivel.
¿Cuáles son las categorías principales de comandos de kubectl?
Logo de Kubectl
Los comandos de kubectl pueden agruparse en tres categorías principales, cada una enfocada en un aspecto distinto de la gestión del clúster:
1. Comandos de información del clúster
Los comandos de información del clúster te dan visibilidad sobre el estado y la configuración de tu clúster de Kubernetes:
- Obtener información sobre los componentes del clúster
- Ver el estado y los recursos de los nodos
- Verificar el estado del apiserver
- Inspeccionar los componentes del control plane
2. Comandos de gestión de recursos
Los comandos de gestión de recursos te permiten crear, modificar, eliminar e inspeccionar recursos de Kubernetes:
- Crear y actualizar recursos
- Listar y describir recursos
- Eliminar recursos
- Escalar recursos hacia arriba y hacia abajo
- Editar recursos en tiempo real
3. Comandos de despliegue de aplicaciones
Por último, los comandos de despliegue facilitan el deploy y la gestión del ciclo de vida de la aplicación:
- Desplegar aplicaciones desde YAML o JSON
- Gestionar deployments y rollouts
- Configurar el autoescalado
- Actualizar configuraciones de aplicaciones
- Manejar la red de aplicaciones
Con estas tres categorías en mente, veamos de cerca algunos comandos específicos de kubectl que vas a usar con frecuencia en tu camino con Kubernetes.
A fondo: cheat sheet de comandos de kubectl
persona programando en laptop
A continuación encontrarás un cheat sheet para tener a la mano con los comandos de kubectl que probablemente uses a diario, con ejemplos para agilizar tus flujos de trabajo en Kubernetes.
Pods
Los Pods son las unidades desplegables más pequeñas en Kubernetes y están formados por uno o más contenedores que comparten recursos de almacenamiento y red.
Listar todos los pods:
kubectl get pods
Listar pods con más detalle:
kubectl get pods -o wide
Obtener información detallada de un pod específico:
kubectl describe pod
Crear un pod desde un archivo YAML:
kubectl apply -f pod.yaml
Eliminar un pod:
kubectl delete pod
Ejecutar un comando dentro del contenedor de un pod:
kubectl exec -it --
Obtener los logs de un pod:
kubectl logs
Ver los logs de un pod en tiempo real:
kubectl logs -f
Obtener los logs de un contenedor específico en un pod multi-contenedor:
kubectl logs -c
Hacer port-forward a un pod:
kubectl port-forward :
Copiar archivos hacia o desde un pod:
kubectl cp :/path/to/file /local/path
kubectl cp /local/path :/path/in/pod
Services
Los Services proporcionan una red estable para los pods y, al actuar como capa de abstracción, facilitan la comunicación entre los distintos componentes.
Listar todos los services:
kubectl get services
Obtener información detallada de un service:
kubectl describe service
Crear un service desde un archivo YAML:
kubectl apply -f service.yaml
Exponer un deployment como service:
kubectl expose deployment --port= --target-port=
Eliminar un service:
kubectl delete service
Ver los endpoints asociados a un service:
kubectl get endpoints
Crear un service ClusterIP:
kubectl create service clusterip --tcp=:
Crear un service NodePort:
kubectl create service nodeport --tcp=:
Crear un service LoadBalancer:
kubectl create service loadbalancer --tcp=:
Deployments
Los Deployments ofrecen actualizaciones declarativas para Pods y ReplicaSets, lo que permite escalar y actualizar aplicaciones con facilidad.
Listar todos los deployments:
kubectl get deployments
Obtener información detallada de un deployment:
kubectl describe deployment
Crear un deployment desde un archivo YAML:
kubectl apply -f deployment.yaml
Crear un deployment directamente desde la línea de comandos:
kubectl create deployment --image=
Escalar un deployment:
kubectl scale deployment --replicas=
Actualizar la imagen de contenedor de un deployment:
kubectl set image deployment/ =
Hacer rollback de un deployment a una revisión anterior:
kubectl rollout undo deployment/
Ver el estado del rollout de un deployment:
kubectl rollout status deployment/
Ver el historial de rollouts de un deployment:
kubectl rollout history deployment/
Pausar el rollout de un deployment:
kubectl rollout pause deployment/
Reanudar el rollout de un deployment:
kubectl rollout resume deployment/
ConfigMaps y Secrets
Los ConfigMaps y los Secrets se usan para almacenar datos de configuración e información sensible, respectivamente.
Nota importante de seguridad: tanto los ConfigMaps como los Secrets se almacenan en etcd sin cifrar por defecto, así que conviene habilitar el cifrado en reposo si se manejan datos sensibles.
Listar ConfigMaps:
kubectl get configmaps
Crear un ConfigMap a partir de valores literales:
kubectl create configmap --from-literal=key1=value1 --from-literal=key2=value2
Crear un ConfigMap a partir de un archivo:
kubectl create configmap --from-file=
Obtener información detallada de un ConfigMap:
kubectl describe configmap
Eliminar un ConfigMap:
kubectl delete configmap
Listar Secrets:
kubectl get Secrets
Crear un Secret a partir de valores literales:
kubectl create secret generic --from-literal=key1=value1 --from-literal=key2=value2
Crear un Secret a partir de un archivo:
kubectl create secret generic --from-file=
Obtener información detallada de un Secret:
kubectl describe secret
Eliminar un Secret:
kubectl delete secret
Tips de experto para usar kubectl
persona mirando el celular mientras programa
La herramienta de línea de comandos kubectl es indispensable para trabajar con clústeres de Kubernetes y gestionar sus recursos. Dominarla te facilita mucho la vida: te ayuda a desplegar, escalar y resolver problemas de manera más eficiente. Con kubectl edit puedes modificar al vuelo recursos como pods y deployments directamente desde la línea de comandos.
Saca el máximo provecho de los namespaces
Los Namespaces son una funcionalidad clave de Kubernetes que te permite dividir tu clúster en sub-clústeres virtuales. Resultan muy útiles en entornos multi-tenant o cuando manejas aplicaciones más complejas.
Listar recursos en un namespace específico:
kubectl get -n
Crear un recurso en un namespace específico:
kubectl apply -f <file.yaml> -n
Definir el namespace por defecto para todos los comandos de kubectl:
kubectl config set-context --current --namespace=
Ver recursos en todos los namespaces:
kubectl get --all-namespaces
Crear un nuevo namespace:
kubectl create namespace
Conviene agrupar recursos relacionados en sus propios namespaces para marcar límites claros entre aplicaciones o equipos. Usa nombres que dejen clara su finalidad, como dev-frontend, prod-backend o monitoring.
Selectores de etiquetas para filtrar recursos
Las Labels son pares clave-valor que se asignan a los objetos de Kubernetes. Son una excelente forma de organizar, seleccionar y gestionar grupos de recursos con mayor facilidad.
Listar recursos con una label específica:
kubectl get -l key=value
Listar recursos con múltiples condiciones de label:
kubectl get -l ‘key1=value1,key2=value2’
Listar recursos que tengan una clave de label específica (sin importar el valor):
kubectl get -l ‘key’
Listar recursos que no tengan una label específica:
kubectl get -l ‘!key’
Agregar una label a un recurso existente:
kubectl label key=value
Eliminar una label de un recurso:
kubectl label key-
Una estrategia de etiquetado consistente es clave para gestionar tus recursos de forma eficaz. Prueba con labels como app, environment, tier, version y owner para armar un sistema claro y ordenado.
Implementa rolling updates
Kubernetes facilita actualizar aplicaciones sin tiempo de inactividad mediante rolling updates. Esta estrategia reemplaza de forma gradual las instancias de la versión anterior por la nueva.
Actualizar un deployment con una nueva imagen (dispara un rolling update):
kubectl set image deployment/ =:
Verificar el estado del rollout:
kubectl rollout status deployment/
Configurar la estrategia de actualización en el YAML del deployment:
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
Volver a la versión anterior si se detectan problemas:
kubectl rollout undo deployment/
Pausar el rollout de un deployment:
Copykubectl rollout pause deployment/
Esto resulta especialmente útil para despliegues por etapas: te permite liberar la nueva versión a un subconjunto de pods, validar su funcionamiento y luego continuar con el rollout.
Reanudar el rollout de un deployment:
Copykubectl rollout resume deployment/
Para aplicaciones críticas, prueba la flag --record al hacer cambios en el deployment. Agrega una nota con el comando que usaste, así puedes rastrear el historial de cambios más adelante:
kubectl apply -f deployment.yaml --record
Maneja con cuidado las cuotas y los límites de recursos
La gestión de recursos cumple un rol clave en la administración de Kubernetes. Definir las requests y limits adecuados es fundamental para mantener el clúster estable y asegurar un uso justo de los recursos.
Ver las cuotas de recursos en un namespace:
kubectl get resourcequota -n
Crear una cuota de recursos para un namespace:
kubectl create quota --hard=cpu=1,memory=1G,pods=10 -n
Verificar el uso de recursos de los pods:
kubectl top pods
Verificar el uso de recursos de los nodos:
kubectl top nodes
Al definir las especificaciones de los contenedores, define siempre resource requests y limits:
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Recuerda que las requests ayudan al scheduler a decidir dónde colocar tu pod, mientras que los limits marcan el uso máximo antes de que los contenedores puedan ser terminados. Una buena regla general: define las requests según el uso esperado en estado estable y los limits según lo aceptable en picos de uso.
Domina el debugging con kubectl
El debugging es clave para mantener tus aplicaciones de Kubernetes funcionando sin problemas. Por suerte, kubectl trae muchos comandos para resolver problemas con facilidad.
Obtener los logs de un contenedor:
kubectl logs -c
Debugging interactivo con un pod temporal:
kubectl run debug --rm -it --image=busybox -- sh
Crear un contenedor de debug adjunto a un pod existente:
kubectl debug -it --image=busybox --share-processes --copy-to=
Ver los eventos de un namespace:
kubectl get events -n
Verificar las condiciones y los detalles de estado de un pod:
Copykubectl describe pod
Esto entrega un resultado más estructurado de las condiciones del pod, mostrando todo el historial de transiciones y el estado actual en un formato fácil de leer.
Verificar la conectividad entre pods con un contenedor de debug de red:
kubectl run test-connectivity --rm -it --image=nicolaka/netshoot -- bash
Para problemas persistentes, considera usar la flag -- previous para revisar los logs de contenedores que se cayeron previamente:
kubectl logs --previous
Buenas prácticas de seguridad con kubectl
dos personas programando en laptop
Mantener tu clúster de Kubernetes seguro es fundamental, y kubectl cumple un rol clave en eso. Aquí van algunas buenas prácticas para que tengas la seguridad bajo control:
Gestiona los controles de acceso con RBAC
El Role-Based Access Control (RBAC) es el estándar para la autorización en Kubernetes. Te permite definir permisos detallados para usuarios y service accounts.
Ver los roles de un namespace:
kubectl get roles -n
Ver los cluster roles:
kubectl get clusterroles
Ver los role bindings:
kubectl get rolebindings -n
Ver los cluster role bindings:
kubectl get clusterrolebindings
Crear un role con permisos específicos:
kubectl create role developer --verb=get,list,watch --resource=pods,deployments -n
Vincular un role a un usuario:
kubectl create rolebinding dev-user-binding --role=developer --user=dev-user -n
Siempre que sea posible, usa RoleBindings en lugar de ClusterRoleBindings para limitar los permisos a un namespace específico. Así sigues el principio de mínimo privilegio al acotar el acceso solo a los namespaces que lo necesitan, lo que reduce el impacto si las credenciales se ven comprometidas.
Apégate al principio de mínimo privilegio: dales a los usuarios y service accounts solo los permisos que necesitan para hacer su trabajo. Hazte el hábito de revisar con regularidad los role bindings para asegurarte de que sigan teniendo sentido a medida que cambian los roles y las responsabilidades.
Manejo seguro de Secrets
Los Kubernetes Secrets deben manejarse con cuidado, ya que contienen información sensible como API keys, contraseñas y certificados.
Crear un secret de forma segura desde un archivo:
kubectl create secret generic db-credentials --from-file=./username.txt --from-file=./password.txt
Crear un secret TLS:
kubectl create secret tls tls-secret --cert=path/to/cert --key=path/to/key
Montar Secrets como variables de entorno:
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-credentials
key: password
Montar Secrets como archivos:
volumes:
- name: secret-volume
secret:
secretName: ssl-certificates
Considera usar herramientas externas de gestión de secrets como HashiCorp Vault, AWS Secrets Manager o Sealed Secrets para reforzar la seguridad. Ofrecen funciones útiles como rotación de secrets, registros de auditoría y cifrado.
Usa kubectl con un contexto seguro
Asegúrate siempre de estar trabajando en el contexto correcto para evitar modificar por error el clúster equivocado.
Ver todos los contextos disponibles:
kubectl config get-contexts
Cambiar a un contexto específico:
kubectl config use-context
Ver el contexto actual:
kubectl config current-context
Definir el namespace para el contexto actual:
kubectl config set-context --current --namespace=
En entornos productivos críticos, conviene apoyarse en señales visuales, como prompts de shell, que muestren el clúster y namespace actuales. Así te evitas acciones accidentales sobre los recursos equivocados.
Usa network policies
Las Network Policies funcionan como firewalls dentro de tu clúster de Kubernetes y controlan la comunicación entre pods.
Listar las network policies:
kubectl get networkpolicies
Crear una network policy que niegue todo el tráfico de ingress por defecto:
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
EOF
Crear una network policy que permita tráfico específico:
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
spec:
podSelector:
matchLabels:
app: backend
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- port: 8080
EOF
Empieza con una network policy de "deny-all" como base y luego permite solo el tráfico que realmente necesitas. Así te apegas al principio de mínimo privilegio y mantienes la superficie de ataque lo más reducida posible.
Domina la gestión de Kubernetes con estos comandos de kubectl y buenas prácticas
Kubectl es una herramienta indispensable en el universo de los comandos de Kubernetes y funciona como tu interfaz principal para gestionar y trabajar con clústeres. Al aprender estos comandos y aplicar las buenas prácticas de este cheat sheet, estarás listo para enfrentar los desafíos de las aplicaciones en contenedores con total confianza.
Ten presente que Kubernetes evoluciona constantemente, y kubectl también. Mantente al día con las nuevas funciones y actualizaciones para seguir mejorando tus habilidades de gestión de clústeres.
Si quieres profundizar en temas más avanzados, como la expansión de los rangos de IP de los services de Kubernetes, revisa nuestra guía detallada sobre cómo expandir rangos de IP de services sin complicaciones.
A medida que tu setup de Kubernetes crece y se vuelve más complejo, contar con las herramientas y el conocimiento adecuados se vuelve aún más importante. Ahí entra DoiT. Nuestro equipo global de cloud architects se especializa en ayudar a las empresas a construir infraestructuras cloud eficientes en costos, escalables y resilientes. Estamos para ayudarte a resolver desafíos complejos de configuración e integración de Kubernetes, además de hacer troubleshooting y mejorar la eficiencia operativa.
Conversa con nosotros y descubre cómo podemos ayudarte a optimizar tu estrategia de orquestación de contenedores para lograr mejor rendimiento y ahorro en costos.