Note :
- Ce tutoriel est disponible dans un environnement de laboratoire gratuit fourni par Oracle.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments d'Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles qui sont propres à votre environnement en nuage.
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 à :
- Exécuter des playbooks localement
- Ajouter une collection à un livre de jeu
- Installer Podman
- Extraire et exécuter un conteneur oraclelinux:9
Préalables
-
Un système Oracle Linux avec la configuration suivante :
- un utilisateur non racine avec les autorisations sudo
- installer Oracle Linux Automation Engine
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.
-
Ouvrez un terminal sur le Luna Desktop.
-
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 collections requises.
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
-
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
-
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
-
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 d'exigences.
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 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 pouransible
. 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.
-
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ègesudo
par défaut.
-
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 ligneconnection:
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.
-
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.
-
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
-
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 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.
-
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.
-
Exécutez le playbook.
ansible-playbook ~/podman-project/podman-playbook.yml
-
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.
-
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.
-
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
-
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 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.
-
Exécutez le playbook.
ansible-playbook ~/podman-project/podman-playbook.yml
-
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
-
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 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.
Liens connexes
- Documentation sur Oracle Linux Automation Manager
- Formation sur Oracle Linux Automation Manager
- Parcours d'apprentissage pour Oracle Linux
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.
Configure Podman Containers with Oracle Linux Automation Engine
G38946-01
Copyright ©2021, Oracle and/or its affiliates.