Nota

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:

Prerequisiti

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.

  1. Aprire un terminale sul Luna Desktop.

  2. Duplicare il progetto linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Passare alla directory di lavoro.

    cd linux-virt-labs/olam
    
  4. Installare le raccolte richieste.

    ansible-galaxy collection install -r requirements.yml
    
  5. 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
    
  6. 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
    
  7. 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

  1. Aprire un nuovo terminale e connettersi al sistema ol-control-node tramite SSH.

    ssh oracle@<ip_address_of_instance>
    
  2. Creare una directory di lavoro.

    mkdir -p ~/podman-project
    
  3. Creare un file dei requisiti.

    cat << 'EOF' | tee ~/podman-project/requirements.yml > /dev/null
    ---
    collections:
      - name: containers.podman
    EOF
    
  4. 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 per ansible. 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.

  1. 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 privilegio sudo per impostazione predefinita.
  2. 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 riga connection: 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.

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

  1. 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
    
  2. Eseguire il playbook.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  3. 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.

  1. 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.
  2. Eseguire il playbook.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  3. 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.

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

  1. 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
    
  2. 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 directory source: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.

  3. Eseguire il playbook.

    ansible-playbook ~/podman-project/podman-playbook.yml
    
  4. 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
    
  5. 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
    
  6. 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.

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.