Hinweis:

Ausführen von Podman Containern unter Systemd mit Quadlet

Einführung

Quadlet bietet eine Möglichkeit, Container unter systemd unter Oracle Linux auszuführen. Sie definieren den Container, der unter einem [Container]-Abschnitt in einem vertrauten Format mit der standardmäßigen Podman-Befehlszeilensyntax ausgeführt werden soll, und nutzen alle Vorteile der Optionen [Unit] und [Service] von systemd. Der Vorteil von systemd zum Ausführen Ihrer Container besteht darin, dass systemd in das Betriebssystem integriert ist, sodass Sie Container haben können, die beim Start des Systems beginnen oder die Reihenfolge und Abhängigkeit zwischen einer Mehrcontainerkonfiguration festlegen.

Quadlet ersetzt eine ältere Methode, die Podman für die Integration mit systemd verwendet. Diese Methode besteht darin, einen Container zu erstellen, eine Servicedatei zu generieren, die Servicedatei zu verschieben und den Service dann zu aktivieren. In vielen Fällen würden Benutzer Zeit damit verbringen, diese Schritte in Bash-Skripte zu schreiben und müssen dann diese Skripte und die generierten Dateien verwalten. Je nach Perspektive eines Benutzers vereinfacht Quadlet diese Aufgabe.

Ziele

In diesem Tutorial lernen Sie Folgendes:

Voraussetzungen

Oracle Linux bereitstellen

Hinweis: Wenn Sie in Ihrem eigenen Mandanten ausgeführt werden, lesen Sie das Projekt linux-virt-labs GitHub README.md, und schließen Sie die Voraussetzungen ab, bevor Sie die Übungsumgebung bereitstellen.

  1. Öffnen Sie ein Terminal auf dem Luna Desktop.

  2. Klonen Sie das Projekt linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Wechseln Sie in das Arbeitsverzeichnis.

    cd linux-virt-labs/ol
    
  4. Installieren Sie die erforderlichen Sammlungen.

    ansible-galaxy collection install -r requirements.yml
    
  5. Stellen Sie die Übungsumgebung bereit.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e use_podman=true -e update_all=true -e os_version="9"
    

    Die kostenlose Übungsumgebung erfordert die zusätzliche Variable local_python_interpreter, die ansible_python_interpreter für Wiedergaben festlegt, die auf localhost ausgeführt werden. Diese Variable ist erforderlich, da die Umgebung das RPM-Package für das Oracle Cloud Infrastructure-SDK für Python installiert, das sich unter den python3.6-Modulen befindet.

    Die Standard-Deployment-Ausprägung verwendet die AMD-CPU und Oracle Linux 8. Um eine Intel-CPU oder Oracle Linux 9 zu verwenden, fügen Sie dem Deployment-Befehl -e instance_shape="VM.Standard3.Flex" oder -e os_version="9" hinzu.

    Wichtig: Warten Sie, bis die Arbeitsmappe erfolgreich ausgeführt wurde, und erreichen Sie die Aufgabe "Unterbrechen". In dieser Phase des Spiels ist die Installation von Oracle Linux abgeschlossen, und die Instanzen sind bereit. Beachten Sie die vorherige Wiedergabe, in der die öffentlichen und privaten IP-Adressen der bereitgestellten Knoten sowie alle anderen Deployment-Informationen gedruckt werden, die während der Ausführung der Übung benötigt werden.

Podman-Funktionen bestätigen

