Remarques :

Configuration des conteneurs Podman avec Oracle Linux Automation Engine

Introduction

Oracle Linux Automation Engine permet aux utilisateurs de créer un livre de jeux pour installer Podman, puis exécuter et gérer des conteneurs à l'aide de la collection containers.podman.

Lors de l'exécution des livres de jeux, Oracle Linux Automation Engine exécute les tâches sur les machines correspondant à la directive hosts: dans le livre de jeux. Ces hôtes sont généralement définis dans un fichier d'inventaire et peuvent être distants ou locaux. Dans ce tutoriel, nous allons montrer comment exécuter un livre de jeux localement.

Objectifs

Dans ce tutoriel, vous allez apprendre à :

Prérequis

Déployer Oracle Linux Automation Engine

Remarque : si vous êtes en cours d'exécution dans votre propre location, lisez le projet linux-virt-labs GitHub README.md et complétez les prérequis avant de déployer l'environnement d'exercice.

  1. Ouvrez un terminal sur le bureau Luna.

  2. Clonez le projet linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Accédez au répertoire de travail.

    cd linux-virt-labs/olam
    
  4. Installez les ensembles requis.

    ansible-galaxy collection install -r requirements.yml
    
  5. Mettez à jour la configuration de l'instance Oracle Linux.

    cat << EOF | tee instances.yml > /dev/null
    compute_instances:
      1:
        instance_name: "ol-control-node"
        type: "control"
    olam_type: olae
    EOF
    
  6. Créez un fichier d'inventaire.

    cat << EOF | tee hosts > /dev/null
    localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6
    EOF
    
  7. Déployez l'environnement d'exercice.

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

    L'environnement d'atelier gratuit requiert la variable supplémentaire ansible_python_interpreter pour localhost car il installe le package RPM pour le kit SDK Oracle Cloud Infrastructure pour Python. L'emplacement d'installation de ce package se trouve sous les modules Python par défaut du système en fonction de votre version d'Oracle Linux. L'utilisation d'une variable d'inventaire évite d'avoir un impact sur les lectures en cours d'exécution sur des hôtes autres que localhost.

    La forme de déploiement par défaut utilise l'UC AMD. Vous pouvez modifier la forme des instances en transmettant une nouvelle définition de variable de forme sur la ligne de commande.

    Par exemple : -e instance_shape="VM.Standard3.Flex"

    De même, la version par défaut de l'image Oracle Linux utilise la variable os_version définie dans le fichier `default_vars.yml. Vous pouvez modifier cette valeur en transmettant la version majeure d'Oracle Linux sur la ligne de commande.

    Par exemple : -e os_version="9"

    Important : attendez que le guide de lecture s'exécute correctement et atteignez la tâche de pause. A ce stade du manuel, l'installation d'Oracle Linux est terminée et les instances sont prêtes. Notez la lecture précédente, qui affiche les adresses IP publiques et privées des noeuds qu'elle déploie.

Collections

Les collections sont un format de distribution pour le contenu Oracle Linux Automation Engine qui peut inclure des livres de jeux, des rôles, des modules et des modules d'extension. Ce tutoriel va installer la collection containers.podman à l'aide d'un fichier requirements.yml. Un fichier requirements.yml permet l'installation de collections et/ou de rôles en fonction des clés définies dans le fichier.

Création d'un fichier de conditions

  1. Ouvrez un nouveau terminal et connectez-vous au système ol-control-node via SSH.

    ssh oracle@<ip_address_of_instance>
    
  2. Créez un répertoire de travail.

    mkdir -p ~/podman-project
    
  3. Créez un fichier de conditions.

    cat << 'EOF' | tee ~/podman-project/requirements.yml > /dev/null
    ---
    collections:
      - name: containers.podman
    EOF
    
  4. Installez la collection.

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

    La sortie présente le processus de récupération du fichier d'archive compressé à partir du site Galaxy, puis de son installation dans votre répertoire de base sous .ansible/collections.

    Remarque : si la sortie affiche ERROR: Ansible requires the locale encoding to be UTF-8; Detected None., cela indique un paramètre d'environnement linguistique incorrect pour ansible. Corrigez le problème en définissant les deux variables d'environnement suivantes :

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

Installation de Podman

Les livres de jeux Oracle Linux Automation Engine sont composés de jeux, qui sont composés de tâches mappées à des hôtes spécifiques. Ces tâches exécutent principalement des modules idempotents. L'idempotence garantit que vous obtenez le même résultat, que le playbook soit exécuté une ou plusieurs fois. Ce tutoriel montrera l'idempotence en construisant le livre de jeux par étapes et en l'exécutant entre chaque modification.

