PerfectScalePerfectScale

PerfectScale

Cheat Sheet de kubectl: trabaja con clústeres, pods, deployments y más

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

Tania Duggal
By Tania Duggal
Oct 13, 202625 min read

¡Hola! Te damos la bienvenida. Reunimos para ti los comandos más utilizados de Kubernetes en un solo cheat sheet de kubectl listo para usar. Aquí encontrarás instrucciones paso a paso para administrar tu clúster de Kubernetes con la herramienta de línea de comandos kubectl.

A continuación, un resumen rápido de los comandos más importantes. Más abajo encontrarás el cheat sheet completo.

Contexto y configuración del clúster:

  • Listar contextos: kubectl config get-contexts
  • Cambiar el contexto activo: kubectl config use-context <context-name>
  • Ver detalles del clúster: kubectl cluster-info
  • Verificar la versión: kubectl version

Deployments y gestión de aplicaciones:

  • Desplegar desde un manifiesto: kubectl apply -f <filename.yaml>
  • Eliminar recursos desde un manifiesto: kubectl delete -f <filename.yaml>
  • Escalar un deployment: kubectl scale deployment <deployment-name> --replicas=<N>
  • Verificar el estado del rollout de un deployment: kubectl rollout status deployment/<deployment-name>
  • Revertir un deployment: kubectl rollout undo deployment/<deployment-name>

Inspección y debugging:

  • Ver todos los recursos en todos los namespaces: kubectl get all -A
  • Ver el estado y los detalles de un pod: kubectl describe pod <pod-name>
  • Seguir los logs de un pod: kubectl logs -f <pod-name>
  • Ejecutar comandos dentro de un contenedor: kubectl exec -it <pod-name> -- <command>
  • Abrir una shell en un pod: kubectl exec -it <pod-name> -- /bin/bash
  • Redirigir un puerto local a un pod: kubectl port-forward <pod-name> <local-port>:<container-port>

Tips de productividad y flags:

  • Crear un alias: alias k=kubectl
  • Configurar el autocompletado: source <(kubectl completion bash)
  • Filtrar recursos por namespace: Usa el flag -n <namespace>
  • Probar cambios sin aplicarlos: kubectl apply -f <filename.yaml> --dry-run=client
  • Ver recursos en formato YAML: kubectl get pod <pod-name> -o yaml

¿Qué es kubectl?

Kubectl es la herramienta CLI de Kubernetes que te permite interactuar con tus clústeres y crear, gestionar, editar y eliminar recursos con facilidad. Se comunica con el servidor de API de Kubernetes para que puedas monitorear y controlar tus aplicaciones.

¿Cómo funciona kubectl?

Ilustración titulada Cómo funciona kubectl: un comando de kubectl se lee desde el archivo kubeconfig, se convierte en una llamada a la API REST, se autentica y se envía por HTTPS al servidor de API en el plano de control, que lo procesa y devuelve una respuesta JSON que kubectl formatea y muestra

Kubectl funciona enviando comandos al servidor de API de Kubernetes, que luego ejecuta las operaciones solicitadas dentro del clúster. Cuando ejecutas un comando de kubectl, como desplegar una aplicación o consultar el estado de los recursos, kubectl se comunica con el servidor de API por HTTP y transmite tus instrucciones. El servidor de API procesa estas solicitudes, actualiza el estado del clúster en etcd (un almacén distribuido de clave-valor) y dirige a otros componentes, como el scheduler o el controller manager, para que realicen las acciones necesarias para alcanzar el estado deseado. Esta interacción te permite gestionar y monitorear tus recursos de Kubernetes de forma eficiente desde la línea de comandos.

Nota: En versiones anteriores de Kubernetes, kubectl utilizaba generadores para crear configuraciones de recursos a partir de entradas específicas. Estos generadores permitían indicar el tipo de recurso a crear, como un Pod, un Deployment o un Job, mediante el flag --generator. Por ejemplo, kubectl run nginx --image=nginx --generator=run-pod/v1 creaba un recurso de tipo Pod. Este enfoque permitía automatizar y programar la creación de recursos con resultados predecibles. Sin embargo, es importante tener en cuenta que el flag --generator quedó obsoleto en Kubernetes v1.12 y se eliminó en la v1.18. A partir de la v1.18, kubectl run se simplificó para crear únicamente Pods, y el uso de generadores fue reemplazado por comandos más explícitos y declarativos como kubectl create y kubectl apply

