Nota
- Questa esercitazione è disponibile in un ambiente di esercitazione pratica gratuito fornito da Oracle.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Quando completi il tuo laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Configurare i container Podman con Oracle Linux Automation Engine
Introduzione
Oracle Linux Automation Engine consente agli utenti di creare un playbook per l'installazione di Podman e quindi l'esecuzione e la gestione dei container utilizzando la raccolta containers.podman.
Durante l'esecuzione dei playbook, Oracle Linux Automation Engine esegue i task sui computer corrispondenti alla direttiva hosts:
nel playbook. In genere, questi host sono definiti in un file di inventario e possono essere remoti o locali. In questo tutorial, dimostreremo come eseguire un playbook localmente.
Obiettivi
In questo tutorial imparerai a:
- Esegui playbook localmente
- Aggiungere una raccolta a un playbook
- Installa Podman
- Pull ed esecuzione di un contenitore oraclelinux:9
Prerequisiti
-
Un sistema Oracle Linux con la configurazione indicata di seguito.
- un utente non root con autorizzazioni sudo
- installare Oracle Linux Automation Engine
Implementa Oracle Linux Automation Engine
Nota: se è in esecuzione nella propria tenancy, leggere il progetto linux-virt-labs
GitHub README.md e completare i prerequisiti prima di distribuire l'ambiente di laboratorio.
-
Aprire un terminale sul Luna Desktop.
-
Duplicare il progetto
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Passare alla directory di lavoro.
cd linux-virt-labs/olam
-
Installare le raccolte richieste.
ansible-galaxy collection install -r requirements.yml
-
Aggiornare la configurazione dell'istanza di Oracle Linux.
cat << EOF | tee instances.yml > /dev/null compute_instances: 1: instance_name: "ol-control-node" type: "control" olam_type: olae EOF
-
Creare un file di inventario.
cat << EOF | tee hosts > /dev/null localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6 EOF
-
Implementare l'ambiente di laboratorio.
ansible-playbook create_instance.yml -i hosts -e "@instances.yml"
L'ambiente di laboratorio gratuito richiede la variabile extra
ansible_python_interpreter
per localhost perché installa il pacchetto RPM per Oracle Cloud Infrastructure SDK per Python. La posizione per l'installazione di questo pacchetto si trova sotto i moduli Python predefiniti del sistema in base alla versione di Oracle Linux in uso. L'utilizzo di una variabile di inventario evita di influire sulle riproduzioni in esecuzione su host diversi da localhost.La forma di distribuzione predefinita utilizza la CPU AMD. È possibile modificare la forma delle istanze passando una nuova definizione di variabile forma sulla riga di comando.
Ad esempio:
-e instance_shape="VM.Standard3.Flex"
Analogamente, la versione predefinita dell'immagine Oracle Linux utilizza la variabile
os_version
definita nel file `default_vars.yml. È possibile modificare questo valore passando la versione principale di Oracle Linux dalla riga di comando.Ad esempio:
-e os_version="9"
Importante: attendere che il playbook venga eseguito correttamente e raggiungere il task di sospensione. In questa fase del playbook, l'installazione di Oracle Linux è completa e le istanze sono pronte. Nota la riproduzione precedente, che stampa gli indirizzi IP pubblici e privati dei nodi che distribuisce.
Raccolte
Le raccolte sono un formato di distribuzione per i contenuti di Oracle Linux Automation Engine che possono includere playbook, ruoli, moduli e plugin. Questa esercitazione installerà la raccolta containers.podman
utilizzando un file requirements.yml
. Un file requirements.yml
consente l'installazione di raccolte, ruoli o entrambi in base alle chiavi definite nel file.
Creazione di un file dei requisiti
-
Aprire un nuovo terminale e connettersi al sistema ol-control-node tramite SSH.
ssh oracle@<ip_address_of_instance>
-
Creare una directory di lavoro.
mkdir -p ~/podman-project
-
Creare un file dei requisiti.
cat << 'EOF' | tee ~/podman-project/requirements.yml > /dev/null --- collections: - name: containers.podman EOF
-
Installare la raccolta.
ansible-galaxy collection install -r ~/podman-project/requirements.yml
L'output mostra il processo di recupero del file di archivio compresso dal sito Galaxy e quindi l'installazione nella directory home in
.ansible/collections.
Nota: se l'output mostra
ERROR: Ansible requires the locale encoding to be UTF-8; Detected None.
, indica un'impostazione delle impostazioni nazionali errata peransible
. Risolvere il problema impostando le due variabili di ambiente indicate di seguito.export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
Installa Podman
Le playbook di Oracle Linux Automation Engine sono costituite da playbook, composti da task mappati a host specifici. Questi task eseguono principalmente moduli idempotenti. L'idempotenza ti assicura di ottenere lo stesso risultato se il playbook viene eseguito una o più volte. Questo tutorial dimostrerà l'idempotenza costruendo il playbook in fasi e eseguendolo tra ogni modifica.
Prima di eseguire un container Podman, è necessario installare i pacchetti Podman dal repository AppStream di Oracle Linux.
-
Creare il file 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 playbook e i nomi dei compiti mirano a rendere il playbook auto-documentante. Le informazioni seguenti forniscono ulteriori spiegazioni su alcuni elementi chiave.
hosts: localhost
: indica i task da eseguire su localhost.connection: local
: garantisce che il collegamento rimanga locale e non venga eseguito su SSH.become: yes
: eleva il task all'interno di questa sezione del playbook in modo che venga eseguito con il privilegiosudo
per impostazione predefinita.
-
Eseguire il playbook.
Poiché eseguiamo questo playbook contro l'host locale, non c'è motivo di creare o fare riferimento esplicitamente a un file di inventario. Tuttavia, se si desidera eseguire questa operazione su un host remoto, è necessario aggiornare la voce
hosts:
, rimuovere la rigaconnection:
nel playbook, quindi creare e fare riferimento a un file di inventario. Se non hai familiarità con questo processo, puoi fare riferimento ad alcune delle nostre altre esercitazioni, collegate alla Training Station di Oracle Linux alla fine di questa esercitazione.ansible-playbook ~/podman-project/podman-playbook.yml
L'output del comando dovrebbe indicare che è stato eseguito correttamente in localhost, riportando una modifica nell'attività Installa podman. Questo stato indica che l'installazione del modulo container-tools è stata completata in modo appropriato.
-
Verificare il pacchetto Podman installato visualizzandone la versione.
podman --version
Pull di un'immagine
Una volta installato Podman, possiamo estrarre le immagini dal nostro registro di scelta e posizionarle localmente. In questo passo, estraeremo l'immagine di Oracle Linux dal Container Registry GitHub.
Ulteriori informazioni sulle immagini per sviluppatori Oracle Linux sono disponibili qui.
-
Aggiungere il task per estrarre l'immagine di un contenitore nel playbook.
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
-
Eseguire il playbook.
ansible-playbook ~/podman-project/podman-playbook.yml
-
Verificare che Podman abbia estratto l'immagine.
podman images
Output di esempio:
REPOSITORY TAG IMAGE ID CREATED SIZE ghcr.io/oracle/oraclelinux 9 97e22ab49eea 20 hours ago 254 MB
Esegui immagine contenitore
Piuttosto che tirare un'immagine, possiamo anche estrarre ed eseguire un contenitore in base a un'immagine in un unico passaggio. Cerchiamo di estrarre ed eseguire l'immagine per sviluppatori di Oracle Linux NGINX.
-
Aggiornare il file 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
dove:
name
: nome del contenitore.image
: percorso repository (o nome immagine) e tag utilizzati per creare il contenitore.state
: verifica la presenza di un contenitore in esecuzione corrispondente al nome e alla configurazione. Podman crea e avvia un nuovo contenitore quando non riesce a trovare una corrispondenza.detach
: esegue il contenitore in modalità scollegata.expose
: esporre una porta o un intervallo di porte.publish
: pubblica la porta di un contenitore o un intervallo di porte nell'host.
-
Eseguire il playbook.
ansible-playbook ~/podman-project/podman-playbook.yml
-
Assicurarsi che il contenitore sia in esecuzione.
podman ps
Output di esempio:
[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
L'output mostra che il contenitore è stato attivo e in esecuzione per 2 minuti.
-
Arrestare il contenitore.
Utilizzando l'ID CONTAINER dall'output precedente, eseguire le operazioni riportate di seguito.
podman stop $(podman ps -q -f name=nginx)
Questo comando utilizza l'ID CONTAINER come riferimento per arrestare il contenitore nginx.
Eseguire un'immagine contenitore con un volume
Podman crea volumi aggiungendo un mount di bind, che mappa una directory locale a una directory all'interno del contenitore. Dimostreremo questa funzione eseguendo lo stesso contenitore NGINX e sostituendo la pagina index.html predefinita con una personalizzata.
-
Aggiornare il file playbook.
Creare la directory locale. Mentre possiamo eseguire questo passo in modo efficiente e manuale una volta dalla riga di comando, automatizziamo invece. L'automazione di questo passo garantisce che la directory esista ogni volta che viene eseguita la playbook. Prima di eseguire l'immagine, aggiungere questi task, che creano una directory e il file index.html.
Assicurarsi di lasciare una riga vuota tra i task per la leggibilità e seguire le regole di sintassi YAML e le linee guida di allineamento. Useremo
sed
per completare questo compito, in quanto consente un facile inserimento di blocchi di testo in un file a una riga specifica.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
-
Aggiungere quindi l'opzione seguente alla fine del task
Run image
.cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null volume: "/home/oracle/nginx:/usr/share/nginx/html:Z" EOF
L'opzione
volume
crea un'attivazione di bind tra la directorysource:destination
. L'opzione:Z
risolve qualsiasi problema di autorizzazione SELinux relativo all'attivazione di bind. Podman lo fa rietichettando il contenuto del volume in modo che corrisponda all'etichetta all'interno del contenitore.Qui è disponibile come riferimento una versione completata del playbook.
-
Eseguire il playbook.
ansible-playbook ~/podman-project/podman-playbook.yml
-
Assicurarsi che il contenitore sia in esecuzione.
podman ps
Output di esempio:
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
-
Verificare che il file index.html esista.
ls -l /home/oracle/nginx
Output di esempio:
[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
-
Verificare l'attivazione di bind.
Utilizzare cURL per visualizzare la pagina index.html dal contenitore e il messaggio Benvenuti.
curl localhost:8080
Dove 8080 è la mappatura della porta locale alla porta 80 nel contenitore.
Passi successivi
Completando questa esercitazione, dovresti capire come automatizzare il tuo lavoro con Podman e i container utilizzando Oracle Linux Automation Engine. Esplora gli altri moduli della raccolta containers.podman per creare ulteriori playbook che automatizzano la tua infrastruttura.
Collegamenti correlati
- Documentazione di Oracle Linux Automation Manager
- Formazione su Oracle Linux Automation Manager
- Stazione di formazione Oracle Linux
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti di formazione gratuiti sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.
Per la documentazione del prodotto, visitare Oracle Help Center.
Configure Podman Containers with Oracle Linux Automation Engine
F52949-04
Copyright ©2021, Oracle and/or its affiliates.