Note:

Despliegue de cargas de trabajo de Kubernetes mediante Podman con Oracle Cloud Native Environment

Introducción

Podman kube proporciona a los desarrolladores y administradores una forma de probar las cargas de trabajo de Kubernetes mediante Podman antes de desplegarlas en un cluster de Kubernetes. El comando podman kube se utiliza para generar YAML compatible con Kubernetes a partir de contenedores Podman existentes o pods, o para crear contenedores/pods a partir de un archivo YAML de Kubernetes. Esto proporciona una forma conveniente de realizar la transición fácilmente entre los entornos de Podman y Kubernetes, aprovechando así lo mejor de ambos ecosistemas para reducir los ciclos de desarrollo y prueba.

Nota: El comando podman kube play lee cualquier archivo YAML de Kubernetes válido e inicia los pods, contenedores o volúmenes definidos en el archivo YAML en la instancia de Podman en ejecución local. Sin embargo, no todos los tipos de archivos YAML de Kubernetes están soportados; los tipos de Kubernetes soportados actualmente son:

Aquí encontrará una lista más detallada de los campos de YAML de Kubernetes soportados actualmente por el comando podman kube play.

Podman puede aplicar archivos YAML de Kubernetes soportados a un cluster de Kubernetes mediante el comando podman kube apply. Estos pasos funcionan con cualquier cluster de Kubernetes. Sin embargo, recomendamos Oracle Cloud Native Environment como opción de despliegue de Kubernetes. Para obtener más información, consulte la documentación de Oracle Cloud Native Environment.

Nota: En este tutorial se muestra el uso de Podman para generar archivos YAML de Kubernetes y, posteriormente, cómo desplegarlos en un cluster de Kubernetes. Cualquier gestión posterior de los objetos desplegados debe completarse con los comandos kubectl. Para obtener más información sobre el uso de kubectl, consulte la documentación de flujo ascendente.

Objetivos

En este tutorial, aprenderá a:

Requisitos

Configurar Oracle Cloud Native Environment

Nota: Si se ejecuta en su propio arrendamiento, lea el proyecto linux-virt-labs GitHub README.md y complete los requisitos antes de desplegar el entorno de prácticas.

  1. Abra un terminal en Luna Desktop.

  2. Clone el proyecto linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Cambie al directorio de trabajo.

    cd linux-virt-labs/ocne2
    
  4. Instale las recopilaciones necesarias.

    ansible-galaxy collection install -r requirements.yml
    
  5. Despliegue el entorno de prácticas.

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

    El entorno de prácticas libres necesita la variable adicional local_python_interpreter, que define ansible_python_interpreter para las reproducciones que se ejecutan en localhost. Esta variable es necesaria porque el entorno instala el paquete RPM para el SDK para Python de Oracle Cloud Infrastructure, que se encuentra en los módulos python3.6.

    La unidad de despliegue por defecto utiliza la CPU AMD y Oracle Linux 8. Para utilizar una CPU Intel u Oracle Linux 9, agregue -e instance_shape="VM.Standard3.Flex" o -e os_version="9" al comando de despliegue.

    Importante: Espere a que el cuaderno de estrategias se ejecute correctamente y alcance la tarea de pausa. En esta etapa del manual, se ha completado la instalación del CNE de Oracle y las instancias están listas. Tome nota de la reproducción anterior, que imprime las direcciones IP públicas y privadas de los nodos que despliega y cualquier otra información de despliegue necesaria al ejecutar el ejercicio práctico.

Acceso al cluster de Kubernetes

  1. Abra un terminal y conéctese mediante SSH a la instancia de ocne.

    ssh oracle@<ip_address_of_instance>
    
  2. Espere a que el cluster se estabilice y todos los pods informen de que se están ejecutando.

    watch kubectl get pods -A
    

    Una vez que todos los pods muestren un STATUS de Running, escriba Ctrl-C para salir del comando watch.

  3. Confirme cuántos nodos están presentes.

    kubectl get nodes
    