Ahora sí, comencemos:

Configuración de kubectl: versión, información del clúster y autocompletado

El primer paso después de instalar kubectl es verificar que está correctamente instalado y que puede comunicarse con tu clúster. El siguiente comando muestra la versión del cliente y, si hay un clúster configurado, también la versión del servidor:

Terminal window
kubectl version

Para confirmar que kubectl está conectado al clúster correcto, usa:

Terminal window
kubectl cluster-info

Este comando muestra las direcciones del plano de control de Kubernetes y de los servicios principales. Si el comando devuelve un error, verifica que tu archivo kubeconfig esté configurado correctamente y que el clúster de destino sea accesible.

También puedes inspeccionar la configuración actual y los contextos disponibles con:

Terminal window
kubectl config get-contexts
kubectl config current-context

Si trabajas con varios clústeres, cambiar entre ellos es muy sencillo:

Terminal window
kubectl config use-context <context-name>

Al reemplazar <context-name> por el contexto deseado, se actualiza el clúster activo para todos los comandos de kubectl posteriores.

Para mejorar la productividad, habilita el autocompletado del shell. Esto permite que tu shell complete automáticamente comandos, nombres de recursos, namespaces y otros argumentos al presionar la tecla Tab. Para Bash, ejecuta:

Terminal window
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc

Para Zsh, usa:

Terminal window
echo 'source <(kubectl completion zsh)' >> ~/.zshrc
source ~/.zshrc

Un atajo útil es crear un alias para kubectl y habilitar el autocompletado para él:

Terminal window
alias k=kubectl
complete -o default -F __start_kubectl k

Si usas Zsh, reemplaza la última línea por:

Terminal window
compdef __start_kubectl k

Con la verificación de versión, la conectividad con el clúster, la gestión de contextos y el autocompletado configurados, tu entorno está listo para la administración diaria de Kubernetes.

El cheat sheet definitivo de kubectl

Anatomía de un comando de kubectl: kubectl get pods -n prod -o wide, desglosado en el programa, la acción, el recurso, el flag de namespace y el flag de salida

Flags opcionales

Kubectl ofrece flags opcionales que mejoran la salida de los comandos y la gestión de recursos. Por ejemplo:

Formatos de salida:

Salida en JSON:

Puedes usar el flag -o=json para formatear la salida del comando como JSON.

Terminal window
kubectl get pods -o=json

Salida en YAML:

Puedes usar el flag -o=yaml para formatear la salida del comando como YAML.

Terminal window
kubectl get pods -o=yaml

Salida ampliada (wide):

La opción -o=wide ofrece una salida de texto plano más detallada (por ejemplo, muestra el nombre del nodo para los pods).

Terminal window
kubectl get pods -o=wide

Para salidas más personalizadas, kubectl ofrece el flag --custom-columns, que te permite definir qué columnas mostrar.

Por ejemplo, para listar los pods con sus nombres y los nodos donde se ejecutan:

Terminal window
kubectl get pods -o=custom-columns="POD NAME:.metadata.name,NODE:.spec.nodeName"

Este comando mostrará:

POD NAME NODE
nginx-deployment-1 node-1
nginx-deployment-2 node-2

Especificar el namespace:

Por defecto, los comandos de kubectl operan dentro del namespace definido por el contexto actual. Para apuntar a un namespace específico, puedes usar el flag -n o --namespace:

Terminal window
kubectl get pods -n <namespace_name>

Para ver recursos en todos los namespaces, se usa el flag -A o --all-namespaces:

Terminal window
kubectl get pods -A

Y para establecer un namespace por defecto en el contexto actual:

Terminal window
kubectl config set-context --current --namespace=ns_name

Entrada desde archivo:

El flag -f se usa para especificar un nombre de archivo, directorio o URL al crear un recurso.

Terminal window
kubectl create -f ./file_name

