Qué es kubectl y cómo usarlo en Kubernetes

Autor: Publicado

En resumen: kubectl es una herramienta de línea de comandos para trabajar con Kubernetes, un sistema que gestiona aplicaciones ejecutadas en contenedores. Permite comprobar el estado de las aplicaciones, desplegar cambios, consultar registros y gestionar los recursos del clúster. No es el propio Kubernetes ni crea automáticamente un entorno donde ejecutar aplicaciones: necesita acceso a un clúster existente.

Cómo trabaja kubectl con Kubernetes

Un clúster de Kubernetes es un entorno compuesto por máquinas, llamadas nodos, y componentes que gestionan la ejecución de las aplicaciones. Un contenedor permite empaquetar una aplicación junto con sus dependencias. Kubernetes ejecuta los contenedores en unidades llamadas Pods; un Pod puede contener uno o varios contenedores que trabajan juntos.

kubectl se ejecuta en el ordenador del administrador o del desarrollador, o en un sistema que automatiza los despliegues. Envía solicitudes al servidor de la API de Kubernetes, el punto de comunicación que permite consultar y modificar los recursos del clúster. No controla directamente cada contenedor: son los componentes de Kubernetes los que realizan las acciones necesarias para alcanzar el estado indicado.

Por ejemplo, si indicas que deben mantenerse tres copias de una aplicación, kubectl enviará esa configuración a la API. A continuación, Kubernetes procurará que las copias solicitadas estén en ejecución. Puedes cerrar el terminal: el funcionamiento de la aplicación no depende de que el proceso de kubectl siga activo.

Qué necesitas para empezar

Instalar kubectl no basta. Necesitas un clúster y permisos para utilizarlo. Puede ser un entorno local de pruebas, creado por ejemplo con kind o minikube, o un clúster proporcionado por tu empresa o por un proveedor de servicios en la nube.

Los datos de conexión suelen estar en el archivo kubeconfig. Este contiene las direcciones de los clústeres, la configuración de autenticación o referencias a mecanismos de inicio de sesión, y los contextos. Un contexto indica con qué clúster trabajas y qué usuario utilizas; también puede especificar el espacio de nombres predeterminado. Un espacio de nombres, o namespace, agrupa recursos dentro del clúster.

La ubicación predeterminada de la configuración es $HOME/.kube/config, pero puedes indicar otro archivo. Antes de empezar, comprueba el cliente y la conexión activa:

kubectl version --client
kubectl config current-context
kubectl cluster-info

El primer comando comprueba la versión de la herramienta local, sin confirmar el acceso al clúster. El segundo muestra el contexto seleccionado y el tercero intenta obtener información sobre el clúster. Los errores pueden deberse a la falta de configuración, a problemas de red, a una sesión caducada o a permisos insuficientes.

Consulta en la documentación oficial de Kubernetes el procedimiento de instalación y las diferencias de versión admitidas entre cliente y servidor. En un entorno empresarial, sigue también las instrucciones del administrador para iniciar sesión.

Comandos básicos para comprobar aplicaciones

Los comandos suelen tener la forma kubectl verbo tipo-de-recurso nombre. Las opciones permiten, entre otras cosas, elegir el espacio de nombres y el formato de salida. Para empezar, las operaciones de consulta son las más útiles:

ComandoUso
kubectl get pods -n testLista los Pods del espacio de nombres prueba y muestra su estado básico.
kubectl describe pod NOMBRE -n testMuestra los detalles del Pod y los eventos útiles para el diagnóstico.
kubectl logs NOMBRE -n testMuestra los registros del contenedor del Pod indicado.
kubectl get deployments -n testMuestra el estado de los recursos que gestionan las copias de la aplicación.

Sustituye NOMBRE por el nombre real del Pod. Si el Pod tiene varios contenedores, puede que necesites la opción -c NOMBRE_CONTENEDOR para consultar los registros.

Supongamos que una aplicación no responde después de desplegarla. Empieza por get pods para comprobar si sus Pods están en ejecución. Después, utiliza describe y busca eventos relacionados, por ejemplo, con la descarga de la imagen o el arranque del contenedor. A continuación, consulta los registros de la aplicación. El estado del Pod por sí solo no siempre basta para determinar la causa del problema.

Cómo desplegar cambios con un archivo YAML

kubectl puede crear recursos mediante comandos individuales, pero la configuración de una aplicación suele guardarse en un manifiesto: un archivo que describe el estado deseado de los recursos. El formato más habitual es YAML. Puedes guardar este archivo en un repositorio y revisar sus cambios antes del despliegue.

El siguiente manifiesto crea un Deployment, un recurso que mantiene un número determinado de copias de la aplicación y gestiona sus actualizaciones:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: nginx
          image: nginx:stable

Guárdalo como deployment.yaml. En un clúster de pruebas, puedes aplicar la configuración y comprobar el progreso:

kubectl apply -f deployment.yaml
kubectl rollout status deployment/demo
kubectl get pods -l app=demo

El ejemplo ejecuta un servidor nginx, pero no lo hace accesible automáticamente desde internet. El acceso por red requiere configuración adicional, a menudo un recurso Service que dirige el tráfico a los Pods. La ejecución del ejemplo también depende de que se pueda descargar la imagen y de los recursos disponibles en el clúster.

Cómo evitar cambios en el entorno equivocado

kubectl puede trabajar tanto con entornos de pruebas como de producción. Antes de realizar una operación que modifique recursos, comprueba el contexto y el espacio de nombres. Puedes indicarlos explícitamente con las opciones --context y -n, en lugar de depender de los valores predeterminados.

Antes de aplicar un manifiesto, resulta útil usar kubectl diff -f deployment.yaml, que muestra las diferencias respecto a los recursos existentes, y kubectl apply --dry-run=server -f deployment.yaml, que envía una solicitud de prueba sin guardar el cambio. Sin embargo, ninguno garantiza que la aplicación funcione correctamente después del despliegue.

El comando delete elimina recursos y puede interrumpir el funcionamiento de la aplicación. Trata kubeconfig como un archivo sensible: no lo publiques en un repositorio ni utilices configuraciones de fuentes no fiables. Haz tus primeros ejercicios en un clúster de pruebas, empezando por comprobar el contexto y consultar el estado de los Pods.

Consulta también: ¿Qué es FTP?

Lee también

Descubre cómo PHP-FPM atiende peticiones PHP, en qué se diferencia de un servidor web y cómo ajustar sus procesos al tráfico y los recursos.
Conoce BIND, el software abierto de servidor DNS: sus funciones, cómo gestiona dominios y cuándo conviene instalarlo por tu cuenta.
Descubre qué son el registro REGON de Polonia y su número, en qué se diferencian de NIP y KRS y cómo verificar los datos de una empresa.