Cómo instalar CRI-O Container Runtime en Ubuntu 22.04
CRI-O es un tiempo de ejecución de contenedores ligero alternativo a Docker para Kubernetes. Es una implementación de Kubernetes CRI (Container Runtime Interface) y cumple con el tiempo de ejecución OCI (Open Container initiative). CRI-O permite a Kubernetes ejecutar contenedores directamente sin herramientas adicionales ni ajustes en el código.
CRI-O admite múltiples formatos de imagen, incluido el formato de imagen Docker. También proporciona funcionalidades para la gestión de imágenes de contenedores, como la gestión de la capa de imágenes, los sistemas de archivos superpuestos, la gestión del ciclo de vida de los procesos de los contenedores, la supervisión y el registro de los contenedores, y también proporciona aislamiento de recursos.
Este tutorial te guiará a través de la instalación del CRI-O Container Runtime en el servidor Ubuntu 22.04. También incluye cómo configurar el plugin CNI con CRI-O y el uso básico de«cri-tools» para gestionar Pods y contenedores.
Requisitos previos
Antes de empezar, debes tener los siguientes requisitos:
- Un servidor Ubuntu 22.04 – Esta guía utiliza el servidor Ubuntu con el nombre de host «server-ubuntu» y la dirección IP del servidor «192.168.5.10».
- Un usuario no root con privilegios de root/administrador.
Instalación de CRI-O Container Runtime
CRI-O puede instalarse de distintas formas, instalando mediante el comando APT o construyendo e instalando CRI-O desde el código fuente. en este ejemplo, instalarás CRI-O Container Runtime a través del repositorio de terceros.
Antes de iniciar la instalación, ejecuta el siguiente comando para configurar la variable de entorno«$OS» y«$CRIO_VERSION«. Para este ejemplo, instalaremos CRI-O v1.24.0 para Ubuntu 22.04.
export OS=xUbuntu_22.04 export CRIO_VERSION=1.24
Ahora ejecuta el siguiente comando para añadir el repositorio CRI-O para el servidor Ubuntu 22.04.
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list
Añade la clave GPG para el repositorio CRI-O utilizando el siguiente comando.
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add - curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -
Ahora actualiza tu repositorio de Ubuntu y refresca el índice de paquetes. Deberías ver que el repositorio CRI-O se añade a tu lista de índice de paquetes.
sudo apt update
Después, comprueba la versión del paquete CRI-O utilizando el siguiente comando. Como puedes ver, se instalará la última versión del paquete CRI-O v1.24.
sudo apt info cri-o
Ahora instala el tiempo de ejecución del contenedor CRI-O utilizando el siguiente comando apt. Introduce Y para confirmar la instalación y pulsa ENTER para continuar, y comenzará la instalación.
sudo apt install cri-o cri-o-runc
Una vez finalizada la instalación, inicia el servicio CRI-O y habilítalo utilizando el comando«systemctl» que aparece a continuación.
sudo systemctl start crio sudo systemctl enable crio
Por último, comprueba y verifica el servicio CRI-O utilizando el siguiente comando. Deberías ver que el servicio CRI-O está habilitado y se ejecutará automáticamente al arrancar el sistema. Y el estado actual del servicio CRI-O es en ejecución.
sudo systemctl status crio
Instalación del Plugin CNI (Container Network Interface)
El CNI (Container Network Interface) es necesario para el tiempo de ejecución del contenedor CRI-O. El plugin CNI te permite configurar la red en el contenedor y en los Pods. Instalarás el plugin CNI desde el repositorio oficial de ubuntu y lo configurarás con el tiempo de ejecución del contenedor CRI-O.
El paquete«containernetworking-plugins» está disponible mayoritariamente en la distribución Linux. Para instalarlo, ejecuta el siguiente comando apt, y comenzará la instalación.
sudo apt install containernetworking-plugins
Una vez finalizada la instalación, edita el archivo de configuración de CRI-O«/etc/crio/crio.conf» utilizando el siguiente comando.
sudo nano /etc/crio/crio.conf
En la sección «[crio.network]», descomenta la opción«network_dir» y«plugin_dirs«. Asegúrate también de añadir el directorio de plugins CNI«/usr/lib/cni/» a la opción «plugin_dirs«.
# The crio.network table containers settings pertaining to the management of # CNI plugins. [crio.network]
# The default CNI network name to be selected. If not set or «», then
# CRI-O will pick-up the first one found in network_dir.
# cni_default_network = «»
# Path to the directory where CNI configuration files are located.
network_dir = «/etc/cni/net.d/»
# Paths to directories where CNI plugin binaries are located.
plugin_dirs = [
«/opt/cni/bin/»,
«/usr/lib/cni/»,
]
Cuando hayas terminado, guarda y cierra el archivo.
A continuación, elimina la configuración por defecto del puente CNI«/etc/cni/net.d/100-crio-bridge.conf«. A continuación, descarga la nueva configuración CNI del puente en«/etc/cni/net.d/11-crio-ipv4-bridge.conf».
La nueva configuración CNI del puente habilitará sólo IPv4 para Pods y contenedores.
rm -f /etc/cni/net.d/100-crio-bridge.conf sudo curl -fsSLo /etc/cni/net.d/11-crio-ipv4-bridge.conf https://raw.githubusercontent.com/cri-o/cri-o/main/contrib/cni/11-crio-ipv4-bridge.conf
Ahora reinicia el servicio CRI-O para aplicar los nuevos cambios en la configuración del plugin CNI.
sudo systemctl restart crio
Por último, comprueba y verifica de nuevo el servicio CRI-O utilizando el siguiente comando. Deberías ver que el servicio CRI-O se está ejecutando con la nueva configuración del puente CNI.
sudo systemctl status crio
Instalación del paquete CRI-Tools
Has terminado la instalación del tiempo de ejecución del contenedor CRI-O y ahora se está ejecutando con el plugin CNI correcto. Ahora vas a instalar el paquete «cri-tools», que incluye la utilidad de línea de comandos «crictl» que puede utilizarse para interactuar con el tiempo de ejecución del contenedor CRI-O.
Las «cri-tools« pueden utilizarse con múltiples tiempos de ejecución de contenedores, como containerd, dockershim, CRI-O y cri-dockerd.
Ejecuta el siguiente comando apt para instalar el paquete«cri-tools». La instalación comenzará automáticamente.
sudo apt install cri-tools
Una vez finalizada la instalación, ejecuta el siguiente comando «crictl» para comprobar la versión actual del tiempo de ejecución. verás que el tiempo de ejecución del contenedor que estás utilizando es CRI-O v1.24.
crictl version
A continuación, ejecuta el siguiente comando«crictl» para comprobar el estado del actual Tiempo de Ejecución del Contenedor y del Plugin de Red CNI. Deberías ver que el Tiempo de ejecución del contenedor CRI-O es «RuntimeReady» y que el Plugin CNI es«NetworkReady«.
crictl info
El comando crictl proporciona un autocompletado para tu shell, que puede generarse manualmente. Ejecuta el siguiente comando crictl para generar el autocompletado de comandos para el intérprete de comandos Bash en el archivo«/etc/bash_completion.d/crictl«. A continuación, recarga tu sesión Bash actual abasteciéndote del archivo de configuración ~/.bashrc.
crictl completion > /etc/bash_completion.d/crictl
source ~/.bashrc
Ahora ejecuta el comando«crictl» y pulsa TAB para ver todos los comandos de finalización disponibles.
crictl TAB
Crear Pod y Contenedor utilizando crictl
Ahora que cri-tools está instalado en tu sistema, es hora de crear un sandbox Pod y un contenedor utilizando el comando«crictl». En este ejemplo, crearemos un Pod para el contenedor Nginx.
Crea un nuevo directorio«~/demo» utilizando el siguiente comando.
mkdir ~/demo/
Ahora ejecuta el siguiente comando para crear un nuevo archivo de configuración JSON y definir el sandbox Pod para el contenedor.
cat <<EOF | tee ~/demo/sandbox_nginx.json { "metadata": { "name": "nginx-sandbox", "namespace": "default", "attempt": 1, "uid": "hdishd83djaidwnduwk28bcsb" }, "linux": { }, "log_directory": "/tmp" } EOF
Ejecuta el Pod sandbox utilizando el siguiente comando«crictl«. Y deberías ver la cadena aleatoria de tu Pod.
sudo crictl runp ~/demo/sandbox_nginx.json
Comprueba y verifica los Pods en ejecución utilizando el siguiente comando. Deberías ver el Pod sandbox«nginx-sandbox» con el Pod id«7b0618800e251» en estado«Listo«.
sudo crictl pods
Para comprobar los detalles del Pod, ejecuta el comando«crictl» que aparece a continuación, y asegúrate de cambiar el id del Pod. En este ejemplo, el Pod«nginx_sandbox» tiene una dirección IP«10.85.0.3«.
sudo crictl inspectp --output table 7b0618800e251
Ahora que el Pod sandbox está listo, es hora de crear el contenedor Nginx. Pero antes, deberás descargar la imagen de Nginx.
Ejecuta el siguiente comando crictl para descargar la imagen de Nginx. A continuación, comprueba y verifica la lista de imágenes disponibles.
sudo crictl pull nginx sudo crictl images
Ahora ejecuta el siguiente comando para crear un nuevo archivo JSON para definir el contenedor Nginx.
cat <<EOF | tee ~/demo/container_nginx.json { "metadata": { "name": "nginx" }, "image":{ "image": "nginx" }, "log_path":"nginx.0.log", "linux": { } } EOF
Crea un nuevo contenedor en el sandbox Pod«7b0618800e251» utilizando el comando crictl que aparece a continuación. Deberías ver la cadena aleatoria del id de tu nuevo contenedor Nginx.
sudo crictl create 7b0618800e251 ~/demo/container_nginx.json ~/demo/sandbox_nginx.json
Inicia el contenedor Nginx utilizando el comando siguiente, y asegúrate de cambiar el id del contenedor.
sudo crictl start 1100498979ee5d3a9cbdb7b8b8f18529a01298f2bb57f7fcd01f54dd5a0f8746
Después, comprueba y verifica el contenedor en ejecución utilizando el siguiente comando. Deberías ver que el contenedor Nginx está«Ejecutándose» dentro del Pod«7b0618800e251«.
sudo crictl ps
Por último, puedes acceder al contenedor Nginx a través de la dirección IP del Pod sandbox«nginx_sandbox«. Ejecuta el comando curl a la dirección IP de «nginx_sandbox««10.85.0.3«, y verás la página index.html por defecto de tu contenedor Nginx.
curl 10.85.0.3
Conclusión
Ya has terminado la instalación y configuración del CRI-O Container Runtime with CNI Plugin en un servidor Ubuntu 22.04. Ya puedes utilizarlo como tiempo de ejecución de contenedores para el clúster Kubernetes. También has aprendido el uso básico del comando «crictl» para crear Pods y contenedores utilizando el Tiempo de Ejecución de Contenedores CRI-O.