Filtrado por labels:

Puedes usar el flag -l para filtrar recursos según labels específicos.

Terminal window
kubectl get pods -l name=label_name

Opción de ayuda:

Para mostrar la ayuda de los comandos de kubectl, usa el flag -h.

Terminal window
kubectl -h

Modo watch:

Puedes monitorear cambios en los recursos de forma continua con el flag --watch (o -w):

Terminal window
kubectl get pods -w

Ordenar la salida:

Puedes ordenar la salida según un campo específico con el flag --sort-by:

Terminal window
kubectl get pods --sort-by=.metadata.name

Uso de kubectl con alias

Trabajar con kubectl implica escribir comandos largos, lo que consume tiempo y puede provocar errores. Para ganar eficiencia, muchos desarrolladores crean alias para los comandos que usan con más frecuencia.

Configurar un alias básico

Terminal window
alias k=kubectl
echo 'alias k=kubectl' >> ~/.bashrc

Esto te permite usar k en lugar de kubectl.

Puedes usar el repositorio kubectl-aliases, que ofrece cientos de alias predefinidos para ejecutar comandos más rápido.

Para la gestión del clúster, contextos y configuración

La gestión del clúster abarca configurar, ver y modificar tu clúster.

Comando Descripción
kubectl cluster-info Muestra los endpoints e información básica de tu clúster de Kubernetes.
kubectl config get-contexts Lista todos los contextos definidos en tu archivo kubeconfig.
kubectl config current-context Muestra el contexto activo actual.
kubectl config use-context <context> Cambia el contexto activo al que especifiques.
kubectl config delete-context <context> Elimina un contexto de tu archivo kubeconfig.
kubectl api-versions Lista todas las versiones de API disponibles en el clúster.
kubectl api-resources Lista todos los tipos de recursos disponibles en tu clúster, con detalles de grupos de API y namespaces.
kubectl config view Muestra los detalles de configuración de tu archivo kubeconfig (clústeres, contextos, configuración de usuarios).
kubectl version Imprime la información de versión tanto del cliente kubectl como del servidor de Kubernetes.

Gestión de pods

Atajo: po

Un Pod es la unidad más pequeña de Kubernetes y representa una instancia única de un proceso en ejecución dentro de tu clúster. Puede contener uno o más contenedores que comparten almacenamiento y recursos de red.

Comando Descripción
kubectl get pods Lista todos los pods del namespace actual.
kubectl describe pod <pod-name> Muestra información detallada del pod especificado, incluyendo estado, eventos y detalles de los contenedores.
kubectl exec -it <pod-name> <command> Ejecuta el comando indicado dentro del pod especificado de forma interactiva (los flags -it habilitan el acceso a una terminal interactiva).
kubectl delete pod <pod-name> Elimina el pod especificado del clúster.
kubectl run <pod-name> --image=<image_name> Crea y ejecuta un pod con la imagen especificada.
kubectl get pod -n <namespace_name> Lista todos los pods del namespace especificado.
kubectl exec <pod-name> -c <container-name> <command> Ejecuta un comando dentro de un contenedor específico de un pod.
kubectl top pod Muestra el uso de recursos (como CPU y memoria) de los pods.
kubectl annotate pod <pod-name> <annotation> Agrega o actualiza una anotación en el pod especificado.
kubectl get pods --field-selector=status.phase=Running Lista los pods que están actualmente en fase Running filtrando por el estado del pod.
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount' Ordena la lista de pods según el número de reinicios del primer contenedor de cada pod.

Para ReplicaSets

Atajo: rs

Un ReplicaSet garantiza que se ejecute un número determinado de réplicas de un pod. La diferencia principal es que los ReplicaSets admiten selectores de labels basados en conjuntos.

