Hinweis:

Kubernetes-Workloads mit Podman und Oracle Cloud Native Environment bereitstellen

Einführung

Mit Podman kube können Entwickler und Administratoren Kubernetes-Workloads mit Podman testen, bevor sie in einem Kubernetes-Cluster bereitgestellt werden. Mit dem Befehl podman kube wird Kubernetes-konforme YAML aus vorhandenen Podman-Containern oder -Pods generiert oder Container/Pods aus einer Kubernetes-YAML-Datei erstellt. Auf diese Weise können Sie problemlos zwischen Podman- und Kubernetes-Umgebungen wechseln und das Beste aus beiden Ökosystemen nutzen, um die Entwicklungs- und Testzyklen zu reduzieren.

Hinweis: Der Befehl podman kube play liest eine beliebige gültige Kubernetes-YAML-Datei und startet die Pods, Container oder Volumes, die in der YAML-Datei in der lokal ausgeführten Podman-Instanz definiert sind. Es werden jedoch nicht alle Kubernetes-YAML-Dateitypen unterstützt. Die derzeit unterstützten Kubernetes-Typen sind:

Eine ausführlichere Liste der Kubernetes-YAML-Felder, die derzeit vom Befehl podman kube play unterstützt werden, finden Sie hier.

Podman kann unterstützte Kubernetes-YAML-Dateien mit dem Befehl podman kube apply auf ein Kubernetes-Cluster anwenden. Diese Schritte funktionieren mit jedem Kubernetes-Cluster. Wir empfehlen Oracle Cloud Native Environment jedoch als Kubernetes-Deployment-Option. Weitere Informationen finden Sie in der Dokumentation zu Oracle Cloud Native Environment.

Hinweis: In diesem Tutorial wird die Verwendung von Podman zum Generieren von Kubernetes-YAML-Dateien veranschaulicht. Anschließend wird gezeigt, wie Sie diese in einem Kubernetes-Cluster bereitstellen. Jede weitere Verwaltung der bereitgestellten Objekte muss mit kubectl-Befehlen abgeschlossen werden. Weitere Informationen zur Verwendung von kubectl finden Sie in der Upstream-Dokumentation.

Ziele

In diesem Tutorial lernen Sie:

Voraussetzungen

Oracle Cloud Native Environment konfigurieren

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/ocne2
    
  4. Installieren Sie die erforderlichen Sammlungen.

    ansible-galaxy collection install -r requirements.yml
    
  5. Bereitstellen der Übungsumgebung.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e use_podman=true -e install_ocne_rpm=true -e create_ocne_cluster=true -e "ocne_cluster_node_options='-n 1 -w 1'"
    

    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 unter den python3.6-Modulen installiert.

    Die Standard-Deployment-Ausprägung verwendet 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 das Playbook erfolgreich ausgeführt wird, und erreichen Sie die Unterbrechungsaufgabe. In dieser Phase des Playbooks ist die Installation von Oracle CNE abgeschlossen, und die Instanzen sind bereit. Notieren Sie sich die vorherige Wiedergabe, in der die öffentlichen und privaten IP-Adressen der bereitgestellten Knoten und alle anderen Deployment-Informationen gedruckt werden, die während der Ausführung der Übung erforderlich sind.

Auf Kubernetes-Cluster zugreifen

  1. Öffnen Sie ein Terminal, und stellen Sie eine SSH-Verbindung zur ocne-Instanz her.

    ssh oracle@<ip_address_of_instance>
    
  2. Warten Sie, bis sich das Cluster stabilisiert hat, und alle Pods melden, dass sie ausgeführt werden.

    watch kubectl get pods -A
    

    Wenn alle Pods den STATUS Wird ausgeführt aufweisen, geben Sie Ctrl-C ein, um den Befehl watch zu beenden.

  3. Prüfen Sie, wie viele Knoten vorhanden sind.

    kubectl get nodes
    

Podman-Arbeiten bestätigen

  1. Prüfen Sie die Podman-Version.

    podman -v
    
  2. Stellen Sie sicher, 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
    

Kubernetes-YAML-Dateien erstellen

Das Podman-Kube-Feature kann entweder mit von Podman generierten Kubernetes-YAML-Dateien oder mit nativen Kubernetes-YAML-Dateien verwendet werden. Schauen wir uns beides an.

Podman-Pod mit einem Container erstellen und Kubernetes-YAML generieren

