주:

Oracle Cloud Native Environment에서 Podman을 사용하여 Kubernetes 워크로드 배포

소개

Podman kube는 개발자와 관리자에게 Podman을 사용하여 Kubernetes 클러스터에 배포하기 전에 Kubernetes 워크로드를 테스트할 수 있는 방법을 제공합니다. podman kube 명령은 기존 Podman 컨테이너 또는 Pod에서 Kubernetes 호환 YAML을 생성하거나 Kubernetes YAML 파일에서 컨테이너/Pod를 생성하는 데 사용됩니다. 이를 통해 Podman과 Kubernetes 환경 간에 쉽게 전환할 수 있는 편리한 방법을 제공하므로 두 생태계의 장점을 활용하여 개발 및 테스트 주기를 줄일 수 있습니다.

주: podman kube play 명령은 유효한 모든 Kubernetes YAML 파일을 읽고 로컬에서 실행 중인 Podman 인스턴스의 YAML 파일에 정의된 Pod, 컨테이너 또는 볼륨을 시작합니다. 그러나 모든 Kubernetes YAML 파일 유형이 지원되는 것은 아닙니다. 현재 지원되는 Kubernetes 종류는 다음과 같습니다.

현재 podman kube play 명령으로 지원되는 Kubernetes YAML 필드의 보다 자세한 목록은 여기에 있습니다.

Podman은 podman kube apply 명령을 사용하여 지원되는 Kubernetes YAML 파일을 Kubernetes 클러스터에 적용할 수 있습니다. 이러한 단계는 모든 Kubernetes 클러스터에서 작동합니다. 그러나 Oracle Cloud Native Environment를 Kubernetes 배포 옵션으로 사용하는 것이 좋습니다. 자세한 내용은 Oracle Cloud Native Environment 설명서를 참조하십시오.

참고: 이 자습서에서는 Podman을 사용하여 Kubernetes YAML 파일을 생성한 후 Kubernetes 클러스터에 배치하는 방법을 보여줍니다. 배치된 객체의 추가 관리는 kubectl 명령을 사용하여 완료해야 합니다. kubectl 사용에 대한 자세한 내용은 업스트림 설명서를 참조하십시오.

목표

이 자습서에서는 다음 내용을 학습합니다.

필요 조건

Oracle Cloud Native Environment 구성

주: 고유 테넌시에서 실행 중인 경우 linux-virt-labs GitHub 프로젝트 README.md를 읽고 실습 환경을 배치하기 전에 필요 조건을 완료하십시오.

  1. Luna Desktop에서 터미널을 엽니다.

  2. linux-virt-labs GitHub 프로젝트를 복제합니다.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 작업 디렉토리로 변경합니다.

    cd linux-virt-labs/ocne2
    
  4. 필요한 모음을 설치합니다.

    ansible-galaxy collection install -r requirements.yml
    
  5. lab 환경을 배치합니다.

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

    무료 실습 환경에는 localhost에서 실행되는 재생에 대해 ansible_python_interpreter를 설정하는 추가 변수 local_python_interpreter이 필요합니다. 이 변수는 환경이 python3.6 모듈 아래에 있는 Oracle Cloud Infrastructure SDK for Python용 RPM 패키지를 설치하기 때문에 필요합니다.

    기본 배치 구성은 AMD CPU 및 Oracle Linux 8을 사용합니다. Intel CPU 또는 Oracle Linux 9를 사용하려면 배치 명령에 -e instance_shape="VM.Standard3.Flex" 또는 -e os_version="9"를 추가합니다.

    중요: 플레이북이 성공적으로 실행될 때까지 기다렸다가 일시 중지 작업에 도달합니다. 플레이북의 이 단계에서 Oracle CNE 설치가 완료되고 인스턴스가 준비됩니다. 이전 플레이에서 배치하는 노드의 공용(public) 및 전용(private) IP 주소와 실습을 실행하는 동안 필요한 기타 배치 정보를 출력합니다.

Kubernetes 클러스터 액세스

  1. 터미널을 열고 SSH를 통해 ocne 인스턴스에 연결합니다.

    ssh oracle@<ip_address_of_instance>
    
  2. 클러스터가 안정화되고 모든 포드가 실행 중임을 보고할 때까지 기다립니다.

    watch kubectl get pods -A
    

    모든 포드가 RunningSTATUS를 표시하면 Ctrl-C를 입력하여 watch 명령을 종료합니다.

  3. 노드가 몇 개 있는지 확인합니다.

    kubectl get nodes
    