Comando Descripción
kubectl get rs Lista todos los ReplicaSets del namespace actual.
kubectl get rs <replicaset_name> -o yaml Muestra la configuración del ReplicaSet especificado en formato YAML.
kubectl get rs <replicaset_name> -o json Muestra la configuración del ReplicaSet especificado en formato JSON.
kubectl describe rs <rs_name> Muestra información detallada del ReplicaSet especificado.
kubectl get rs --namespace=<ns_name> Lista todos los ReplicaSets del namespace especificado.
kubectl delete rs <rs_name> --cascade=orphan Elimina el ReplicaSet especificado pero deja en ejecución los pods que gestiona (los deja huérfanos).
kubectl delete rs <rs_name> Elimina el ReplicaSet especificado junto con todos los pods que gestiona.
kubectl scale rs <rs_name> --replicas=<count> Ajusta (escala) el número de pods gestionados por el ReplicaSet especificado a la cantidad indicada.
kubectl edit rs <rs_name> Abre la configuración del ReplicaSet en tu editor por defecto para hacer cambios en vivo.
kubectl replace -f <rs_file.yaml> Reemplaza la configuración actual del ReplicaSet por la que se indica en el archivo YAML.

Para DaemonSets

Atajo: ds

Un DaemonSet garantiza que un pod específico se ejecute en todos (o algunos) nodos del clúster. Es útil para tareas como ejecutar un agente de monitoreo en cada nodo.

Comando Descripción
kubectl get daemonset Lista todos los DaemonSets del namespace actual.
kubectl describe daemonset <ds_name> Muestra información detallada de un DaemonSet específico.
kubectl get daemonset <daemonset_name> -o yaml Muestra la configuración del DaemonSet especificado en formato YAML.
kubectl get daemonset <ds_name> -o json Muestra la configuración del DaemonSet especificado en formato JSON.
kubectl delete daemonset <ds_name> Elimina el DaemonSet especificado del clúster.
kubectl label daemonset <ds_name> <key>=<value> Agrega o actualiza un label en el DaemonSet especificado.
kubectl annotate daemonset <ds_name> <key>=<value> Agrega o actualiza una anotación en el DaemonSet especificado.
kubectl rollout status daemonset <ds_name> Verifica el estado del rollout de un DaemonSet.
kubectl rollout history daemonset <ds_name> Muestra el historial de rollouts de un DaemonSet.

Para StatefulSets

Atajo: sts

Los StatefulSets gestionan el despliegue y el escalado de pods, garantizando que cada uno tenga una identidad única y estable, además de almacenamiento persistente. Esto es importante para aplicaciones con estado.

Comando Descripción
kubectl get statefulset Lista todos los StatefulSets del namespace actual.
kubectl describe statefulset <statefulset_name> Muestra información detallada del StatefulSet especificado.
kubectl get statefulset <sts_name> -o yaml Muestra la configuración del StatefulSet especificado en formato YAML.
kubectl get statefulset <sts_name> -o json Muestra la configuración del StatefulSet especificado en formato JSON.
kubectl edit statefulset <sts_name> Abre la configuración del StatefulSet especificado en tu editor de texto por defecto para hacer cambios en vivo.
kubectl scale statefulset <sts_name> --replicas=<number> Ajusta el número de réplicas de pods gestionadas por el StatefulSet especificado a la cantidad indicada.
kubectl rollout status statefulset <statefulset_name> Verifica y muestra el estado del rollout del StatefulSet especificado.

Para Namespaces

Atajo: ns

Los namespaces permiten dividir los recursos del clúster entre varios usuarios o aplicaciones.

Comando Descripción
kubectl get namespace Lista todos los namespaces de tu clúster (los del contexto actual).
kubectl create namespace <namespace_name> Crea un nuevo namespace con el nombre especificado.
kubectl describe namespace <namespace_name> Muestra información detallada del namespace especificado.
kubectl edit namespace <namespace_name> Abre la configuración del namespace especificado en tu editor de texto por defecto para hacer ediciones en vivo.
kubectl delete namespace <namespace_name> Elimina el namespace especificado de tu clúster junto con todos los recursos que contiene.

Para Services

Atajo: svc

Un Service define un conjunto lógico de pods y una política de acceso a ellos. Permite la comunicación entre las distintas partes de tu aplicación y puede exponerla al tráfico externo.