Confirmar trabajos de Podman

  1. Compruebe la versión de Podman.

    podman -v
    
  2. Confirme que la CLI de Podman esté funcionando.

    podman run quay.io/podman/hello
    

    Salida de ejemplo:

    [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
    

Crear los archivos YAML de Kubernetes

La función Podman Kube puede funcionar con archivos YAML de Kubernetes generados por Podman o con archivos YAML nativos de Kubernetes. Veamos ambos a su vez.

Creación de un pod Podman con un contenedor y generación de YAML de Kubernetes

En primer lugar, despliega un contenedor en un pod Podman localmente. A continuación, utilice el despliegue para generar un archivo YAML de Kubernetes que se pueda desplegar en un cluster de Kubernetes.

  1. Cree un pod con un servidor Nginx que asigne el puerto 8081 al host.

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

    Esto crea un nuevo pod llamado 'my-nginx', despliega un contenedor Nginx dentro del pod y asigna el contenedor al puerto 8081 en el host.

  2. Verifique que se haya creado el pod.

    podman pod ps
    

    Salida de ejemplo:

    [oracle@ocne ~]$ podman pod ps
    POD ID        NAME        STATUS      CREATED         INFRA ID      # OF CONTAINERS
    e5248f6968b3  my-nginx    Running     48 seconds ago  5e41ad85e232  2
    
  3. Confirme que puede acceder al nuevo pod y su contenedor desde el host.

    curl http://localhost:8081
    
  4. Genere un archivo de Kubernetes YAML desde el pod en ejecución.

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

    El comando Podman generate crea un archivo compatible con Kubernetes a partir de un pod Podman en ejecución con contenedores. Al hacerlo muy útil para la creación de prototipos locales y, posteriormente, para crear un archivo de manifiesto compatible con Kubernetes, puede desplegarlo en un cluster de Kubernetes.

  5. Revise el archivo generado.

    cat nginx-pod.yaml
    

    Salida de ejemplo:

    [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
    

Eliminación de pod y contenedores desplegados mediante Podman Kube

Los pods y sus contenedores asociados se pueden quitar fácilmente una vez que haya terminado de trabajar con ellos.

  1. Suprima el pod my-nginx.

    podman kube down nginx-pod.yaml
    
  2. Confirme que ambos pods se han suprimido.

    podman pod ps
    

    Salida de ejemplo:

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

    Esto confirma que el archivo YAML de Kubernetes generado por Podman que ha creado anteriormente es válido.

Uso de Podman Kube para desplegar YAML de Kubernetes en un cluster de Kubernetes

Podman solo se puede desplegar en un cluster de Kubernetes si el host tiene un archivo kubeconfig válido ubicado en el directorio $HOME/.kube.

Confirme que el entorno es válido

  1. Confirme que se ha definido la variable de entorno KUBECONFIG.

    env | grep KUBE
    

    Salida de ejemplo:

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

    Información: si tiene instalado kubectl y hay varios archivos de configuración en el directorio ${HOME}/.kube, ejecute este comando para confirmar qué archivo de configuración está siendo utilizado actualmente por kubectl:

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

    Salida de ejemplo:

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

    Nota: Ejecute cualquier comando kubectl con verbosity definido en el nivel 6 o superior, y el kubeconfig actual que se está utilizando se incluye en la salida.

Despliegue de un archivo YAML de Kubernetes válido

  1. Crear un archivo YAML de 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. Utilice Podman para desplegar el archivo testpod.yaml en el cluster de Kubernetes.

    podman kube apply -f testpod.yaml
    

    Salida de ejemplo:

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

    Nota: Se despliega en el espacio de nombres por defecto por defecto.

  3. Confirme que el pod se ha desplegado en el cluster.

    kubectl get pods
    

    Salida de ejemplo:

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

    Esto confirma que el podman desplegó un pod denominado 'my-pod' en el cluster.

  4. Confirme que Nginx se ha desplegado como se esperaba.

    kubectl describe pods/my-pod
    

    Salida de ejemplo:

    [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
    

    Esto confirma que el comando podman kube play ha utilizado el archivo YAML de Kubernetes para desplegar un pod directamente en un cluster de Kubernetes.

Despliegue de YAML de Kubernetes generado por Podman en un cluster de Kubernetes

Despliegue el archivo YAML de Kubernetes generado por Podman que creó al inicio del tutorial en un cluster de Kubernetes.

  1. Despliegue el archivo nginx-pod.yaml en el cluster de Kubernetes.

    podman kube apply -f nginx-pod.yaml
    

    Salida de ejemplo:

    [oracle@ocne ~]$ podman kube apply -f nginx-pod.yaml
    Deploying to cluster...
    Successfully deployed workloads to cluster!
    
  2. Confirme que el pod se ha desplegado en el cluster.

    kubectl get pods
    

    Salida de ejemplo:

    [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. Confirme que Nginx se ha desplegado como se esperaba.

    kubectl describe pods/my-nginx
    

    Esto confirma que Podman ha desplegado correctamente un YAML de Kubernetes generado por podman denominado 'my-nginx' en el cluster de Kubernetes.

Pasos Siguientes

En este tutorial se ha demostrado cómo utilizar Podman para desplegar cargas de trabajo de Kubernetes en un cluster de Kubernetes con Oracle Cloud Native Environment. Consulte la estación de formación de Oracle Linux para obtener tutoriales y contenido adicionales.

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.