Das Container-Tool-Package in Oracle Linux stellt die neuesten Versionen von Podman, Buildah, Skopeo und zugehörigen Abhängigkeiten bereit.

  1. Öffnen Sie ein Terminal, und stellen Sie über SSH eine Verbindung zur Instanz ol-node-01 her.

    ssh oracle@<ip_address_of_instance>
    
  2. Prüfen Sie die Podman-Version.

    podman -v
    
  3. Vergewissern Sie sich, dass die Podman-CLI funktioniert.

    podman run quay.io/podman/hello
    

    Beispielausgabe:

    [oracle@ol-server ~]$ podman run quay.io/podman/hello
    Trying to pull quay.io/podman/hello:latest...
    Getting image source signatures
    Copying blob f82b04e85914 done
    Copying config dbd85e09a1 done
    Writing manifest to image destination
    Storing signatures
    !... Hello Podman World ...!
    
             .--"--.
           / -     - \
          / (O)   (O) \
       ~~~| -=(,Y,)=- |
        .---. /`  \   |~~
     ~/  o  o \~~~~.----. ~~
      | =(X)= |~  / (O (O) \
       ~~~~~~~  ~| =(Y_)=-  |
      ~~~~    ~~~|   U      |~~
    
    Project:   https://github.com/containers/podman
    Website:   https://podman.io
    Documents: https://docs.podman.io
    Twitter:   @Podman_io
    

Quadlets erstellen

Ein Quadlet ist nur die Erstellung einer .container-Datei in einem bestimmten Verzeichnis mit einem [Container]-Abschnitt, in dem die Startoptionen des Containers beschrieben werden.

  1. Erstellen Sie das systemd-Containerverzeichnis des Benutzers.

    mkdir -p ~/.config/containers/systemd
    
  2. Erstellen Sie eine .container-Datei.

    cat << EOF | tee ~/.config/containers/systemd/test-ol.container > /dev/null
    [Unit]
    Description=My First Quadlet
    
    [Container]
    Image=ghcr.io/oracle/oraclelinux:9
    AutoUpdate=registry
    Exec=sleep 60
    
    [Service]
    Restart=always
    TimeoutStartSec=900
    
    [Install]
    WantedBy=multi-user.target default.target
    EOF
    

    Dieses Quadlet führt den Oracle Linux-Container aus und führt eine sleep 60 im Container aus. Sobald sleep 60 abgeschlossen ist, wird der Container beendet, und systemd startet ihn neu. Für den Abschnitt [Container] sind weitere Optionen vorhanden, und eine Liste ist in der Upstream-Dokumentation verfügbar.

    Weitere Informationen zu den Optionen [Service], [Unit] und [Install] finden Sie in der Manpage systemd.unit(5).

  3. Aktivieren Sie das Verbleiben für den Benutzer.

    sudo loginctl enable-linger oracle
    
  4. Informieren Sie systemd über die neue Unit-Datei.

    systemctl --user daemon-reload
    

    Mit diesem Schritt wird test-ol.service basierend auf der Datei test-ol.container erstellt.

  5. Starten Sie den Service.

    systemctl --user start test-ol.service
    

    Der Service führt podman aus, um das Oracle Linux-Image herunterzuladen, und gibt dann die sleep 60 im Containerimage aus.

  6. Prüfen Sie den Status des Service.

    systemctl --user status test-ol.service
    

    Wiederholen Sie diesen Befehl, um den Container nach der Ausführung von sleep 60 zu stoppen und neu zu starten. Sie können die Logs auch prüfen, indem Sie sudo journalctl _SYSTEMD_USER_UNIT=test-ol.service ausführen.

  7. Container aktualisieren.

    Mit dem Eintrag AutoUpdate=registry im Abschnitt [Container] aktivieren Sie das Feature podman auto-update, um die Containerimages zu aktualisieren. Wenn dies jedoch automatisch und nicht manuell erfolgen soll, müssen Sie auch den erforderlichen Service aktivieren.

    systemctl --user enable podman-auto-update
    

    Sie können podman auto-update --dry-run manuell ausführen, um zu prüfen, ob ein Update verfügbar ist. Da wir gerade das neueste Bild vor ein paar Minuten heruntergeladen haben, gibt es keine Updates, und daher gibt es nichts zu tun. Wenn jedoch ein Update erfolgt, können Sie die Option --dry-run entfernen, und podman ruft das neueste Image ab und startet den Container neu.

Nächste Schritte

In diesem Tutorial wird gezeigt, wie Sie Quadlet verwenden, um einen minimalen Container mit systemd zu verwalten. Erfahren Sie mehr, indem Sie die Dokumentation durchlesen und zusätzliche Container erstellen, die Speicher nutzen und Multi-Container-Abhängigkeiten aufweisen.

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.