Stellen Sie zunächst einen Container lokal in einem Podman-Pod bereit. Generieren Sie dann mit dem Deployment eine Kubernetes-YAML-Datei, die in einem Kubernetes-Cluster bereitgestellt werden kann.

  1. Erstellen Sie einen Pod mit einem Nginx-Server, der Port 8081 dem Host zuordnet.

    podman run -dt --pod new:my-nginx --name nginx-container -p 8081:80 ghcr.io/oracle/oraclelinux9-nginx:1.20
    

    Dadurch wird ein neuer Pod mit dem Namen 'my-nginx' erstellt, ein Nginx-Container im Pod bereitgestellt und der Container Port 8081 auf dem Host zugeordnet.

  2. Prüfen Sie, ob der Pod erstellt wurde.

    podman pod ps
    

    Beispielausgabe:

    [oracle@ocne ~]$ podman pod ps
    POD ID        NAME        STATUS      CREATED         INFRA ID      # OF CONTAINERS
    e5248f6968b3  my-nginx    Running     48 seconds ago  5e41ad85e232  2
    
  3. Bestätigen Sie, dass Sie vom Host aus auf den neuen Pod und den zugehörigen Container zugreifen können.

    curl http://localhost:8081
    
  4. Generieren Sie eine Kubernetes-Datei YAML aus dem ausgeführten Pod.

    podman kube generate my-nginx --type pod > nginx-pod.yaml
    

    Der Befehl Podman generate erstellt eine Kubernetes-konforme Datei aus einem ausgeführten Podman-Pod mit Containern. Sie ist sehr nützlich für das lokale Prototyping und das anschließende Erstellen einer Kubernetes-kompatiblen Manifestdatei. Sie können sie in einem Kubernetes-Cluster bereitstellen.

  5. Prüfen Sie die generierte Datei.

    cat nginx-pod.yaml
    

    Beispielausgabe:

    [oracle@ocne ~]$ cat nginx-pod.yaml
    # Save the output of this file and use kubectl create -f to import
    # it into Kubernetes.
    #
    # Created with podman-4.9.4-rhel
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: "2025-08-11T14:08:13Z"
      labels:
        app: my-nginx
      name: my-nginx
    spec:
      containers:
      - env:
        - name: TERM
          value: xterm
        image: ghcr.io/oracle/oraclelinux9-nginx:1.20
        name: zenbardeen
        ports:
        - containerPort: 80
          hostPort: 8081
        tty: true
    

Mit Podman Kube bereitgestellte Pod- und Container entfernen

Pods und die zugehörigen Container können einfach entfernt werden, sobald Sie die Arbeit mit ihnen abgeschlossen haben.

  1. Löschen Sie den Pod my-nginx.

    podman kube down nginx-pod.yaml
    
  2. Vergewissern Sie sich, dass beide Pods gelöscht wurden.

    podman pod ps
    

    Beispielausgabe:

    [oracle@ocne ~]$ podman pod ps
    POD ID      NAME        STATUS      CREATED     INFRA ID    # OF CONTAINERS
    

    Dadurch wird bestätigt, dass die von Podman generierte Kubernetes-YAML-Datei, die Sie zuvor erstellt haben, gültig ist.

Mit Podman-Kube Kubernetes-YAML in einem Kubernetes-Cluster bereitstellen

Podman kann nur in einem Kubernetes-Cluster bereitgestellt werden, wenn Ihr Host über eine gültige Datei kubeconfig im Verzeichnis $HOME/.kube verfügt.

Bestätigen Sie, dass Ihre Umgebung gültig ist

  1. Stellen Sie sicher, dass die Umgebungsvariable KUBECONFIG festgelegt ist.

    env | grep KUBE
    

    Beispielausgabe:

    [oracle@ocne ~]$ env | grep KUBE
    KUBECONFIG=/home/oracle/.kube/kubeconfig.ocne.local
    

    Informationen: Wenn kubectl installiert ist und mehrere Konfigurationsdateien im Verzeichnis ${HOME}/.kube vorhanden sind, führen Sie diesen Befehl aus, um zu bestätigen, welche Konfigurationsdatei derzeit von kubectl verwendet wird:

    kubectl get pod  -v6 2>&1 | awk '/Config loaded from file:/{print $NF}'
    

    Beispielausgabe:

    [oracle@ocne ~]$ kubectl get pod  -v6 2>&1 | awk '/Config loaded from file:/{print $NF}'
    /home/oracle/.kube/kubeconfig.ocne.local
    

    Hinweis: Führen Sie einen beliebigen kubectl-Befehl aus, wobei verbosity auf Ebene 6 oder höher gesetzt ist und der aktuelle kubeconfig, der verwendet wird, in der Ausgabe enthalten ist.

