Note :

Configurer les conteneurs Podman avec Oracle Linux Automation Engine

Présentation

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

Lors de l'exécution de livres de jeu, Oracle Linux Automation Engine exécute les tâches sur des machines correspondant à la directive hosts: dans le livre de jeu. 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 jeu localement.

Objectifs

Dans ce tutoriel, vous apprendrez à :

Préalables

Déployer Oracle Linux Automation Engine

Note : Si vous exécutez votre propre location, lisez les préalables du projet linux-virt-labs GitHub README.md et remplissez les conditions requises avant de déployer l'environnement de laboratoire.

  1. Ouvrez un terminal sur le Luna Desktop.

  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 collections requises.

    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. Sert à créer 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 de l'exercice.

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

    L'environnement de laboratoire gratuit nécessite la variable supplémentaire ansible_python_interpreter pour localhost, car il installe l'ensemble RPM pour la trousse SDK Oracle Cloud Infrastructure pour Python. L'emplacement d'installation de cet ensemble est 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 une incidence sur les lectures exécutées sur des hôtes autres que localhost.

    La forme de déploiement par défaut utilise l'unité centrale 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 principale d'Oracle Linux sur la ligne de commande.

    Par exemple : -e os_version="9"

    Important : Attendez que le livre de jeu s'exécute avec succès et atteignez la tâche Mettre en pause. À ce stade du livre de jeu, l'installation d'Oracle Linux est terminée et les instances sont prêtes. Notez la lecture précédente, qui imprime les adresses IP publiques et privées des noeuds qu'il déploie.

Collections

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

Créer 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 d'exigences.

    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 montre 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.

    Note : Si la sortie affiche ERROR: Ansible requires the locale encoding to be UTF-8; Detected None., cela indique un paramètre de paramètres régionaux incorrect pour ansible. Corrigez le problème en définissant ces deux variables d'environnement :

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

Installer Podman

Les livres de jeu Oracle Linux Automation Engine se composent de lectures, composées de tâches mappées à des hôtes spécifiques. Ces tâches exécutent principalement des modules idempotents. Idempotency garantit que vous obtenez le même résultat, que le livre de jeu fonctionne une ou plusieurs fois. Ce tutoriel démontrera l'idémpotence en construisant le livre de jeu par étapes et en l'exécutant entre chaque changement.

Avant d'exécuter un conteneur Podman, nous devons installer les ensembles 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 jeu et les noms des tâches visent à rendre le livre de jeu auto-documentant. Les informations ci-dessous fournissent des explications supplémentaires sur quelques éléments clés.

    • hosts: localhost : Indique aux tâches de s'exécuter sur l'hôte local.
    • connection: local : Garantit que le lien reste local et ne s'exécute pas sur SSH.
    • become: yes : Augmente la tâche de cette section de livre de jeu à exécuter avec le privilège sudo par défaut.
  2. Exécutez le playbook.

    Puisque nous exécutons ce livre de jeu contre 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 voulions exécuter cette opération sur un hôte distant, nous devions mettre à jour l'entrée hosts:, supprimer la ligne connection: dans le livre de jeu, puis créer et référencer un fichier d'inventaire. Si vous n'êtes pas familier avec ce processus, vous pouvez vous référer à 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 avec succès sur localhost, signalant une modification de la tâche Installer 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
    

Extraire 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. Dans cette étape, nous allons extraire l'image Oracle Linux du registre de conteneurs GitHub.

Vous trouverez des informations supplémentaires sur les images Oracle Linux Developer ici.

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

    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 tirer une image, nous pouvons également tirer 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 d'accès au référentiel (ou nom de l'image) et marqueur 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 pas de correspondance.
    • detach : Exécute le conteneur en mode détaché.
    • expose : Présenter un port ou un intervalle de ports.
    • publish : Publiez le port d'un conteneur ou un intervalle de ports vers l'hôte.
  2. Exécutez le playbook.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  3. Vérifiez que le conteneur est 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 en cours d'exécution depuis 2 minutes.

  4. Arrêtez le conteneur.

    À l'aide de l'ID CONTENEUR de la sortie ci-dessus, exécutez :

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

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

Exécuter une image de conteneur avec un volume

Podman crée des volumes en ajoutant un montage de liaison, qui mappe un répertoire local à un répertoire dans le conteneur. Nous allons démontrer cette fonction 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. Bien que nous puissions effectuer efficacement et manuellement cette étape 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 jeu. Avant d'exécuter l'image, ajoutez ces tâches, qui créent un répertoire et le fichier index.html.

    Assurez-vous de laisser une ligne vide entre les tâches pour plus de lisibilité et de respecter les règles de syntaxe YAML et les directives d'alignement. Nous utiliserons sed pour terminer cette tâche, car elle permet l'insertion facile de blocs de texte dans un fichier à 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 d'autorisation SELinux liés au montage de liaison. Podman le fait en réétiquetant le contenu du volume pour qu'il corresponde à l'étiquette à l'intérieur du conteneur.

    Voici une version complète du livre de jeu à titre de référence.

  3. Exécutez le playbook.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  4. Vérifiez que le conteneur est 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 du port local au port 80 dans le conteneur.

Étapes suivantes

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

Autres ressources d'apprentissage

Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

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