
Herramientas en Línea de Comandos para RKE2 (CLI Tools | RKE2)
Introducción
El uso de herramientas en línea de comandos (CLI) es fundamental para la gestión y operación eficiente de clústeres de Kubernetes en entornos empresariales. RKE2 (Rancher Kubernetes Engine v2), como una solución avanzada de orquestación de contenedores, se apoya en varias herramientas de CLI que permiten a los administradores y operadores interactuar de forma directa y eficaz con los clústeres. Estas herramientas, como kubectl, crictl, y ctr, ofrecen capacidades de administración, depuración, monitoreo y manejo de contenedores que son esenciales para mantener la infraestructura y las aplicaciones funcionando sin problemas. Comprender el uso de estas herramientas es clave para optimizar la gestión de RKE2 y garantizar operaciones seguras y escalables.
Objetivo
Objetivo General:
- Capacitar a los administradores de sistemas y profesionales de TI en el uso de las herramientas de línea de comandos esenciales para RKE2, facilitando una administración eficiente y segura de los clústeres de Kubernetes. El objetivo es que los participantes comprendan las funcionalidades de estas herramientas y adquieran las habilidades prácticas necesarias para realizar tareas de gestión, monitoreo y depuración, contribuyendo así a la operación y mantenimiento óptimos de su infraestructura de RKE2.
Ubicación
RKE2 incluye varias herramientas CLI para facilitar el acceso y la depuración del clúster, las cuales podemos encontrarlas en la siguiente ubicación: /var/lib/rancher/rke2/bin.
Al iniciar el cluster, se genera un kubeconfig de administrador en /etc/rancher/rke2/rke2.yaml.
Kubectl
Es la herramienta de línea de comandos de Kubernetes, la cual puede ser utilizada para desplegar y gestionar aplicaciones en Kubernetes. Usando kubectl, puedes inspeccionar recursos del clúster; crear, eliminar, y actualizar componentes; explorar tu nuevo clúster y arrancar aplicaciones. Ejemplo de utilización:
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
export PATH=$PATH:/var/lib/rancher/rke2/bin
kubectl get nodes
Ctr y Crictl
Tanto ctr como crictl son herramientas de línea de comandos utilizadas para interactuar con runtimes de contenedores, pero tienen diferentes propósitos y funcionalidades, ninguna de estas herramientas reemplaza a kubectl. A continuación una comparación de ambas:
ctr (Containerd CLI)
- Propósito: Es la herramienta de línea de comandos nativa para interactuar directamente con containerd, el runtime de contenedores.
- Nivel de acceso: Ofrece un control completo y de bajo nivel sobre containerd, lo que la hace ideal para tareas administrativas y depuración.
- En el caso de RKE2 (y en general, cualquier implementación de Kubernetes que use containerd), Kubernetes utiliza el namespace k8s.io para gestionar todos los recursos relacionados con el clúster. Por lo tanto, al ejecutar comandos de ctr (la CLI de containerd) dentro de un clúster de RKE2, necesitas especificar explícitamente el namespace k8s.io para interactuar con los recursos gestionados por Kubernetes.
Características:
- Permite gestionar imágenes de contenedores, crear y administrar contenedores, y realizar operaciones en snapshots.
- Está más orientada a usuarios avanzados y administradores que necesitan interactuar con containerd de forma directa.
- No está enfocada a la compatibilidad con la Container Runtime Interface (CRI), por lo que no es la herramienta estándar para integraciones con Kubernetes.
Uso común:
sudo ctr containers list
sudo ctr images pull <imagen>
sudo ctr run --rm -t <imagen> <nombre-contenedor>
El argumento --namespace k8s.io en los comandos de containerd se utiliza para especificar el namespace (espacio de nombres) en el que se ejecutan las operaciones. Containerd organiza los recursos, como contenedores, imágenes y snapshots, en namespaces para aislar su uso y evitar conflictos entre diferentes contextos o aplicaciones
ctr --namespace k8s.io containers list
ctr --namespace k8s.io images pull <imagen>
ctr --namespace k8s.io run --rm -t <imagen> <nombre-contenedor>
crictl (CRI CLI)
- Propósito: Es una herramienta diseñada para interactuar con cualquier runtime que implemente la Container Runtime Interface (CRI), como containerd y CRI-O.
- Nivel de acceso: Proporciona una abstracción de alto nivel que es más adecuada para entornos Kubernetes, donde se usa el CRI.
Características:
- Compatible con Kubernetes y se utiliza comúnmente para ver, depurar y gestionar contenedores en clústeres de Kubernetes.
- Proporciona comandos simples para listar, detener y describir contenedores y pods.
- Es más fácil de usar para tareas específicas de Kubernetes y se alinea con la gestión de contenedores en un contexto de CRI.
Uso común:
crictl ps # Listar contenedores
crictl images # Listar imágenes
crictl logs <id> # Ver registros de un contenedor
crictl exec -it <id> sh # Ejecutar comandos en un contenedor
Principales Diferencias (ctr y clictl):
- Enfoque: ctr es específico de containerd, mientras que crictl es genérico para cualquier runtime CRI y es más usado en el contexto de Kubernetes.
- Facilidad de uso: crictl es más amigable para usuarios que trabajan en entornos Kubernetes, mientras que ctr requiere un conocimiento más profundo de containerd.
- Compatibilidad: crictl es la herramienta preferida en clústeres de Kubernetes porque respeta la Container Runtime Interface y permite la gestión de pods y contenedores de una manera que Kubernetes entiende.
- Nivel de abstracción: crictl ofrece una capa de abstracción que lo hace más fácil de usar en clústeres que utilizan CRI, mientras que ctr permite un control más detallado pero requiere más conocimientos técnicos.
Conclusión:
Usa ctr cuando necesites un control avanzado y estés trabajando directamente con containerd. Usa crictl para tareas relacionadas con la gestión de contenedores en entornos de Kubernetes y cuando necesites interactuar con cualquier runtime que implemente CRI, facilitando la depuración y administración en estos entornos.
Laboratorio: Utilizando crictl en Kubernetes
Antes de comenzar
- Contar con el acceso al ambiente de laboratorio
- Haber realizado la validación de conexión y funcionamiento
- Finalizar las prácticas de laboratorio de las instalaciones de RKE2.
Inicio de laboratorio
Asegurarse de estar en el servidor bastion con el usuario student
student@lab-0-bastion:~>
- Establecer una sesión como el usuario student al servidor:
lab-#-aiostudent@lab-0-bastion:~> export LAB=Xstudent@lab-0-bastion:~> ssh student@lab-${LAB}-aio - Cambiar al usuario
rootstudent@lab-0-aio:~> sudo -i -
Obtenga el contenido de la configuración de
crictl.yaml.Salida ejemplo:cat /var/lib/rancher/rke2/agent/etc/crictl.yamlruntime-endpoint: unix:///run/k3s/containerd/containerd.sockParámetro Descripción runtime-endpointEspecifica el punto de conexión que Kubernetes utiliza para comunicarse con el runtime de contenedores. unix://Esquema de conexión, indica que se usa un socket UNIX para la comunicación. /run/k3s/containerd/containerd.sockRuta del archivo de socket UNIX en el sistema de archivos que conecta Kubernetes con containerd. -
Preparar el entonrno para poder utilizar crictl
export PATH=$PATH:/var/lib/rancher/rke2/binexport CRI_CONFIG_FILE=/var/lib/rancher/rke2/agent/etc/crictl.yaml - Listar los
podseejecutándose en el Nodo con el siguiente comando:crictl pods ps - Listar los
podscon una etiqueta específicacrictl pods --label app=rancher - Listar todas las imágenes de contenedores
Incluir digests:
crictl imagescrictl images --digests list - Listar los contenedores:
crictl ps -acrictl ps -
Identificar un pod en base a un filtro.
crictl pods --label app=rancher --namespace cattle-system -n 1 -q POD_ID=$(crictl pods --label app=rancher --namespace cattle-system -n 1 -q) echo ${POD_ID}Opción Descripción -n 1Limita el número de resultados devueltos a 1. -qMuestra únicamente los IDs de los pods en la salida (modo compacto). -
Identiicar contenedores en base a un pod.
crictl ps --pod $POD_ID -q CONTAINER_ID=$(crictl ps --pod $POD_ID -q) echo ${CONTAINER_ID} - Ejecutar un comando en un contenedor en ejecución, elije un contenedor de
Rancher Manager, para esto utlizaremos el id del contenedor obtenido en el paso anterior.Puede ejecutar comandos más avanzados invocando el shell.crictl exec -i -t ${CONTAINER_ID} ls /crictl exec -i -t ${CONTAINER_ID} sh -c 'id && uptime && env|grep CATTLE_SERVER_VERSION' - Para revisar los logs de un contenedor ejecute el siguiente comando, elije un contenedor de
Rancher Managery ejecuta el siguiente comando, asegurarse de reemplazar eliddel contenedor por el correcto:crictl logs ${CONTAINER_ID}crictl logs --tail=10 ${CONTAINER_ID} - Obtener más información de un contenedor.
crictl inspect ${CONTAINER_ID}
Laboratorio: Utilizando ctr en Kubernetes
Antes de comenzar
- Contar con el acceso al ambiente de laboratorio
- Haber realizado la validación de conexión y funcionamiento
- Finalizar las prácticas de laboratorio de las instalaciones de RKE2.
Inicio de laboratorio
Asegurarse de estar en el servidor bastion con el usuario student
student@lab-0-bastion:~>
- Establecer una sesión como el usuario student al servidor:
lab-#-aiostudent@lab-0-bastion:~> export LAB=Xstudent@lab-0-bastion:~> ssh student@lab-${LAB}-aio - Cambiar al usuario
rootstudent@lab-0-aio:~> sudo -i - Preparar el entonrno para poder utilizar crictl
export PATH=$PATH:/var/lib/rancher/rke2/binexport CONTAINERD_ADDRESS=/run/k3s/containerd/containerd.sockexport CONTAINERD_NAMESPACE=k8s.io - Usa ctr para listar los contenedores en ejecución en el clúster.
ctr container list - Identificar un pod en base a un filtro. Debido a las limitantes de ctr, se puede complementar con crictl.
crictl pods --label app=rancher --namespace cattle-system -n 1 -q POD_ID=$(crictl pods --label app=rancher --namespace cattle-system -n 1 -q) echo ${POD_ID} - Identiicar contenedores en base a un pod.
crictl ps --pod $POD_ID -q CONTAINER_ID=$(crictl ps --pod $POD_ID -q) echo ${CONTAINER_ID} - Para ver más detalles sobre un contenedor específico, elije un contenedor de
Rancher Managery ejecuta el siguiente comando, asegurarse de reemplazar eliddel contenedor por el correcto:ctr container info ${CONTAINER_ID} - Verifica las imágenes de contenedor que están disponibles localmente:
ctr image list - Puedes usar ctr para descargar imágenes de contenedor desde un registro:
ctr image pull docker.io/library/nginx:latest - Para ejecutar un contenedor basado en una imagen descargada:
ctr run -d -t docker.io/library/nginx:latest my-nginx-container - Listar el contenedor ejecutado anteriormente:
ctr c ls | grep my-nginx-container - Verificar todas las tareas (task) en el container runtime:
ctr tasks ls - Puedes ejecutar comandos desde el contenedor creado anteriormente,
--exec-id bash_1especifica un identificador único para la sesión de ejecución que estás iniciando. Este ID permite diferenciar esta sesión de otras posibles ejecuciones que puedan estar ocurriendo en el mismo contenedor. nginx -T: Muestra la configuración completa de nginx, Es útil para demostrar cómo nginx está configurado dentro del contenedor.ctr task exec -t --exec-id bash_1 my-nginx-container nginx -T - Esposible verificar ciertas métricas del contenedor con el siguiente comando:
ctr task metrics my-nginx-container - Antes de eliminar un contenedor, es necesario detener todas las tareas. Ejecute el siguiente comando para detener la tarea
my-nginx-container.ctr task kill my-nginx-container - Verificar la tarea
my-nginx-containeren el container runtime:ctr tasks ls | grep my-nginx-container - Eliminar el contenedor my-nginx-container:
ctr container rm my-nginx-container - Verificar nuevamente la tarea
my-nginx-containeren el container runtime:ctr tasks ls | grep my-nginx-container - Puede relizar una limpieza de imagenes no utilizadas, ejecutando:
ctr images prune --all - Salir del ambiente
lab-0-aio:~ # exit logout student@lab-0-aio:~> exit logout Connection to lab-0-aio closed. student@lab-0-bastion:~>