Gültige Kubernetes-YAML-Datei bereitstellen

  1. Erstellen Sie eine Kubernetes YAML-Datei.

    cat << EOF | tee testpod.yaml > /dev/null
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      containers:
      - name: test-container
        image: ghcr.io/oracle/oraclelinux9-nginx:1.20
        ports:
        - containerPort: 8080
    EOF
    
  2. Verwenden Sie Podman, um die Datei testpod.yaml in Ihrem Kubernetes-Cluster bereitzustellen.

    podman kube apply -f testpod.yaml
    

    Beispielausgabe:

    [oracle@ocne ~]$ podman kube apply -f testpod.yaml
    Deploying to cluster...
    Successfully deployed workloads to cluster!
    

    Hinweis: Dieser wird standardmäßig im Standard-Namespace bereitgestellt.

  3. Vergewissern Sie sich, dass der Pod in Ihrem Cluster bereitgestellt ist.

    kubectl get pods
    

    Beispielausgabe:

    [oracle@ocne ~]$ kubectl get pods
    NAME      READY   STATUS    RESTARTS   AGE
    my-pod    1/1     Running   0          23s
    

    Dadurch wird bestätigt, dass Podman einen Pod mit dem Namen "my-pod" im Cluster bereitgestellt hat.

  4. Stellen Sie sicher, dass Nginx wie erwartet bereitgestellt wird.

    kubectl describe pods/my-pod
    

    Beispielausgabe:

    [oracle@ocne ~]$ kubectl describe pods/my-pod
    Name:             my-pod
    Namespace:        default
    Priority:         0
    Service Account:  default
    Node:             ocne-worker-1/192.168.122.122
    Start Time:       Wed, 06 Aug 2025 15:09:55 +0000
    Labels:           <none>
    Annotations:      <none>
    Status:           Running
    IP:               10.244.1.6
    IPs:
      IP:  10.244.1.6
    Containers:
      test-container:
        Container ID:   cri-o://c2ea59274a702f9cdb044d92869b63da27249370a0c55bef2994f49a092e527a
        Image:          ghcr.io/oracle/oraclelinux9-nginx:1.20
        Image ID:       ghcr.io/oracle/oraclelinux9-nginx@sha256:16b15a609a172059f9e66ae412dde3b9febe0b0fdd4eb1084eac2783088de6f1
        Port:           8080/TCP
        Host Port:      0/TCP
        State:          Running
    ...
    ...
    ...
    Events:
      Type    Reason     Age   From               Message
      ----    ------     ----  ----               -------
      Normal  Scheduled  48m   default-scheduler  Successfully assigned default/my-pod to ocne-worker-1
      Normal  Pulling    48m   kubelet            Pulling image "ghcr.io/oracle/oraclelinux9-nginx:1.20"
      Normal  Pulled     48m   kubelet            Successfully pulled image "ghcr.io/oracle/oraclelinux9-nginx:1.20" in 10.66s (10.66s including waiting). Image size: 267010601 bytes.
      Normal  Created    48m   kubelet            Created container: test-container
      Normal  Started    48m   kubelet            Started container test-container
    

    Dadurch wird bestätigt, dass der Befehl podman kube play die Kubernetes-YAML-Datei verwendet hat, um einen Pod direkt in einem Kubernetes-Cluster bereitzustellen.

Von Podman generierte Kubernetes-YAML in einem Kubernetes-Cluster bereitstellen

Stellen Sie die Podman-generierte Kubernetes-YAML-Datei bereit, die Sie zu Beginn des Tutorials erstellt haben, in einem Kubernetes-Cluster.

  1. Stellen Sie die Datei nginx-pod.yaml in Ihrem Kubernetes-Cluster bereit.

    podman kube apply -f nginx-pod.yaml
    

    Beispielausgabe:

    [oracle@ocne ~]$ podman kube apply -f nginx-pod.yaml
    Deploying to cluster...
    Successfully deployed workloads to cluster!
    
  2. Vergewissern Sie sich, dass der Pod in Ihrem Cluster bereitgestellt ist.

    kubectl get pods
    

    Beispielausgabe:

    [oracle@ocne ~]$ kubectl get pods
    NAME       READY   STATUS    RESTARTS   AGE
    my-nginx   1/1     Running   0          1m59s
    my-pod     1/1     Running   0          5m12s
    
  3. Stellen Sie sicher, dass Nginx wie erwartet bereitgestellt wird.

    kubectl describe pods/my-nginx
    

    Dadurch wird bestätigt, dass Podman erfolgreich eine vom Podman generierte Kubernetes-YAML namens 'my-nginx' im Kubernetes-Cluster bereitgestellt hat.

Nächste Schritte

In diesem Tutorial wurde gezeigt, wie Sie Podman verwenden, um Kubernetes-Workloads in einem Kubernetes-Cluster mit Oracle Cloud Native Environment bereitzustellen. Weitere Tutorials und Inhalte finden Sie in der Oracle Linux-Schulungsstation.

Weitere Lernressourcen

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

Die Produktdokumentation finden Sie im Oracle Help Center.