Note:

Ejecución de contenedores Podman en Systemd con Quadlet

Introducción

Quadlet proporciona una forma de ejecutar contenedores en systemd dentro de Oracle Linux. Defina el contenedor que se va a ejecutar en una sección [Container] en un formato familiar para la sintaxis de línea de comandos de Podman estándar y aproveche todas las ventajas de las opciones [Unit] y [Service] de systemd. La ventaja de usar systemd para ejecutar sus contenedores es que systemd está integrado en el sistema operativo, por lo que puede tener contenedores que se inician cuando el sistema se inicia o establecen el orden y la dependencia entre una configuración de varios contenedores.

Quadlet sustituye un método anterior Podman utilizado para la integración con systemd. Ese método consiste en crear un contenedor, generar un archivo de servicio, mover el archivo de servicio y, a continuación, activar el servicio. En muchos casos, los usuarios dedicarían tiempo a escribir estos pasos en scripts de Bash y luego tendrían que mantener esos scripts y los archivos generados. En función de la perspectiva de un usuario, Quadlet simplifica esta tarea.

Objetivos

En este tutorial, aprenderá a:

Requisitos

Desplegar Oracle Linux

Nota: Si se ejecuta en su propio arrendamiento, lea el proyecto linux-virt-labs GitHub README.md y complete los requisitos antes de desplegar el entorno de prácticas.

  1. Abra un terminal en el escritorio Luna.

  2. Clone el proyecto linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Cambie al directorio de trabajo.

    cd linux-virt-labs/ol
    
  4. Instale las recopilaciones necesarias.

    ansible-galaxy collection install -r requirements.yml
    
  5. Despliegue el entorno de prácticas.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e use_podman=true -e update_all=true -e os_version="9"
    

    El entorno de prácticas gratuito necesita la variable adicional local_python_interpreter, que define ansible_python_interpreter para las reproducciones que se ejecutan en localhost. Esta variable es necesaria porque el entorno instala el paquete de RPM para el SDK para Python de Oracle Cloud Infrastructure, ubicado en los módulos python3.6.

    La unidad de despliegue por defecto utiliza la CPU AMD y Oracle Linux 8. Para utilizar una CPU de Intel u Oracle Linux 9, agregue -e instance_shape="VM.Standard3.Flex" o -e os_version="9" al comando de despliegue.

    Importante: Espere a que el cuaderno de estrategias se ejecute correctamente y alcance la tarea de pausa. En esta etapa del manual, la instalación de Oracle Linux está completa y las instancias están listas. Tome nota de la reproducción anterior, que imprime las direcciones IP públicas y privadas de los nodos que despliega y cualquier otra información de despliegue necesaria durante la ejecución del laboratorio.

Confirmar trabajos de Podman

El paquete de herramientas de contenedor en Oracle Linux proporciona las últimas versiones de Podman, Buildah, Skopeo y las dependencias asociadas.

  1. Abra un terminal y conéctese mediante SSH a la instancia ol-node-01.

    ssh oracle@<ip_address_of_instance>
    
  2. Comprueba la versión de Podman.

    podman -v
    
  3. Confirme que la CLI de Podman esté funcionando.

    podman run quay.io/podman/hello
    

    Salida de ejemplo:

    [oracle@ol-server ~]$ podman run quay.io/podman/hello
    Trying to pull quay.io/podman/hello:latest...
    Getting image source signatures
    Copying blob f82b04e85914 done
    Copying config dbd85e09a1 done
    Writing manifest to image destination
    Storing signatures
    !... Hello Podman World ...!
    
             .--"--.
           / -     - \
          / (O)   (O) \
       ~~~| -=(,Y,)=- |
        .---. /`  \   |~~
     ~/  o  o \~~~~.----. ~~
      | =(X)= |~  / (O (O) \
       ~~~~~~~  ~| =(Y_)=-  |
      ~~~~    ~~~|   U      |~~
    
    Project:   https://github.com/containers/podman
    Website:   https://podman.io
    Documents: https://docs.podman.io
    Twitter:   @Podman_io
    

Crear un cuadlet

Un cuádruple es sólo la creación de un archivo .container en un directorio específico que contiene una sección [Container] que describe las opciones de inicio del contenedor.

  1. Cree el directorio systemd del contenedor de los usuarios.

    mkdir -p ~/.config/containers/systemd
    
  2. Cree un archivo .container.

    cat << EOF | tee ~/.config/containers/systemd/test-ol.container > /dev/null
    [Unit]
    Description=My First Quadlet
    
    [Container]
    Image=ghcr.io/oracle/oraclelinux:9
    AutoUpdate=registry
    Exec=sleep 60
    
    [Service]
    Restart=always
    TimeoutStartSec=900
    
    [Install]
    WantedBy=multi-user.target default.target
    EOF
    

    Este cuadlet ejecuta el contenedor de Oracle Linux y realiza un sleep 60 en el contenedor. Una vez que se completa sleep 60, el contenedor se cierra y, a continuación, systemd lo reinicia. Existen otras opciones para la sección [Container] y hay una lista disponible en la documentación upstream.

    Consulte la página del comando man systemd.unit(5) para obtener más información sobre las opciones [Service], [Unit] y [Install].

  3. Active la persistencia para el usuario.

    sudo loginctl enable-linger oracle
    
  4. Informe systemd del nuevo archivo de unidad.

    systemctl --user daemon-reload
    

    Este paso crea test-ol.service según el archivo test-ol.container.

  5. Inicie el servicio.

    systemctl --user start test-ol.service
    

    El servicio ejecuta podman para descargar la imagen de Oracle Linux y, a continuación, ejecuta sleep 60 dentro de la imagen de contenedor.

  6. Compruebe el estado del servicio.

    systemctl --user status test-ol.service
    

    Repita este comando para ver el contenedor detenerse y reiniciarse después de ejecutar sleep 60. También puede comprobar los logs ejecutando sudo journalctl _SYSTEMD_USER_UNIT=test-ol.service.

  7. Actualice el contenedor.

    Con la entrada AutoUpdate=registry en la sección [Container], activa la función podman auto-update para actualizar las imágenes de contenedor. Sin embargo, si desea que esto suceda automáticamente en lugar de manualmente, también debe activar el servicio necesario.

    systemctl --user enable podman-auto-update
    

    Manualmente, puede ejecutar podman auto-update --dry-run para ver si hay una actualización disponible. Ya que acabamos de descargar la última imagen hace unos minutos, no hay actualizaciones, y por lo tanto, no hay nada que hacer. Sin embargo, si hay una actualización, puede eliminar la opción --dry-run y podman extraerá la última imagen y reiniciará el contenedor.

Pasos Siguientes

En este tutorial se muestra cómo aprovechar Quadlet para gestionar un contenedor mínimo mediante systemd. Obtenga más información leyendo la documentación y creando contenedores adicionales que aprovechen el almacenamiento y tengan dependencias de varios contenedores.

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.