Comandos Kubectl más utilizados para Administrar un Clústeres de Kubernetes

Published:

Kubectl es una utilidad de línea de comandos en Kubernetes que se utiliza para ejecutar comandos en clústeres Kubernetes. Puedes utilizarlo para realizar una amplia variedad de tareas, como implementar aplicaciones/microservicios, ver y gestionar recursos, inspeccionar archivos de registro y mucho más.

En este tutorial, mostraré los comandos de kubectl que utilizo para administrar un clúster Kubernetes (K8S).

Nota: estoy utilizando Minikube en Ubuntu 22.04 como nuestro clúster Kubernetes local.

Creación de Objetos/Recursos Kubernetes:

En Kubernetes, los objetos son entidades persistentes que aseguran que tu clúster alcance el estado deseado. Son los bloques de construcción de tus cargas de trabajo en un clúster. Los objetos incluyen replicaset, despliegues, pods, daemonsets, servicios, espacios de nombres (namespaces), configmaps y secrets, así como volúmenes persistentes, por mencionar algunos.

La forma más común de crear objetos es mediante un archivo YAML, generalmente con una extensión .yaml o .yml.

Para crear un objeto a partir de un archivo YAML, ejecuta:

kubectl apply -f ./archivo1.yaml

Para crear recursos a partir de múltiples archivos YAML, ejecuta:

kubectl apply -f ./archivo1.yaml -f ./archivo2.yaml

Para crear recursos a partir de todos los archivos de manifiesto en un directorio, ejecuta:

kubectl apply -f ./directorio

Para crear recursos desde una URL, ejecuta:

kubectl apply -f https://ejemplo-url.io

Nodos en el Clúster Kubernetes:

Un nodo es una máquina física o virtual en la que se ejecutan pods y otros recursos que respaldan tu carga de trabajo. Cada nodo es gestionado por un nodo maestro (control plane) que contiene múltiples servicios necesarios para ejecutar los pods. Un clúster típicamente tiene varios nodos.

Para obtener el número de nodos en tu clúster, ejecuta:

kubectl get nodes

Para obtener los pods en ejecución en un nodo, ejecuta:

kubectl get pods -o wide | grep <nombre_nodo>

Para marcar un nodo como no programable, esto es que no se le dará carga:

kubectl cordon minikube

Para marcar un nodo como programable, esto indica que podrá ser usado para crear objetos:

kubectl uncordon minikube

Para mostrar métricas de uso de recursos como RAM y CPU, ejecuta:

kubectl top node <nombre_nodo>

Para eliminar un nodo o varios nodos, ejecuta:

kubectl delete node <nombre_nodo>

Gestión de Clúster y Contexto:

Un clúster Kubernetes es un grupo de nodos o servidores que ejecutan aplicaciones en contenedores. Un nodo puede ejecutar uno o varios pods, cada uno de los cuales contiene uno o más contenedores en ejecución.

Para listar información sobre el maestro (master), ejecuta:

kubectl cluster-info

Para verificar la versión de kubectl, ejecuta:

kubectl version --short

Para mostrar la configuración del clúster Kubernetes, ejecuta:

kubectl config view

Para mostrar los contextos, ejecuta:

kubectl config get-contexts

Para listar los recursos de la API disponibles, ejecuta:

kubectl api-resources

Para listar las versiones de la API disponibles, ejecuta:

kubectl api-versions

Pods en Kubernetes:

En Kubernetes, un pod es la unidad desplegable más pequeña que puedes crear y gestionar en un clúster. Un pod contiene un grupo de contenedores con volúmenes y recursos de red compartidos, además de instrucciones sobre cómo ejecutar la aplicación.

Los pods son efímeros y desechables, lo que significa que tienen una vida útil corta y no duran mucho tiempo. Por lo tanto, el enfoque más adecuado para desplegar pods es utilizar la configuración declarativa mediante un archivo YAML.

Esto es más reproducible y conveniente, ya que se puede reutilizar. Además, garantiza que los recursos definidos en el archivo YAML sean monitoreados constantemente por Kubernetes y se ejecuten según lo especificado.

Listado/Eliminación de Pods:

Para obtener la lista de pods en ejecución en tu clúster, ejecuta:

kubectl get pods

Para mostrar los pods junto con sus etiquetas, ejecuta:

kubectl get pods --show-labels

Para listar todos los pods en todos los espacios de nombres (namespaces), ejecuta:

kubectl get pods --all-namespaces

Para listar los pods en el espacio de nombres actual y con más detalles, agrega el parámetro -o wide:

kubectl get pods -o wide

Para mostrar el estado detallado de un pod específico, ejecuta:

kubectl describe pod <nombre_pod>

Para agregar una etiqueta a un pod, ejecuta el siguiente comando:

kubectl label pods mi-pod nueva-etiqueta=increíble

Para eliminar la etiqueta, ejecuta:

kubectl label pods mi-pod nueva-etiqueta-

Para acceder a un shell interactivo en un pod de contenedor, ejecuta:

kubectl exec -it <nombre_pod> /bin/sh

Para eliminar un pod específico, ejecuta el siguiente comando:

kubectl delete pod <nombre_pod>

RéplicaSets en el Clúster:

Un RéplicaSet (RS) garantiza que siempre haya un número estable de pods en ejecución en todo momento. Garantiza la disponibilidad de un número específico de pods según lo definido en el archivo de manifiesto YAML.

Para obtener la cantidad de RéplicaSets en un clúster, ejecuta:

kubectl get replicasets

