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 -

añadir repositorio cri-o y clave

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

actualizar repositorio

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

paquete 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

instalar cri-o

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

iniciar el servicio 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

instalación del plugin containernetworking

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

configurar el plugin de red de contenedores

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

comprueba el servicio 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

instalar 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

crictl comprobar 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

setup crictl completiobn

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

crear pod sandbox

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

detalles del pod sandbox

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

crictl descargar imagen

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

añadir contenedor al pod

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

acceder a nginx pod

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.

También te podría gustar...