Comando Descripción
kubectl get services Lista todos los services del namespace actual
kubectl create service <svc-type> <svc-name> --tcp=<port> Crea un nuevo service del tipo especificado (por ejemplo, clusterip, nodeport o loadbalancer) con el nombre indicado, mapeando TCP en un puerto determinado
kubectl edit service <svc-name> Abre un editor para modificar la configuración del service especificado
kubectl describe service <svc-name> Muestra información detallada del service especificado
kubectl delete service <svc-name> Elimina el service especificado del clúster
kubectl get endpoints <svc-name> Lista los endpoints (es decir, las direcciones IP de los pods) que respaldan el service especificado
kubectl expose deployment [deploy_name] Crea un service que expone el deployment especificado; los recursos que se pueden exponer incluyen pod (po), service (svc) y replicaset (rs)

Para Service Accounts

Atajo: sa

Una ServiceAccount proporciona una identidad a los procesos que se ejecutan en un pod, lo que les permite interactuar con la API de Kubernetes de forma segura.

Comando Descripción
kubectl get serviceaccounts Lista todas las service accounts del namespace actual
kubectl describe serviceaccount <sa-name> Muestra información detallada de la service account especificada
kubectl replace -f <sa.yaml> Reemplaza (actualiza) una service account con una nueva configuración
kubectl delete serviceaccount <sa_name> Elimina la service account especificada del clúster.

Para Deployments

Atajo: deploy

Un Deployment ofrece actualizaciones declarativas para pods y ReplicaSets. Puedes definir el estado deseado de tu aplicación, y el controlador del Deployment ajusta el estado real al deseado a un ritmo controlado.

Comando Descripción
kubectl get deployment Lista todos los deployments del namespace actual.
kubectl describe deployment <deployment_name> Muestra información detallada del deployment especificado
kubectl create deployment <deployment-name> --image=<img-name> Crea un nuevo deployment llamado <deployment-name> usando la imagen de contenedor especificada
kubectl edit deployment <deployment_name> Abre la configuración del deployment en tu editor de texto por defecto para editarla en vivo
kubectl scale deployment <deployment-name> --replicas=<replica-count> Ajusta el número de réplicas de pods gestionadas por el deployment a la cantidad especificada.
kubectl set image deployment/<deployment-name> <container-name>=<new-image-name> Actualiza la imagen de un contenedor específico dentro del deployment
kubectl rollout status deployment/<deployment-name> Muestra el estado actual del rollout del deployment
kubectl rollout pause deployment/<deployment-name> Pausa el proceso de rollout, impidiendo más actualizaciones hasta que se reanude
kubectl rollout resume deployment/<deployment-name> Reanuda un rollout de deployment pausado
kubectl rollout undo deployment/<deployment-name> Revierte el deployment a su revisión anterior
kubectl rollout undo deployment/<deployment-name> --to-revision=<revision-number> Revierte el deployment a un número de revisión específico
kubectl delete deployment <deployment-name> Elimina el deployment especificado junto con los pods que gestiona

Para Jobs y CronJobs

Atajo: job, cj

Un Job ejecuta uno o más pods hasta que una tarea se completa correctamente. Un CronJob crea Jobs según una programación, lo que lo hace útil para respaldos, reportes y otras tareas recurrentes.

Comando Descripción
kubectl get jobs Lista todos los Jobs del namespace actual.
kubectl describe job <job-name> Muestra información detallada del Job especificado.
kubectl create job <job-name> --image=<image-name> Crea un Job que ejecuta la imagen de contenedor especificada.
kubectl delete job <job-name> Elimina el Job especificado.
kubectl get cronjobs Lista todos los CronJobs del namespace actual.
kubectl describe cronjob <cronjob-name> Muestra información detallada del CronJob especificado.
kubectl create cronjob <cronjob-name> --image=<image-name> --schedule="<cron-expression>" Crea un CronJob con la programación especificada.
kubectl create job --from=cronjob/<cronjob-name> <job-name> Crea un Job único a partir de un CronJob existente.
kubectl patch cronjob <cronjob-name> -p '{"spec":{"suspend":true}}' Suspende las ejecuciones futuras del CronJob.
kubectl delete cronjob <cronjob-name> Elimina el CronJob especificado.

Para Horizontal Pod Autoscalers

Atajo: hpa

