Nota

Implementa i carichi di lavoro Kubernetes utilizzando Podman con Oracle Cloud Native Environment

Introduzione

Podman kube offre a sviluppatori e amministratori un modo per testare i carichi di lavoro Kubernetes utilizzando Podman prima di distribuirli in un cluster Kubernetes. Il comando podman kube viene utilizzato per generare YAML conforme a Kubernetes da container o pod Podman esistenti o per creare container/pod da un file YAML Kubernetes. Ciò offre un modo conveniente per eseguire facilmente la transizione tra ambienti Podman e Kubernetes, sfruttando in tal modo il meglio di entrambi gli ecosistemi per ridurre i cicli di sviluppo e test.

Nota: il comando podman kube play legge qualsiasi file YAML Kubernetes valido e avvia i pod, i container o i volumi definiti nel file YAML nell'istanza Podman in esecuzione locale. Tuttavia, non tutti i tipi di file YAML Kubernetes sono supportati; i tipi di file Kubernetes attualmente supportati sono:

Un elenco più dettagliato dei campi YAML Kubernetes attualmente supportati dal comando podman kube play si trova qui.

Podman può applicare i file YAML Kubernetes supportati a un cluster Kubernetes utilizzando il comando podman kube apply. Questi passi funzionano con qualsiasi cluster Kubernetes. Tuttavia, consigliamo Oracle Cloud Native Environment come opzione di distribuzione Kubernetes. Per ulteriori informazioni, consulta la documentazione di Oracle Cloud Native Environment.

Nota: questa esercitazione illustra l'uso di Podman per generare file YAML Kubernetes e, successivamente, mostra come distribuirli in un cluster Kubernetes. Qualsiasi ulteriore gestione degli oggetti distribuiti deve essere completata utilizzando i comandi kubectl. Per ulteriori informazioni sull'uso di kubectl, consultare la documentazione a monte.

Obiettivi

In questo tutorial imparerai a:

Prerequisiti

Configura Oracle Cloud Native Environment

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/ocne2
    
  4. Installare le raccolte richieste.

    ansible-galaxy collection install -r requirements.yml
    
  5. Implementare l'ambiente di laboratorio.

    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'"
    

    L'ambiente di esercitazione pratica gratuito richiede l'aggiunta della variabile local_python_interpreter, che imposta ansible_python_interpreter per le riproduzioni eseguite su localhost. Questa variabile è necessaria perché l'ambiente installa il pacchetto RPM per l'SDK Oracle Cloud Infrastructure per Python, situato sotto i moduli python3.6.

    La forma di distribuzione predefinita utilizza la CPU AMD e Oracle Linux 8. Per utilizzare una CPU Intel o Oracle Linux 9, aggiungere -e instance_shape="VM.Standard3.Flex" o -e os_version="9" al comando di distribuzione.

    Importante: attendere che il playbook venga eseguito correttamente e raggiungere il task di sospensione. In questa fase del playbook, l'installazione di Oracle CNE è completa e le istanze sono pronte. Prendi nota del gioco precedente, che stampa gli indirizzi IP pubblici e privati dei nodi che distribuisce e qualsiasi altra informazione di distribuzione necessaria durante l'esecuzione del laboratorio.

Accedi al cluster Kubernetes

  1. Aprire un terminale e connettersi tramite SSH all'istanza ocne.

    ssh oracle@<ip_address_of_instance>
    
  2. Attendere che il cluster si stabilizzi e che tutti i pod segnalino che sono in esecuzione.

    watch kubectl get pods -A
    

    Dopo che tutti i pod mostrano uno STATUS di In esecuzione, digitare Ctrl-C per uscire dal comando watch.

  3. Confermare il numero di nodi presenti.

    kubectl get nodes
    