Avant d'exécuter un conteneur Podman, nous devons installer les packages Podman à partir du référentiel Oracle Linux AppStream.

  1. Créez le fichier playbook.

    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 livre de jeux et les noms des tâches visent à rendre le livre de jeux auto-documenté. Les informations ci-dessous fournissent des explications supplémentaires sur quelques éléments clés.

    • hosts: localhost : indique les tâches à exécuter sur l'hôte local.
    • connection: local : garantit que la liaison reste locale et ne s'exécute pas via SSH.
    • become: yes : élève la tâche de cette section de manuel à exécuter avec le privilège sudo par défaut.
  2. Exécutez le playbook.

    Comme nous exécutons ce livre de jeux sur l'hôte local, il n'y a aucune raison de créer ou de référencer explicitement un fichier d'inventaire. Toutefois, si nous voulons l'exécuter sur un hôte distant, nous devons mettre à jour l'entrée hosts:, enlever la ligne connection: dans le livre de jeux, puis créer et référencer un fichier d'inventaire. Si vous n'êtes pas familiarisé avec ce processus, vous pouvez vous reporter à certains de nos autres tutoriels, liés dans le poste de formation Oracle Linux à la fin de ce tutoriel.

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

    La sortie de la commande doit montrer qu'elle s'exécute correctement sur localhost, en signalant une modification de la tâche Install podman. Ce statut indique que nous avons correctement terminé l'installation du module container-tools.

  3. Vérifiez le package Podman installé en affichant sa version.

    podman --version
    

Extraction d'une image

Une fois que nous avons installé Podman, nous pouvons extraire des images de notre registre de choix et les mettre en scène localement. Cette étape consiste à extraire l'image Oracle Linux du registre de conteneurs GitHub.

Des informations supplémentaires sur les images Oracle Linux Developer sont disponibles ici.

  1. Ajoutez la tâche pour extraire une image de conteneur dans le livre de lecture.

    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. Exécutez le playbook.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  3. Vérifiez que Podman a extrait l'image.

    podman images
    

    Exemple de sortie :

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

Exécuter une image de conteneur

Plutôt que de simplement extraire une image, nous pouvons également extraire et exécuter un conteneur basé sur une image en une seule étape. Extrayons et exécutons l'image de développeur Oracle Linux NGINX.

  1. Mettez à jour le fichier playbook.

    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
    

    Où :

    • name : nom du conteneur.
    • image : chemin du référentiel (ou nom de l'image) et balise utilisés pour créer le conteneur.
    • state : recherche un conteneur en cours d'exécution correspondant au nom et à la configuration. Podman crée et démarre un nouveau conteneur lorsqu'il ne trouve aucune correspondance.
    • detach : exécute le conteneur en mode détaché.
    • expose : affiche un port ou une plage de ports.
    • publish : publiez le port d'un conteneur ou une plage de ports sur l'hôte.
  2. Exécutez le playbook.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  3. Vérifiez le conteneur en cours d'exécution.

    podman ps
    

    Exemple de sortie :

    [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 sortie indique que le conteneur est opérationnel depuis 2 minutes.

  4. Arrêtez le conteneur.

    A l'aide de l'ID CONTAINER de la sortie ci-dessus, exécutez :

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

    Cette commande utilise l'ID CONTAINER comme référence pour arrêter le conteneur nginx.

Exécution d'une image de conteneur avec un volume

Podman crée des volumes en ajoutant un montage bind, qui met en correspondance un répertoire local avec un répertoire dans le conteneur. Cette fonctionnalité est illustrée en exécutant le même conteneur NGINX et en remplaçant la page index.html par défaut par une page personnalisée.

  1. Mettez à jour le fichier playbook.

    Créez le répertoire local. Alors que nous pouvons effectuer cette étape efficacement et manuellement une fois à partir de la ligne de commande, automatisons-la à la place. L'automatisation de cette étape garantit que le répertoire existe à chaque exécution du livre de jeux. Avant d'exécuter l'image, ajoutez ces tâches, qui créent un répertoire et le fichier index.html.

    Veillez à laisser une ligne vide entre les tâches pour plus de lisibilité et suivez les règles de syntaxe YAML et les directives d'alignement. Nous allons utiliser sed pour effectuer cette tâche, car elle permet d'insérer facilement des blocs de texte dans un fichier sur une ligne spécifique.

    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. Ajoutez ensuite l'option suivante à la fin de la tâche Run image.

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

    L'option volume crée un montage de liaison entre le répertoire source:destination. L'option :Z résout tous les problèmes de droits d'accès SELinux liés au montage de liaison. Pour ce faire, Podman réétiquete le contenu du volume pour qu'il corresponde à l'étiquette à l'intérieur du conteneur.

    Ici est une version complète du livre de jeux à titre de référence.

  3. Exécutez le playbook.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  4. Vérifiez le conteneur en cours d'exécution.

    podman ps
    

    Exemple de sortie :

    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. Vérifiez que le fichier index.html existe.

    ls -l /home/oracle/nginx
    

    Exemple de sortie :

    [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. Vérifiez le montage de liaison.

    Utilisez cURL pour afficher la page index.html à partir du conteneur et le message Bienvenue.

    curl localhost:8080
    

    Où 8080 est le mappage de port local vers le port 80 dans le conteneur.

Etapes suivantes

A l'aide de ce tutoriel, vous devez comprendre comment automatiser votre travail avec Podman et les conteneurs à l'aide d'Oracle Linux Automation Engine. Explorez les autres modules de la collection containers.podman pour créer des livres de jeux supplémentaires qui automatisent votre infrastructure.

Ressources de formation supplémentaires

Explorez d'autres ateliers sur le site docs.oracle.com/learn ou accédez à d'autres contenus d'apprentissage gratuits sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, consultez Oracle Help Center.