Un Horizontal Pod Autoscaler (HPA) ajusta automáticamente el número de réplicas de pods según métricas como el uso de CPU o memoria.

Comando Descripción
kubectl get hpa Lista todos los Horizontal Pod Autoscalers.
kubectl describe hpa <hpa-name> Muestra información detallada del HPA especificado.
kubectl autoscale deployment <deployment-name> --cpu-percent=<target> --min=<min> --max=<max> Crea un HPA para el deployment especificado.
kubectl edit hpa <hpa-name> Abre la configuración del HPA para editarla en vivo.
kubectl delete hpa <hpa-name> Elimina el HPA especificado.
kubectl get hpa -w Observa las métricas y los eventos de escalado del HPA en tiempo real.
kubectl top pods Muestra el uso de recursos de los pods que utiliza el Metrics Server.
kubectl top nodes Muestra el uso de CPU y memoria de los nodos.

Para RBAC y verificación de permisos

El control de acceso basado en roles (RBAC) determina qué usuarios y service accounts pueden acceder a los recursos de Kubernetes.

Comando Descripción
kubectl get roles Lista todos los Roles del namespace actual.
kubectl get rolebindings Lista todos los RoleBindings del namespace actual.
kubectl get clusterroles Lista todos los ClusterRoles.
kubectl get clusterrolebindings Lista todos los ClusterRoleBindings.
kubectl describe role <role-name> Muestra información detallada del Role especificado.
kubectl describe clusterrole <clusterrole-name> Muestra información detallada del ClusterRole especificado.
kubectl auth can-i <verb> <resource> Verifica si el usuario actual puede realizar una acción sobre un recurso.
kubectl auth can-i <verb> <resource> --as=<user> Verifica los permisos de otro usuario.
kubectl auth can-i --list Lista todos los permisos disponibles para el usuario actual.

Para recursos Ingress

Atajo: ing

Un Ingress gestiona el acceso externo por HTTP y HTTPS a los services de un clúster de Kubernetes. Normalmente requiere un controlador de Ingress.

Comando Descripción
kubectl get ingress Lista todos los recursos Ingress del namespace actual.
kubectl describe ingress <ingress-name> Muestra información detallada del Ingress especificado.
kubectl create ingress <ingress-name> --rule="<host>/<path>=<service>:<port>" Crea un Ingress con una regla de enrutamiento.
kubectl edit ingress <ingress-name> Abre la configuración del Ingress para editarla en vivo.
kubectl delete ingress <ingress-name> Elimina el Ingress especificado.
kubectl get ingress -A Lista los recursos Ingress de todos los namespaces.
kubectl get ingress <ingress-name> -o yaml Muestra la configuración del Ingress en formato YAML.

Para debugging avanzado

Estos comandos ayudan a diagnosticar problemas de aplicaciones, redes y recursos en un clúster de Kubernetes.

Comando Descripción
kubectl logs <pod-name> Muestra los logs del pod especificado.
kubectl logs <pod-name> -c <container-name> Muestra los logs de un contenedor específico en un pod con varios contenedores.
kubectl logs -f <pod-name> Muestra en tiempo real los logs del pod especificado.
kubectl logs <pod-name> --previous Muestra los logs de la instancia anterior de un contenedor que falló.
kubectl exec -it <pod-name> -- /bin/sh Abre una shell interactiva dentro de un contenedor en ejecución.
kubectl port-forward pod/<pod-name> <local-port>:<pod-port> Redirige un puerto local a un pod para hacer debugging.
kubectl debug <pod-name> -it --image=busybox Crea un contenedor efímero de debugging asociado al pod especificado.
kubectl get events --sort-by=.metadata.creationTimestamp Lista los eventos del clúster en orden cronológico.
kubectl describe node <node-name> Muestra las condiciones del nodo, los recursos asignados y los eventos recientes.
kubectl cp <pod-name>:<remote-path> <local-path> Copia archivos de un pod a la máquina local.

Para eventos

Atajo: ev

Los eventos son registros de lo que ocurrió en tu clúster, como creaciones o eliminaciones de pods, o errores.

Comando Descripción
kubectl get events Lista todos los eventos del namespace actual
kubectl get events --field-selector type!=Normal Muestra los eventos que no son de tipo Normal
kubectl get events --field-selector type=Warning Filtra y muestra solo los eventos de tipo Warning
kubectl get events -w Observa los eventos nuevos en tiempo real
kubectl get events --field-selector involvedObject.name=<object_name> Muestra los eventos relacionados con un objeto específico, como un pod o un nodo

Logs

Los logs son la salida de tus aplicaciones en ejecución y de los componentes del sistema.

Comando Descripción
kubectl logs <pod_name> Recupera y muestra los logs del contenedor principal del pod especificado
kubectl logs -f <pod_name> Muestra en tiempo real los logs del pod especificado
kubectl logs --since=6h <pod_name> Muestra los logs del pod especificado generados en las últimas 6 horas
kubectl logs --tail=50 <pod_name> Muestra las últimas 50 líneas de logs del pod especificado
kubectl logs -f <pod_name> -c <container_name> Muestra en tiempo real los logs de un contenedor específico dentro de un pod
kubectl logs <pod_name> > podfile.log Guarda los logs de un pod en un archivo llamado podfile.log
kubectl logs --previous <pod_name> Muestra los logs de la instancia anterior de un contenedor en el pod especificado

Para Secrets y ConfigMaps

Atajo para ConfigMaps: cm

Los Secrets almacenan información sensible como contraseñas o claves, mientras que los ConfigMaps guardan datos de configuración no sensibles. Ambos te permiten desacoplar los artefactos de configuración del contenido de la imagen para mantener tus aplicaciones portables.

Comando Descripción
kubectl get secrets Lista todos los secrets del namespace actual
kubectl get configmaps Lista todos los ConfigMaps del namespace actual
kubectl describe secret <secret-name> Muestra información detallada del secret especificado
kubectl delete secret <secret-name> Elimina el secret especificado del clúster
kubectl describe configmap <configmap-name> Muestra información detallada del ConfigMap especificado
kubectl create configmap <config-map-name> --from-file=<path-to-file> Crea un nuevo ConfigMap con el nombre indicado usando el contenido del archivo especificado
kubectl create secret <secret-type> <secret-name> --from-literal=key=value Crea un nuevo secret del tipo especificado usando un par clave-valor

Para la gestión de nodos

Atajo: no

Un Node es una máquina de trabajo (worker) en Kubernetes.

Comando Descripción
kubectl get nodes Lista todos los nodos de tu clúster
kubectl describe node <node-name> Muestra información detallada del nodo especificado
kubectl drain <node-name> Prepara el nodo para mantenimiento desalojando todos los pods y marcándolo como no programable
kubectl uncordon <node-name> Marca un nodo previamente acordonado (no programable) como programable de nuevo, permitiendo que se programen nuevos pods en él
kubectl label node <node_name> <key>=<value> Agrega o actualiza un label en el nodo especificado
kubectl cordon <node_name> Marca el nodo especificado como no programable
kubectl taint node <node_name> <key>=<value>:<taint-effect> Aplica un taint al nodo especificado
kubectl top node <node_name> Muestra métricas de uso de recursos (como CPU y memoria) del nodo especificado
kubectl annotate node <node_name> <key>=<value> Agrega o actualiza una anotación en el nodo especificado

Para almacenamiento (PV, PVC)

Atajo para Persistent Volume: pv

Atajo para Persistent Volume Claim: pvc

Los PersistentVolumes son recursos de almacenamiento en tu clúster, y los PersistentVolumeClaims son solicitudes de almacenamiento por parte de los usuarios.

Comando Descripción
kubectl get pv Lista todos los Persistent Volumes del clúster
kubectl describe pv <pv-name> Muestra información detallada de un Persistent Volume específico
kubectl get pvc Lista todos los Persistent Volume Claims del namespace actual
kubectl describe pvc <pvc-name> Muestra información detallada de un Persistent Volume Claim específico

Para copiar archivos y directorios

Puedes transferir archivos entre tu sistema local y el contenedor de un pod, lo que resulta útil para el debugging o el respaldo de datos.

