Note:

Configuración de contenedores Podman con Oracle Linux Automation Engine

Introducción

Oracle Linux Automation Engine permite a los usuarios crear un manual para instalar Podman y, a continuación, ejecutar y gestionar contenedores mediante la recopilación containers.podman.

Al ejecutar cuadernos de estrategias, Oracle Linux Automation Engine ejecuta las tareas en máquinas que coinciden con la directiva hosts: en el cuaderno de estrategias. Estos hosts se definen normalmente en un archivo de inventario y pueden ser remotos o locales. En este tutorial, mostraremos cómo ejecutar un manual localmente.

Objetivos

En este tutorial, aprenderá a:

Requisitos

Despliegue de Oracle Linux Automation Engine

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 Luna Desktop.

  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/olam
    
  4. Instale las recopilaciones necesarias.

    ansible-galaxy collection install -r requirements.yml
    
  5. Actualizar la configuración de la instancia de Oracle Linux.

    cat << EOF | tee instances.yml > /dev/null
    compute_instances:
      1:
        instance_name: "ol-control-node"
        type: "control"
    olam_type: olae
    EOF
    
  6. Cree un archivo de inventario.

    cat << EOF | tee hosts > /dev/null
    localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6
    EOF
    
  7. Despliegue el entorno de prácticas.

    ansible-playbook create_instance.yml -i hosts -e "@instances.yml"
    

    El entorno de prácticas gratuitas necesita la variable adicional ansible_python_interpreter para localhost porque instala el paquete RPM para el SDK para Python de Oracle Cloud Infrastructure. La ubicación para instalar este paquete se encuentra en los módulos de Python por defecto del sistema según la versión de Oracle Linux. El uso de una variable de inventario evita que las reproducciones se ejecuten en hosts que no sean localeshost.

    La unidad de despliegue por defecto utiliza la CPU de AMD. Puede cambiar la unidad de las instancias transfiriendo una nueva definición de variable de unidad en la línea de comandos.

    Por ejemplo: -e instance_shape="VM.Standard3.Flex"

    Del mismo modo, la versión por defecto de la imagen de Oracle Linux utiliza la variable os_version definida en el archivo `default_vars.yml. Puede modificar este valor transfiriendo la versión principal de Oracle Linux en la línea de comandos.

    Por ejemplo: -e os_version="9"

    Importante: Espere a que el cuaderno de estrategias se ejecute correctamente y alcance la tarea de pausa. En esta etapa del manual, se ha completado la instalación de Oracle Linux y las instancias están listas. Observe la reproducción anterior, que imprime las direcciones IP públicas y privadas de los nodos que despliega.

Recopilaciones

Las recopilaciones son un formato de distribución para el contenido de Oracle Linux Automation Engine que puede incluir manuales, roles, módulos y plugins. Este tutorial instalará la recopilación containers.podman mediante un archivo requirements.yml. Un archivo requirements.yml permite la instalación de recopilaciones, roles o ambos en función de las claves definidas en el archivo.

Creación de un archivo de requisitos

  1. Abra un nuevo terminal y conéctese al sistema ol-control-node mediante SSH.

    ssh oracle@<ip_address_of_instance>
    
  2. Cree un directorio de trabajo.

    mkdir -p ~/podman-project
    
  3. Cree un archivo de requisitos.

    cat << 'EOF' | tee ~/podman-project/requirements.yml > /dev/null
    ---
    collections:
      - name: containers.podman
    EOF
    
  4. Instale la colección.

    ansible-galaxy collection install -r ~/podman-project/requirements.yml
    

    La salida muestra el proceso de recuperación del archivo comprimido del sitio Galaxy y, a continuación, su instalación en el directorio raíz en .ansible/collections.

    Nota: Si la salida muestra ERROR: Ansible requires the locale encoding to be UTF-8; Detected None., indica un valor de configuración regional incorrecto para ansible. Para solucionar el problema, defina estas dos variables de entorno:

    export LC_ALL="en_US.UTF-8"
    export LC_CTYPE="en_US.UTF-8"
    

Instalar Podman

Los cuadernos de estrategias de Oracle Linux Automation Engine constan de reproducciones, que se componen de tareas asignadas a hosts específicos. Estas tareas ejecutan principalmente módulos idempotentes. Idempotency asegura que usted logre el mismo resultado si el libro de jugadas se ejecuta una o varias veces. Este tutorial demostrará la idempotencia mediante la construcción del manual en etapas y su ejecución entre cada cambio.

Antes de ejecutar un contenedor Podman, necesitamos instalar los paquetes Podman desde el repositorio AppStream de Oracle Linux.

  1. Cree el archivo del libro de estrategias.

    cat << 'EOF' | tee ~/podman-project/podman-playbook.yml > /dev/null
    ---
    - hosts: localhost
      connection: local
    
      tasks:
    
      - name: Install podman
        ansible.builtin.dnf:
          name: '@container-tools:ol8'
          state: present
        become: yes
        when:
          - ansible_distribution == 'OracleLinux'
          - ansible_facts['distribution_major_version'] == '8'
    
      - name: Install podman
        ansible.builtin.dnf:
          name: 'container-tools'
          state: present
        become: yes
        when:
          - ansible_distribution == 'OracleLinux'
          - ansible_facts['distribution_major_version'] == '9'
    EOF
    

    Un libro de estrategias y los nombres de las tareas tienen como objetivo hacer que el libro de estrategias sea autodocumentado. La siguiente información ofrece una explicación más detallada de algunos puntos clave.

    • hosts: localhost: indica las tareas que se deben ejecutar en el host local.
    • connection: local: garantiza que el enlace siga siendo local y no se ejecute mediante SSH.
    • become: yes: eleva la tarea de esta sección de cuaderno de estrategias para que se ejecute con el privilegio sudo de forma predeterminada.
  2. Ejecutar el manual.

    Dado que ejecutamos este manual en el host local, no hay ningún motivo para crear o hacer referencia a un archivo de inventario explícitamente. Sin embargo, si quisiéramos ejecutar esto en un host remoto, tendríamos que actualizar la entrada hosts:, eliminar la línea connection: en el manual y, a continuación, crear y hacer referencia a un archivo de inventario. Si no está familiarizado con este proceso, puede consultar algunos de nuestros otros tutoriales, enlazados en Oracle Linux Training Station al final de este tutorial.

    ansible-playbook ~/podman-project/podman-playbook.yml
    

    La salida del comando debe mostrar que se ejecuta correctamente en localhost, lo que indica un cambio en la tarea Install podman. Este estado indica que hemos completado correctamente la instalación del módulo container-tools.

  3. Verifique el paquete de Podman instalado mostrando su versión.

    podman --version
    

Extraer una imagen

Una vez que hemos instalado Podman, podemos extraer imágenes de nuestro registro de elección y ubicarlas localmente. En este paso, extraeremos la imagen de Oracle Linux de GitHub Container Registry.

Puede encontrar información adicional sobre las imágenes de Oracle Linux Developer aquí.

  1. Agregue la tarea para extraer una imagen de contenedor al manual.

    cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null
    
      - name: Pull oraclelinux:9 from GitHub
        containers.podman.podman_image:
          name: ghcr.io/oracle/oraclelinux:9
    EOF
    
  2. Ejecutar el manual.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  3. Compruebe que Podman ha extraído la imagen.

    podman images
    

    Ejemplo de salida:

    REPOSITORY                  TAG         IMAGE ID      CREATED       SIZE
    ghcr.io/oracle/oraclelinux  9           97e22ab49eea  20 hours ago  254 MB
    

Ejecución de una imagen de contenedor

En lugar de simplemente extraer una imagen, también podemos extraer y ejecutar un contenedor basado en una imagen en un solo paso. Vamos a extraer y ejecutar la imagen de desarrollador de Oracle Linux NGINX.

  1. Actualice el archivo del manual.

    cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null
    
      - name: Run image
        containers.podman.podman_container:
          name: nginx
          image: ghcr.io/oracle/oraclelinux9-nginx:1.20
          state: started
          detach: yes
          expose:
            - '80'
            - '443'
          publish:
            - '8080:80'
    EOF
    

    Dónde:

    • name: nombre del contenedor.
    • image: ruta de repositorio (o nombre de imagen) y etiqueta utilizadas para crear el contenedor.
    • state: comprueba si hay un contenedor en ejecución que coincida con el nombre y la configuración. Podman crea e inicia un nuevo contenedor cuando no puede encontrar una coincidencia.
    • detach: ejecuta el contenedor en modo desasociado.
    • expose: muestra un puerto o un rango de puertos.
    • publish: publica un puerto de contenedor o un rango de puertos en el host.
  2. Ejecutar el manual.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  3. Compruebe que el contenedor se está ejecutando.

    podman ps
    

    Ejemplo de salida:

    [oracle@ol-server podman-project]$ podman ps
    CONTAINER ID  IMAGE                                   COMMAND               CREATED         STATUS             PORTS                 NAMES
    5f7a28cc4c6b  ghcr.io/oracle/oraclelinux9-nginx:1.20  nginx -g daemon o...  2 minutes ago   Up 2 minutes ago   0.0.0.0:8080->80/tcp  nginx
    

    La salida muestra que el contenedor ha estado en funcionamiento durante 2 minutos.

  4. Detenga el contenedor.

    Con el CONTAINER ID de la salida anterior, ejecute:

    podman stop $(podman ps -q -f name=nginx)
    

    Este comando utiliza el CONTAINER ID como referencia para detener el contenedor nginx.

Ejecución de una imagen de contenedor con un volumen

Podman crea volúmenes agregando un montaje de enlace, que asigna un directorio local a un directorio dentro del contenedor. Vamos a demostrar esta función ejecutando el mismo contenedor NGINX y sustituyendo la página index.html por defecto por una personalizada.

  1. Actualice el archivo del manual.

    Cree el directorio local. Si bien podemos realizar este paso de manera eficiente y manual una vez desde la línea de comandos, lo automatizaremos en su lugar. La automatización de este paso garantiza que el directorio exista cada vez que se ejecuta el manual. Antes de ejecutar la imagen, agregue estas tareas, que crean un directorio y el archivo index.html.

    Asegúrese de dejar una línea en blanco entre las tareas para facilitar la lectura y de seguir las reglas de sintaxis YAML y las directrices de alineación. Utilizaremos sed para completar esta tarea, ya que permite la fácil inserción de bloques de texto en un archivo en una línea específica.

    sed -i -e '24 r '<(cat -<< EOF
      - name: Ensure the destination directory exists
        ansible.builtin.file:
          path: "/home/oracle/nginx/"
          state: directory
    
      - name: Create an empty file
        ansible.builtin.file:
          path: "/home/oracle/nginx/index.html"
          state: touch
          mode: '0755'
    
      - name: Create index.html
        ansible.builtin.copy:
          dest: "/home/oracle/nginx/index.html"
          content: |
            Hello! Welcome to Oracle Linux Containers.
    
    EOF
    ) ~/podman-project/podman-playbook.yml
    
  2. A continuación, agregue la siguiente opción al final de la tarea Run image.

    cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null
          volume: "/home/oracle/nginx:/usr/share/nginx/html:Z"
    EOF
    

    La opción volume crea un montaje de enlace entre el directorio source:destination. La opción :Z aborda cualquier problema de permisos SELinux relacionado con el montaje de enlace. Podman lo hace volviendo a etiquetar el contenido del volumen para que coincida con la etiqueta dentro del contenedor.

    Aquí hay una versión completa del cuaderno de estrategias como referencia.

  3. Ejecutar el manual.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  4. Compruebe que el contenedor se está ejecutando.

    podman ps
    

    Ejemplo de salida:

    CONTAINER ID  IMAGE                                   COMMAND               CREATED         STATUS             PORTS                 NAMES
    f74aa726d470  ghcr.io/oracle/oraclelinux9-nginx:1.20  nginx -g daemon o...  10 minutes ago  Up 10 minutes ago  0.0.0.0:8080->80/tcp  nginx
    
  5. Verifique que el archivo index.html existe.

    ls -l /home/oracle/nginx
    

    Ejemplo de salida:

    [oracle@ol-server podman-project]$ ls -l /home/oracle/nginx/
    total 4
    -rwxr-xr-x. 1 oracle oracle 41 Nov  5 16:46 index.html
    
  6. Verifique el montaje de enlace.

    Utilice cURL para mostrar la página index.html del contenedor y el mensaje de bienvenida.

    curl localhost:8080
    

    Donde 8080 es la asignación de puerto local al puerto 80 en el contenedor.

Pasos Siguientes

Al completar este tutorial, debe comprender cómo automatizar su trabajo con Podman y contenedores mediante Oracle Linux Automation Engine. Explore el resto de módulos de la recopilación containers.podman para crear cuadernos de estrategias adicionales que automatizen la infraestructura.

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito 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.