Remarques :
- Ce tutoriel est disponible dans un environnement d'atelier gratuit fourni par Oracle.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. Lorsque vous terminez votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
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 à :
- Exécuter des playbooks localement
- Ajouter une collection à un guide de lecture
- Installation de Podman
- Extraction et exécution d'un conteneur oraclelinux:9
Prérequis
-
Système Oracle Linux avec la configuration suivante :
- un utilisateur non root disposant des autorisations sudo
- installer Oracle Linux Automation Engine
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.
-
Ouvrez un terminal sur le bureau Luna.
-
Clonez le projet
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Accédez au répertoire de travail.
cd linux-virt-labs/olam
-
Installez les ensembles requis.
ansible-galaxy collection install -r requirements.yml
-
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
-
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
-
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
-
Ouvrez un nouveau terminal et connectez-vous au système ol-control-node via SSH.
ssh oracle@<ip_address_of_instance>
-
Créez un répertoire de travail.
mkdir -p ~/podman-project
-
Créez un fichier de conditions.
cat << 'EOF' | tee ~/podman-project/requirements.yml > /dev/null --- collections: - name: containers.podman EOF
-
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 pouransible
. 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.
-
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ègesudo
par défaut.
-
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 ligneconnection:
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.
-
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.
-
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
-
Exécutez le playbook.
ansible-playbook ~/podman-project/podman-playbook.yml
-
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.
-
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.
-
Exécutez le playbook.
ansible-playbook ~/podman-project/podman-playbook.yml
-
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.
-
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.
-
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
-
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épertoiresource: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.
-
Exécutez le playbook.
ansible-playbook ~/podman-project/podman-playbook.yml
-
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
-
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
-
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.
Liens connexes
- Documentation d'Oracle Linux Automation Manager
- Formation Oracle Linux Automation Manager
- Centre de formation Oracle Linux
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.
Configure Podman Containers with Oracle Linux Automation Engine
F52948-04
Copyright ©2021, Oracle and/or its affiliates.