Para obtener más información sobre un conjunto de réplicas específico, ejecuta:

kubectl describe replicasets <nombre_replicaset>

Servicios en Pods:

Un servicio es una abstracción de red sobre un pod. Los servicios proporcionan descubrimiento y enrutamiento entre pods. Por ejemplo, un servicio puede conectar el front-end de una aplicación con su back-end, cada uno en ejecución en despliegues separados.

Para listar los servicios, ejecuta:

kubectl get services

Para obtener más detalles sobre un servicio, ejecuta:

kubectl describe services

Cuentas de Servicio en Pods:

Una cuenta de servicio es un objeto utilizado por un pod en un clúster para acceder al servidor de la API de Kubernetes.

Para listar las cuentas de servicio, ejecuta:

kubectl get serviceaccounts

Para obtener información más detallada sobre la cuenta de servicio, ejecuta:

kubectl describe serviceaccounts

Para eliminar una cuenta de servicio, utiliza la siguiente sintaxis:

kubectl delete serviceaccounts <nombre_cuenta_de_servicio>

Espacios de Nombres (Namespaces):

Los espacios de nombres son unidades que permiten subdividir un clúster en múltiples subclústeres que luego se pueden gestionar de manera individual.

Para listar los espacios de nombres, ejecuta:

kubectl get namespaces

Para mostrar información detallada sobre un espacio de nombres, usa la siguiente sintaxis:

kubectl describe namespace <nombre_espacio_de_nombres>

Para crear un espacio de nombres, ejecuta:

kubectl create namespace <nombre_espacio_de_nombres>

Para editar o modificar un espacio de nombres, ejecuta:

kubectl edit namespace <nombre_espacio_de_nombres>

Para mostrar el uso de recursos de un espacio de nombres, ejecuta:

kubectl top namespace <nombre_espacio_de_nombres>

Para eliminar un espacio de nombres, ejecuta:

kubectl delete namespace <nombre_espacio_de_nombres>

Secretos Kubernetes:

En Kubernetes, los secretos son objetos que almacenan información sensible y confidencial, como nombres de usuario y contraseñas.

Para listar los secretos existentes, ejecuta:

kubectl get secret

Para obtener información detallada sobre los secretos existentes, ejecuta:

kubectl describe secrets

Para crear un secreto, ejecuta:

kubectl create secret [flags] [opciones]

Para eliminar un secreto, ejecuta:

kubectl delete secret <nombre_secreto>

Despliegues (Deployments) Kubernetes:

Un despliegue es un objeto que te permite declarar el estado deseado de tu aplicación. Puedes definir el número de réplicas, la imagen para los pods, el número de pods y otros recursos.

Para obtener la cantidad de despliegues, ejecuta:

kubectl get deployment

Para ver el estado detallado de un despliegue específico, ejecuta:

kubectl describe deployment <nombre_despliegue>

Para eliminar un despliegue, ejecuta:

kubectl delete deployment <nombre_despliegue>

Para crear un nuevo despliegue, ejecuta el siguiente comando:

kubectl create deployment <nombre_despliegue>

Eventos Kubernetes:

En Kubernetes, un evento es un objeto que se genera en respuesta a un cambio en el estado de un recurso, como un pod, un contenedor o un nodo. Un buen ejemplo es el cambio de estado de un pod de pendiente a ejecución, o de exitoso a fallido.

Para listar todos los eventos, ejecuta:

kubectl get events

Para listar eventos excluyendo eventos de pod, ejecuta el comando:

kubectl get events --field-selector involvedObject.kind!=Pod

Para listar eventos junto con sus marcas de tiempo y ordenados según la hora de creación, ejecuta:

kubectl get events --sort-by=.metadata.creationTimestamp

Registros o Logs Kubernetes:

Los registros son fundamentales para registrar eventos del clúster y ayudar en la depuración y resolución de fallos. Puedes ver o configurar la verbosidad de registro utilizando los siguientes comandos:

Para imprimir registros de un pod específico, ejecuta:

kubectl logs <nombre_pod>

Para imprimir y seguir en tiempo real los registros de un pod específico, ejecuta:

kubectl logs -f <nombre_pod>

Para imprimir registros de un pod en las últimas X horas, por ejemplo, 3 horas, ejecuta:

kubectl logs --since=3h <nombre_pod>

Para imprimir registros de un contenedor específico dentro de un pod, ejecuta:

kubectl logs -c <nombre_contenedor> <nombre_pod>

Para generar las 20 líneas más recientes de registros, ejecuta:

kubectl logs --tail=20 <nombre_pod>

Para generar registros de un pod y guardarlos en un archivo de registro llamado pod.log, ejecuta:

kubectl logs <nombre_pod> > pod.log

Conclusión:

Este artículo proporcionó una visión general de algunos de los comandos kubectl más comúnmente utilizados para administrar un clúster Kubernetes. Estos comandos te ayudarán a realizar una variedad de tareas, desde la creación de objetos y la gestión de pods hasta la supervisión de eventos y registros. A medida que explores más a fondo Kubernetes, estos comandos te serán útiles para administrar y depurar tus clústeres de manera eficiente.

- Advertisement -
Jorge
Jorgehttps://nksistemas.com
Soy Jorge, Sr Sysadmin Linux/DevOps/SRE y creador de NKSistemas.com Trabajo con plataformas: Linux, Windows, AWS, GCP, Cisco, VMware, Citrix, Seguridad informática, Google Apps y muchas otras.

Related articles

A %d blogueros les gusta esto: