Observação:

Implantar Cargas de Trabalho do Kubernetes usando o Podman com o Oracle Cloud Native Environment

Introdução

O Podman kube fornece aos desenvolvedores e administradores uma maneira de testar cargas de trabalho do Kubernetes usando o Podman antes de implantá-las em um cluster do Kubernetes. O comando podman kube é usado para gerar YAML compatível com Kubernetes a partir de contêineres Podman existentes ou Pods, ou para criar contêineres/pods a partir de um arquivo YAML do Kubernetes. Isso fornece uma maneira conveniente de fazer a transição facilmente entre os ambientes Podman e Kubernetes, aproveitando o melhor dos dois ecossistemas para reduzir os ciclos de desenvolvimento e teste.

Observação: O comando podman kube play lê qualquer arquivo YAML do Kubernetes válido e inicia os pods, contêineres ou volumes definidos no arquivo YAML na sua instância do Podman em execução localmente. No entanto, nem todos os tipos de arquivo YAML do Kubernetes são suportados; os tipos de Kubernetes suportados no momento são:

Uma lista mais detalhada dos campos do Kubernetes YAML atualmente suportados pelo comando podman kube play está localizada aqui.

O Podman pode aplicar arquivos YAML suportados do Kubernetes a um cluster do Kubernetes usando o comando podman kube apply. Essas etapas funcionam com qualquer cluster do Kubernetes. No entanto, recomendamos o Oracle Cloud Native Environment como uma opção de implantação do Kubernetes. Para obter mais informações, consulte a documentação do Oracle Cloud Native Environment.

Observação: Este tutorial demonstra o uso do Podman para gerar arquivos YAML do Kubernetes e, posteriormente, mostra como implantá-los em um cluster do Kubernetes. Qualquer gerenciamento adicional dos objetos implantados deve ser concluído usando os comandos kubectl. Para obter mais informações sobre como usar o kubectl, consulte a documentação upstream.

Objetivos

Neste tutorial, você aprenderá a:

Pré-requisitos

Configurar o Oracle Cloud Native Environment

Observação: Se estiver em execução na sua própria tenancy, leia o projeto linux-virt-labs GitHub README.md e conclua os pré-requisitos antes de implantar o ambiente de laboratório.

  1. Abra um terminal no Luna Desktop.

  2. Clone o projeto linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Altere para o diretório de trabalho.

    cd linux-virt-labs/ocne2
    
  4. Instale as coleções necessárias.

    ansible-galaxy collection install -r requirements.yml
    
  5. Implante o ambiente de laboratório.

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

    O ambiente de laboratório gratuito requer a variável extra local_python_interpreter, que define ansible_python_interpreter para reproduções em execução no localhost. Essa variável é necessária porque o ambiente instala o pacote RPM do Oracle Cloud Infrastructure SDK para Python, localizado nos módulos python3.6.

    A forma de implantação padrão usa a CPU AMD e o Oracle Linux 8. Para usar uma CPU Intel ou um Oracle Linux 9, adicione -e instance_shape="VM.Standard3.Flex" ou -e os_version="9" ao comando de implantação.

    Importante: Aguarde a execução bem-sucedida do playbook e atinja a tarefa de pausa. Neste estágio do playbook, a instalação do Oracle CNE está concluída e as instâncias estão prontas. Anote o jogo anterior, que imprime os endereços IP públicos e privados dos nós que ele implanta e quaisquer outras informações de implantação necessárias durante a execução do laboratório.

Acessar o Cluster do Kubernetes

  1. Abra um terminal e conecte-se via SSH à instância do ocne.

    ssh oracle@<ip_address_of_instance>
    
  2. Aguarde a estabilização do cluster e todos os pods reportem que estão em execução.

    watch kubectl get pods -A
    

    Depois que todos os pods mostrarem um STATUS de Em Execução, digite Ctrl-C para sair do comando watch.

  3. Confirme quantos nós estão presentes.

    kubectl get nodes
    