Comando Descripción
kubectl cp <local-path> <namespace>/<pod-name>:<container-path> Copia un archivo o directorio desde tu máquina local a un contenedor del pod y namespace especificados.
kubectl cp <source-pod-name>:<source-container-path> <local-path> -n <namespace> Copia un archivo o directorio desde un contenedor dentro de un pod (en el namespace indicado) a tu máquina local.
kubectl cp <local-path> <destination-namespace>/<destination-pod-name>:<destination-container-path> Copia un archivo o directorio desde tu máquina local al pod y namespace de destino.

Para la verbosidad de la salida y el debugging

La verbosidad se refiere al nivel de detalle incluido en los logs generados por componentes como kubectl y kubelet. Puedes ajustar la verbosidad de los comandos de kubectl.

Comando Descripción
kubectl get <resource-type> --v=<verbosity-level> Esta es la forma general para establecer el nivel de verbosidad. Le indica a kubectl cuánta información de debugging incluir al ejecutar el comando sobre el tipo de recurso especificado.
kubectl get <resource-type> --v=0 Ejecuta el comando con una salida de debugging mínima (el nivel por defecto).
kubectl get <resource-type> --v=7 Ofrece un nivel de verbosidad mayor, en el que se imprime información adicional de debugging, incluidos los encabezados de las solicitudes HTTPS enviadas por el cliente.
kubectl get <resource-type> --v=8 Aumenta aún más la verbosidad. En el nivel 8 también se muestra el contenido de las solicitudes y respuestas HTTP (datos del cuerpo).

Preguntas frecuentes

¿Qué es kubectl? kubectl es la herramienta de línea de comandos de Kubernetes. Envía tus comandos al servidor de API de Kubernetes, que ejecuta la solicitud en el clúster, para que puedas crear, gestionar, editar y eliminar recursos, además de monitorear tus aplicaciones.

¿Cómo cambio de clúster con kubectl? Ejecuta kubectl config get-contexts para listar los contextos de tu archivo kubeconfig y luego kubectl config use-context <context-name> para activar uno. A partir de ahí, todos los comandos de kubectl se ejecutan contra ese clúster.

¿Cómo puedo listar los pods de todos los namespaces? Agrega el flag -A (o --all-namespaces), por ejemplo kubectl get pods -A. Si quieres apuntar a un solo namespace, usa -n <namespace_name>.

¿Cómo veo los logs de un contenedor que falló? Ejecuta kubectl logs <pod-name> --previous para ver los logs de la instancia anterior del contenedor. Agrega -c <container-name> si el pod tiene más de un contenedor.

¿Cómo revierto un deployment? Ejecuta kubectl rollout undo deployment/<deployment-name> para volver a la revisión anterior. Para elegir una revisión específica, agrega --to-revision=<revision-number>.

¿Cómo configuro un alias de kubectl y el autocompletado? Ejecuta alias k=kubectl para usar k en lugar de kubectl, y agrégalo a tu ~/.bashrc para conservarlo. Para el autocompletado en Bash, agrega source <(kubectl completion bash) a tu ~/.bashrc. El cheat sheet también cubre Zsh.

Reduce hasta un 50% tus costos en la nube con PerfectScale

PerfectScale es una herramienta potente diseñada para integrarse a la perfección con Kubernetes. Al incorporar PerfectScale a tu entorno de Kubernetes, puedes simplificar y optimizar la orquestación de tus contenedores. Esta integración mejora la eficiencia en la gestión de tus clústeres, lo que te permite asignar recursos de forma más efectiva, reducir los costos operativos y mejorar la estabilidad y la resiliencia general de tus aplicaciones. Los insights impulsados por IA de PerfectScale brindan una visibilidad completa del rendimiento de tu sistema, lo que permite hacer ajustes proactivos para responder a demandas dinámicas. Esto significa que puedes garantizar el máximo rendimiento mientras reduces los costos hasta en un 50% gracias a acciones autónomas basadas en datos que optimizan continuamente cada capa de tu stack de Kubernetes. Para comprobar de primera mano los beneficios de PerfectScale, agenda una demo y comienza una prueba gratuita hoy mismo.