Podman 작업 확인

  1. Podman 버전을 검사합니다.

    podman -v
    
  2. Podman CLI가 작동 중인지 확인합니다.

    podman run quay.io/podman/hello
    

    출력 예:

    [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 파일 생성

Podman Kube 기능은 Podman 생성 Kubernetes YAML 파일 또는 네이티브 Kubernetes YAML 파일과 함께 사용할 수 있습니다. 두 가지를 차례로 살펴보자.

컨테이너로 Podman Pod를 생성하고 Kubernetes YAML을 생성합니다.

먼저 로컬 Podman Pod에 컨테이너를 배치합니다. 그런 다음 배치를 사용하여 Kubernetes 클러스터에 배치할 수 있는 Kubernetes YAML 파일을 생성합니다.

  1. 포트 8081을 호스트에 매핑하는 Nginx 서버로 포드를 만듭니다.

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

    그러면 'my-nginx'라는 새 Pod가 생성되고, Pod 내에 Nginx 컨테이너가 배치되고, 호스트의 포트 8081에 컨테이너가 매핑됩니다.

  2. Pod가 생성되었는지 확인합니다.

    podman pod ps
    

    출력 예:

    [oracle@ocne ~]$ podman pod ps
    POD ID        NAME        STATUS      CREATED         INFRA ID      # OF CONTAINERS
    e5248f6968b3  my-nginx    Running     48 seconds ago  5e41ad85e232  2
    
  3. 호스트에서 새 Pod 및 해당 컨테이너에 액세스할 수 있는지 확인합니다.

    curl http://localhost:8081
    
  4. 실행 중인 Pod에서 Kubernetes 파일 YAML을 생성합니다.

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

    Podman generate 명령은 실행 중인 Podman Pod에서 컨테이너가 포함된 Kubernetes 호환 파일을 생성합니다. 로컬 프로토타이핑에 매우 유용하게 사용하고, 이어서 Kubernetes 호환 매니페스트 파일을 만들면 Kubernetes 클러스터에 배포할 수 있습니다.

  5. 생성된 파일을 검토합니다.

    cat nginx-pod.yaml
    

    출력 예:

    [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
    

Podman Kube를 사용하여 배치된 Pod 및 컨테이너 제거

POD 및 관련 컨테이너는 작업 완료 후 쉽게 제거할 수 있습니다.

  1. my-nginx 포드를 삭제합니다.

    podman kube down nginx-pod.yaml
    
  2. 두 포드가 삭제되었는지 확인합니다.

    podman pod ps
    

    출력 예:

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

    이것은 이전에 만든 Podman 생성 Kubernetes YAML 파일이 유효하다는 것을 확인합니다.

Podman Kube를 사용하여 Kubernetes YAML을 Kubernetes 클러스터에 배치

Podman은 호스트에 $HOME/.kube 디렉토리에 있는 적합한 kubeconfig 파일이 있는 경우에만 Kubernetes 클러스터에 배치할 수 있습니다.

환경이 적합한지 확인

  1. KUBECONFIG 환경 변수가 설정되었는지 확인합니다.

    env | grep KUBE
    

    출력 예:

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

    정보: kubectl가 설치되어 있고 ${HOME}/.kube 디렉토리에 여러 개의 구성 파일이 있는 경우 이 명령을 실행하여 kubectl에서 현재 사용 중인 구성 파일을 확인합니다.

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

    출력 예:

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

    주: verbosity가 레벨 6 이상으로 설정된 상태에서 kubectl 명령을 실행하면 사용 중인 현재 kubeconfig가 출력에 포함됩니다.

적합한 Kubernetes YAML 파일 배치

  1. Kubernetes YAML 파일을 생성합니다.

    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. Podman을 사용하여 Kubernetes 클러스터에 testpod.yaml 파일을 배치합니다.

    podman kube apply -f testpod.yaml
    

    출력 예:

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

    주: 기본적으로 기본 네임스페이스에 배치됩니다.

  3. Pod가 클러스터에 배치되었는지 확인합니다.

    kubectl get pods
    

    출력 예:

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

    이렇게 하면 podman이 클러스터에 'my-pod'라는 포드를 배치했음을 확인할 수 있습니다.

  4. Nginx가 예상대로 배치되었는지 확인합니다.

    kubectl describe pods/my-pod
    

    출력 예:

    [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
    

    이를 통해 podman kube play 명령이 Kubernetes YAML 파일을 사용하여 Pod를 Kubernetes 클러스터에 직접 배치했음을 확인할 수 있습니다.

Podman 생성 Kubernetes YAML을 Kubernetes 클러스터에 배치

튜토리얼 시작 시 생성한 Podman 생성 Kubernetes YAML 파일을 Kubernetes 클러스터에 배치합니다.

  1. nginx-pod.yaml 파일을 Kubernetes 클러스터에 배치합니다.

    podman kube apply -f nginx-pod.yaml
    

    출력 예:

    [oracle@ocne ~]$ podman kube apply -f nginx-pod.yaml
    Deploying to cluster...
    Successfully deployed workloads to cluster!
    
  2. Pod가 클러스터에 배치되었는지 확인합니다.

    kubectl get pods
    

    출력 예:

    [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. Nginx가 예상대로 배치되었는지 확인합니다.

    kubectl describe pods/my-nginx
    

    이를 통해 Podman이 Kubernetes 클러스터에 'my-nginx'라는 Podman 생성 Kubernetes YAML을 성공적으로 배포했음을 확인합니다.

다음 단계

이 사용지침서는 Podman을 사용하여 Oracle Cloud Native Environment를 통해 Kubernetes 클러스터에 Kubernetes 워크로드를 배포하는 방법을 보여줍니다. 추가 튜토리얼과 내용은 Oracle Linux Training Station을 확인하십시오.

추가 학습 자원

docs.oracle.com/learn에서 다른 랩을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.