Confirmar Funcionamento do Podman

  1. Verifique a versão do Podman.

    podman -v
    
  2. Confirme se a CLI do Podman está funcionando.

    podman run quay.io/podman/hello
    

    Exemplo de Saída:

    [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
    

Criar os arquivos YAML do Kubernetes

O recurso Podman Kube pode funcionar com arquivos YAML do Kubernetes gerados pelo Podman ou com arquivos YAML do Kubernetes nativos. Vejamos os dois por sua vez.

Criar um Podman com um Contêiner e Gerar o Kubernetes YAML

Primeiro, implante um contêiner em um pod Podman localmente. Em seguida, use a implantação para gerar um arquivo YAML do Kubernetes que possa ser implantado em um cluster do Kubernetes.

  1. Crie um pod com um servidor Nginx que mapeie a porta 8081 para o host.

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

    Isso cria um novo pod chamado 'my-nginx', implanta um contêiner Nginx dentro do pod e mapeia o contêiner para a porta 8081 no host.

  2. Verifique se o Pod foi criado.

    podman pod ps
    

    Exemplo de Saída:

    [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 se você pode acessar o novo pod e seu contêiner pelo host.

    curl http://localhost:8081
    
  4. Gerar um arquivo YAML do Kubernetes com base no pod em execução.

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

    O comando Podman generate cria um arquivo compatível com o Kubernetes de um pod Podman em execução com contêineres. Tornando-o muito útil para prototipagem local e, posteriormente, criando um arquivo de manifesto compatível com o Kubernetes, você pode implantar em um cluster do Kubernetes.

  5. Revise o arquivo gerado.

    cat nginx-pod.yaml
    

    Exemplo de Saída:

    [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
    

Remover Pod e Contêineres Implantados usando o Podman Kube

Os pods e seus contêineres associados podem ser removidos facilmente depois que você terminar de trabalhar com eles.

  1. Exclua o pod my-nginx.

    podman kube down nginx-pod.yaml
    
  2. Confirme se os dois pods foram excluídos.

    podman pod ps
    

    Exemplo de Saída:

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

    Isso confirma que o arquivo YAML do Kubernetes gerado pelo Podman que você criou anteriormente é válido.

Usar o Podman Kube para Implantar o Kubernetes YAML em um Cluster do Kubernetes

O Podman só poderá implantar em um cluster do Kubernetes se seu host tiver um arquivo kubeconfig válido localizado no diretório $HOME/.kube.

Confirme se Seu Ambiente é Válido

  1. Confirme se a variável de ambiente KUBECONFIG está definida.

    env | grep KUBE
    

    Exemplo de Saída:

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

    Informações: Se você tiver o kubectl instalado e houver vários arquivos de configuração no diretório ${HOME}/.kube, execute este comando para confirmar qual arquivo de configuração está sendo usado no momento pelo kubectl:

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

    Exemplo de Saída:

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

    Observação: Execute qualquer comando kubectl com verbosity definido como nível 6 ou superior, e o kubeconfig atual que está sendo usado está incluído na saída.

Implantar um arquivo YAML do Kubernetes válido

  1. Criar um arquivo YAML do 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. Use o Podman para implantar o arquivo testpod.yaml no seu cluster do Kubernetes.

    podman kube apply -f testpod.yaml
    

    Exemplo de Saída:

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

    Observação: por padrão, isso é implantado no namespace padrão.

  3. Confirme se o Pod está implantado no seu cluster.

    kubectl get pods
    

    Exemplo de Saída:

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

    Isso confirma que o podman implantou um pod chamado 'my-pod' no cluster.

  4. Confirme se o Nginx foi implantado conforme esperado.

    kubectl describe pods/my-pod
    

    Exemplo de Saída:

    [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
    

    Isso confirma que o comando podman kube play usou o arquivo YAML do Kubernetes para implantar um pod diretamente em um cluster do Kubernetes.

Implantar Kubernetes YAML gerado pelo Podman em um Cluster do Kubernetes

Implante o arquivo YAML do Kubernetes gerado pelo Podman que você criou no início do tutorial em um Cluster do Kubernetes.

  1. Implante o arquivo nginx-pod.yaml no cluster do Kubernetes.

    podman kube apply -f nginx-pod.yaml
    

    Exemplo de Saída:

    [oracle@ocne ~]$ podman kube apply -f nginx-pod.yaml
    Deploying to cluster...
    Successfully deployed workloads to cluster!
    
  2. Confirme se o Pod está implantado no seu cluster.

    kubectl get pods
    

    Exemplo de Saída:

    [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 se o Nginx foi implantado conforme esperado.

    kubectl describe pods/my-nginx
    

    Isso confirma que o Podman implantou com sucesso uma YAML do Kubernetes gerada pelo podman chamada 'my-nginx' no cluster do Kubernetes.

Próximas Etapas

Este tutorial demonstrou como usar o Podman para implantar cargas de trabalho do Kubernetes em um cluster do Kubernetes com o Oracle Cloud Native Environment. Confira o Oracle Linux Training Station para obter tutoriais e conteúdo adicionais.

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal do Oracle Learning YouTube. Além disso, acesse education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.