Conferma funzionamento Podman

  1. Verificare la versione di Podman.

    podman -v
    
  2. Verificare che l'interfaccia CLI Podman sia funzionante.

    podman run quay.io/podman/hello
    

    Output di esempio:

    [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
    

Creare i file YAML Kubernetes

La funzione Podman Kube può funzionare con i file YAML Kubernetes generati da Podman o con i file YAML Kubernetes nativi. Diamo un'occhiata a entrambi a loro volta.

Crea un pod Podman con un container e genera Kubernetes YAML

Prima di tutto, distribuisci un contenitore in un pod Podman localmente. Quindi utilizza la distribuzione per generare un file YAML Kubernetes che può essere distribuito in un cluster Kubernetes.

  1. Crea un pod con un server Nginx che mappa la porta 8081 all'host.

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

    Questo crea un nuovo pod chiamato 'my-nginx', distribuisce un contenitore Nginx all'interno del pod e mappa il contenitore alla porta 8081 sull'host.

  2. Verificare che il pod sia stato creato.

    podman pod ps
    

    Output di esempio:

    [oracle@ocne ~]$ podman pod ps
    POD ID        NAME        STATUS      CREATED         INFRA ID      # OF CONTAINERS
    e5248f6968b3  my-nginx    Running     48 seconds ago  5e41ad85e232  2
    
  3. Confermare che è possibile accedere al nuovo pod e al relativo contenitore dall'host.

    curl http://localhost:8081
    
  4. Genera un file Kubernetes YAML dal pod in esecuzione.

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

    Il comando Podman generate crea un file conforme a Kubernetes da un pod Podman in esecuzione con container. Rendendolo molto utile per la creazione di prototipi locali e, successivamente, la creazione di un file manifest conforme a Kubernetes, puoi distribuirlo in un cluster Kubernetes.

  5. Rivedere il file generato.

    cat nginx-pod.yaml
    

    Output di esempio:

    [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
    

Rimuovi pod e container distribuiti utilizzando Podman Kube

I pod e i relativi contenitori associati possono essere rimossi facilmente una volta terminato il lavoro con loro.

  1. Eliminare il pod my-nginx.

    podman kube down nginx-pod.yaml
    
  2. Confermare che entrambi i pod sono stati eliminati.

    podman pod ps
    

    Output di esempio:

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

    Ciò conferma che il file YAML Kubernetes generato da Podman creato in precedenza è valido.

Utilizzare Podman Kube per distribuire Kubernetes YAML in un cluster Kubernetes

Podman può essere distribuito in un cluster Kubernetes solo se l'host dispone di un file kubeconfig valido situato nella directory $HOME/.kube.

Conferma validità ambiente

  1. Verificare che la variabile di ambiente KUBECONFIG sia impostata.

    env | grep KUBE
    

    Output di esempio:

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

    Informazioni: se è installato kubectl e sono presenti più file di configurazione nella directory ${HOME}/.kube, eseguire questo comando per confermare quale file di configurazione è attualmente utilizzato da kubectl:

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

    Output di esempio:

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

    Nota: eseguire qualsiasi comando kubectl con verbosity impostato sul livello 6 o superiore e il kubeconfig corrente utilizzato è incluso nell'output.

Distribuire un file YAML Kubernetes valido

  1. Creare un file YAML Kubernetes.

    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. Utilizzare Podman per distribuire il file testpod.yaml nel cluster Kubernetes.

    podman kube apply -f testpod.yaml
    

    Output di esempio:

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

    Nota: questa opzione viene distribuita nello spazio di nomi predefinito per impostazione predefinita.

  3. Confermare che il pod è stato distribuito nel cluster.

    kubectl get pods
    

    Output di esempio:

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

    Ciò conferma che podman ha distribuito un pod denominato 'my-pod' nel cluster.

  4. Confermare la distribuzione di Nginx come previsto.

    kubectl describe pods/my-pod
    

    Output di esempio:

    [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
    

    Ciò conferma che il comando podman kube play ha utilizzato il file YAML Kubernetes per distribuire un pod direttamente in un cluster Kubernetes.

Distribuisci YAML Kubernetes generato da Podman in un cluster Kubernetes

Distribuisci il file YAML Kubernetes generato da Podman creato all'inizio dell'esercitazione in un cluster Kubernetes.

  1. Distribuire il file nginx-pod.yaml nel cluster Kubernetes.

    podman kube apply -f nginx-pod.yaml
    

    Output di esempio:

    [oracle@ocne ~]$ podman kube apply -f nginx-pod.yaml
    Deploying to cluster...
    Successfully deployed workloads to cluster!
    
  2. Confermare che il pod è stato distribuito nel cluster.

    kubectl get pods
    

    Output di esempio:

    [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. Confermare la distribuzione di Nginx come previsto.

    kubectl describe pods/my-nginx
    

    Ciò conferma che Podman ha implementato con successo un YAML Kubernetes generato da podman denominato 'my-nginx' nel cluster Kubernetes.

Passi successivi

Questa esercitazione ha illustrato come utilizzare Podman per distribuire i carichi di lavoro Kubernetes in un cluster Kubernetes con Oracle Cloud Native Environment. Controlla la stazione di formazione Oracle Linux per ulteriori esercitazioni e contenuti.

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.