주:

Oracle Cloud Native Environment와 Ock-forge 사용

소개

Oracle Container Host for Kubernetes Image Builder(OCK Image Builder) 툴은 Oracle Cloud Native Environment(Oracle CNE) 배포에 사용되는 Oracle Container Host for Kubernetes(OCK) 이미지를 빌드합니다. OCK Image Builder는 Oracle CNE에서 사용하는 기본 OCK 이미지가 다음과 같은 요구 사항을 충족하지 않는 경우에 유용합니다.

OCK Image Builder는 셸 스크립트의 모음으로, Oracle CNE가 실행 중인 컨테이너의 노드를 업데이트하는 데 사용할 수 있는 클러스터 노드 또는 OSTree 컨테이너 이미지를 생성하기 위해 부트 가능한 qcow2 형식 이미지를 생성하는 기본 스크립트는 ock-forge입니다.

목표

이 자습서에서는 다음 항목에 대해 설명합니다.

필요 조건

Oracle Cloud 전용 환경 배치

주: 고유 테넌시에서 실행 중인 경우 랩 환경을 배치하기 전에 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. 부트 볼륨 크기를 늘리고 libvirt를 설치한 다음 Oracle Linux 9를 사용합니다.

    cat << EOF | tee instances.yml > /dev/null
    compute_instances:
      1:
        instance_name: "ocne"
        type: "server"
        instance_ocpus: 8
        instance_memory: 128
        boot_volume_size_in_gbs: 256
    ocne_type: "libvirt"
    install_ocne_rpm: true
    update_all: true
    os_version: "9"
    EOF
    

    주: OCK Image Builder는 Oracle Linux 9에서 가장 잘 작동합니다.

  6. lab 환경을 배치합니다.

    사용자 정의 구성을 사용하여 설치합니다.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
    

    무료 실습 환경에는 추가 변수 local_python_interpreter이 필요합니다. 이 변수는 localhost에서 실행되는 재생에 대해 ansible_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 Cloud Native Environment 설치가 완료되고 인스턴스가 준비됩니다. 배치하는 노드의 공용(public) 및 전용(private) IP 주소와 실습을 실행하는 동안 필요한 기타 배치 정보를 출력하는 이전 플레이를 기록해 둡니다.

Kubernetes 빌더용 Oracle Container 호스트 설치

Oracle Container Host for Kubernetes Builder(ock-forge)는 부팅 가능한 매체 Oracle Container Host for Kubernetes(OCK) OSTree 기반 이미지를 빌드하기 위한 명령행 도구입니다. ock-forge는 qcow2 형식, 원시 디스크 이미지로 가상 머신 이미지를 생성하거나 기존 블록 장치에 직접 작성하여 생성할 수 있습니다. 이 자습서에서는 사용자 정의된 .qcow2 이미지를 빌드하고 사용하는 방법을 보여줍니다.

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

    ssh oracle@<ip_address_of_node>
    
  2. Git 및 Podman을 설치합니다.

    sudo dnf install -y git container-tools
    

    ock-forge 프로그램은 Podman이 필요하며 Git을 사용하여 GitHub에서 ock-forgeOracle Container Host for Kubernetes Configuration(OCK Configuration) 저장소를 복제합니다.

  3. ock-forge 저장소를 복제합니다.

    git clone https://github.com/oracle-cne/ock-forge
    
  4. OCK Configuration 저장소를 복제합니다.

    ock-forge는 OCK에 OCK 구성 트리 파일 사양을 사용하여 이미지를 작성합니다.

    cd ock-forge/
    git clone https://github.com/oracle-cne/ock
    
    

OCK 이미지 작성

그런 다음 네트워크 블록 장치를 만들고 빌드할 OCK 이미지에 몇 가지 추가 Linux 패키지를 추가한 다음 ock-forge를 사용하여 부트 가능한 OCK 이미지를 생성하는 데 필요한 모든 작업을 수행합니다.

네트워크 블록 장치 사용

NBD(네트워크 블록 장치)는 ock-forge에서 생성된 .qcow2 이미지를 마운트하는 데 사용되므로 Oracle CNE에서 Kubernetes 클러스터를 구축할 수 있습니다.

  1. NBD 커널 모듈을 로드하고 8개의 파티션을 할당합니다.

    sudo modprobe nbd max_part=8
    
  2. NBD 장치가 있는지 확인합니다.

    ls -l /dev/nbd*
    

    출력 예:

    [oracle@ocne ~]$ ls -l /dev/nbd*
    brw-rw----. 1 root disk 43,   0 Jan 15 13:55 /dev/nbd0
    brw-rw----. 1 root disk 43,  16 Jan 15 13:55 /dev/nbd1
    brw-rw----. 1 root disk 43, 160 Jan 15 13:55 /dev/nbd10
    brw-rw----. 1 root disk 43, 176 Jan 15 13:55 /dev/nbd11
    brw-rw----. 1 root disk 43, 192 Jan 15 13:55 /dev/nbd12
    brw-rw----. 1 root disk 43, 208 Jan 15 13:55 /dev/nbd13
    brw-rw----. 1 root disk 43, 224 Jan 15 13:55 /dev/nbd14
    brw-rw----. 1 root disk 43, 240 Jan 15 13:55 /dev/nbd15
    brw-rw----. 1 root disk 43,  32 Jan 15 13:55 /dev/nbd2
    brw-rw----. 1 root disk 43,  48 Jan 15 13:55 /dev/nbd3
    brw-rw----. 1 root disk 43,  64 Jan 15 13:55 /dev/nbd4
    brw-rw----. 1 root disk 43,  80 Jan 15 13:55 /dev/nbd5
    brw-rw----. 1 root disk 43,  96 Jan 15 13:55 /dev/nbd6
    brw-rw----. 1 root disk 43, 112 Jan 15 13:55 /dev/nbd7
    brw-rw----. 1 root disk 43, 128 Jan 15 13:55 /dev/nbd8
    brw-rw----. 1 root disk 43, 144 Jan 15 13:55 /dev/nbd9
    

OCK 이미지 빌드 사용자정의

ock-forge에서 작성한 OCK 이미지에 추가할 추가 Linux 패키지를 정의할 수 있습니다. OCK-forge에서 사용하는 트리 파일 사양은 GitHub OCK Configuration 저장소에 있습니다.

  1. 사용자 정의 파일에 대한 디렉토리를 만듭니다.

    mkdir /home/oracle/ock-forge/ock/configs/config-1.31/custom
    
  2. 사용자 정의 파일을 만들어 Vim 및 Emacs 패키지를 설치합니다.

    cat << EOF | tee /home/oracle/ock-forge/ock/configs/config-1.31/custom/myconfig.yaml > /dev/null
    packages:
    - vim
    - emacs
    EOF
    
  3. manifest.yaml 파일에 사용자 정의 파일을 포함합니다.

    참고: 대상 Kubernetes 빌드에 대한 Kubernetes 구성 파일에 사용자정의를 더 추가할 수 있습니다.

    sed -i '23i - custom/myconfig.yaml' /home/oracle/ock-forge/ock/configs/config-1.31/manifest.yaml
    
  4. 새 사용자 정의 파일이 manifest.yaml 파일에 정의된 OCK 이미지 빌드 시퀀스에 나타나는지 확인합니다.

    cat /home/oracle/ock-forge/ock/configs/config-1.31/manifest.yaml
    

    출력 예:

    [oracle@ocne ock-forge]$ cat /home/oracle/ock-forge/ock/configs/config-1.31/manifest.yaml
    ref: ock
    automatic-version-prefix: "1.31"
    
    documentation: false
    boot-location: modules
    machineid-compat: false
    ...
    ...
    include:
    - base.yaml
    - ux.yaml
    - ocne.yaml
    - removals.yaml
    - config.yaml
    - custom/myconfig.yaml
    ...
    ...
    modules:
      enable:
        - container-tools:ol8
        - virt:kvm_utils3
    

OCK 이미지 작성

  1. ock-forge를 사용하여 qcow2 이미지를 만듭니다.

    sudo ./ock-forge -d /dev/nbd0 -D out/1.31/boot.qcow2 -i container-registry.oracle.com/olcne/ock-ostree:1.31 -O ./out/1.31/archive.tar -C ./ock -c configs/config-1.31 -P
    

    설명:

    • -d: 기존 블록 장치의 경로입니다.
    • -D: 디스크 이미지 파일의 경로입니다.
    • -i: 태그를 포함하는 정규화된 컨테이너 이미지 이름입니다.
    • -C: rpm-ostree 구성 집합이 포함된 디렉토리입니다.
    • -c: 빌드할 rpm-ostree 구성을 포함하는 디렉토리입니다.
    • -P: 이 플래그를 사용할 경우 -d로 지정된 블록 장치가 분할 영역 테이블을 지우고 기본 형상으로 다시 채웁니다.
  2. Enter 키를 눌러 기본 컨테이너 레지스트리(container-registry.oracle.com/ock-builder:latest)를 적용합니다.

    주: 빌드 프로세스를 완료하는 데 30분 정도 걸립니다.

    출력 예:

    [oracle@ocne ock-forge]$ sudo ./ock-forge -d /dev/nbd0 -D out/1.31/boot.qcow2 -i container-registry.oracle.com/olcne/ock-ostree:1.31 -O ./out/1.31/archive.tar -C ./ock -c configs/config-1.31 -P
    + [[ -z '' ]]
    + [[ -z '' ]]
    + IGNITION_PROVIDER=qemu
    + [[ -n out/1.31/boot.qcow2 ]]
    ++ realpath -m out/1.31/boot.qcow2
    + DISK=/home/oracle/ock-forge/out/1.31/boot.qcow2
    ...
    ...
    + podman image exists ock-builder:latest
    + podman pull ock-builder:latest
    ? Please select an image: 
      ▸ container-registry.oracle.com/ock-builder:latest
        docker.io/library/ock-builder:latest
    

OCK 이미지 수정

OCK 이미지 빌드 프로세스가 종료된 후에는 Butane의 스키마를 준수하는 Butane config YAML 파일을 사용하여 사용자를 생성하고, 파일을 생성하고, 네트워크를 구성하고, systemd 단위를 정의하고, qcow2 파일에 대해 훨씬 더 많은 작업을 수행할 수 있습니다. 자세한 내용은 업스트림 Butane 설명서를 참조하십시오.

그런 다음 부탄 호환 YAML 파일을 만들어 텍스트 파일을 만들고 새 사용자를 설정합니다.

기본 구성 사용

다음 두 가지 방법 중 하나로 사용자정의를 적용할 수 있습니다.

다음 단계에서는 사용자가 생성한 모든 Oracle CNE 클러스터에 대해 사용자 정의를 기본값으로 설정하는 방법을 보여 줍니다.

  1. .ocne 디렉토리를 만듭니다.

    mkdir /home/oracle/.ocne
    
  2. defaults.yaml 파일을 추가합니다.

    cat << EOF | tee /home/oracle/.ocne/defaults.yaml > /dev/null
    extraIgnitionInline: |
      variant: fcos
      version: 1.5.0
      storage:
        files:
          - path: /etc/myfile.txt
            contents:
              inline: Hello, world!
            mode: 0644
            user:
              id: 1000
            group:
              id: 1001
    EOF
    

    설명(자세한 내용은 upstream 설명서 참조):

    • variant: - Oracle CNE와 함께 사용하려면 fcos로 설정해야 합니다.
    • version: - Oracle CNE와 함께 사용하려면 1.5.0로 설정해야 합니다.
    • path: - /etcmyfile.txt(생성된 파일의 경로 및 파일 이름)
    • mode: - 644로 설정합니다(다른 모든 사람이 읽고 쓸 수만 있음).
    • user: & group: - 지정된 UID 및 GID에 파일 소유권을 지정합니다. 이 예에서는 ocne UID 및 GID로 설정합니다.
  3. 생성된 파일을 확인합니다.

    cat /home/oracle/.ocne/defaults.yaml
    

OCK-forge로 새 OCK 이미지를 테스트합니다.

  1. .qcow2 이미지를 Oracle CNE 설치로 복사합니다.

    sudo cp /home/oracle/ock-forge/out/1.31/boot.qcow2 /var/lib/libvirt/images/boot.qcow2-1.31
    
  2. .qcow2 이미지가 복사되었는지 확인합니다.

    sudo ls /var/lib/libvirt/images
    
  3. .qcow2 이미지를 사용하여 Oracle CNE를 시작합니다.

    ocne cluster start --version 1.31 -n 1 -w 1 -u false
    

    출력 예:

    [oracle@ocne ock-forge]$ ocne cluster start --version 1.31 -n 1 -w 1 -u false
    INFO[2025-04-14T13:47:36Z] Creating new Kubernetes cluster with version 1.31 named ocne 
    INFO[2025-04-14T13:48:34Z] Waiting for the Kubernetes cluster to be ready: ok 
    INFO[2025-04-14T13:48:35Z] Installing core-dns into kube-system: ok 
    INFO[2025-04-14T13:48:36Z] Installing kube-proxy into kube-system: ok 
    INFO[2025-04-14T13:48:39Z] Installing kubernetes-gateway-api-crds into kube-system: ok 
    INFO[2025-04-14T13:48:39Z] Installing flannel into kube-flannel: ok 
    INFO[2025-04-14T13:48:40Z] Installing ui into ocne-system: ok 
    INFO[2025-04-14T13:48:41Z] Installing ocne-catalog into ocne-system: ok 
    INFO[2025-04-14T13:48:41Z] Kubernetes cluster was created successfully  
    INFO[2025-04-14T13:48:41Z] Post install information:
    
    To access the cluster from the VM host:
        copy /home/oracle/.kube/kubeconfig.ocne.vm to that host and run kubectl there
    To access the cluster from this system:
        use /home/oracle/.kube/kubeconfig.ocne.local
    To access the UI, first do kubectl port-forward to allow the browser to access the UI.
    Run the following command, then access the UI from the browser using via https://localhost:8443
        kubectl port-forward -n ocne-system service/ui 8443:443
    Run the following command to create an authentication token to access the UI:
        kubectl create token ui -n ocne-system 
    
  4. 클러스터가 존재하는지 확인합니다.

    ocne cluster list
    
  5. 새 클러스터에 대한 kubeconfig 환경 변수를 설정합니다.

    export KUBECONFIG=$(ocne cluster show -C ocne)
    
  6. 클러스터 노드 목록을 가져옵니다.

    kubectl get nodes
    
  7. Worker 노드에 연결합니다.

    ocne cluster console --direct --node ocne-worker-1
    
  8. myfile.txt 파일이 있는지 확인합니다.

    ls -lsa /etc/myfile.txt
    

    출력 예:

    sh-4.4# ls -lsa /etc/myfile.txt
    4 -rw-r--r--. 1 ocne ocne 13 Apr 16 10:51 /etc/myfile.txt
    
  9. 설치된 emacs 패키지를 확인합니다.

    ls /bin/emacs
    

    출력 예:

    sh-4.4# ls /bin/emacs
    /bin/emacs
    
  10. exit를 입력하여 ocne-worker-1 노드를 종료합니다.

  11. 제어 평면 노드에 연결합니다.

    ocne cluster console --direct --node ocne-control-plane-1
    
  12. myfile.txt 파일이 있는지 확인합니다.

    ls /etc/myfile.txt
    

    출력 예:

    sh-4.4# ls -lsa /etc/myfile.txt
    4 -rw-r--r--. 1 ocne ocne 13 Apr 16 10:50 /etc/myfile.txt
    
  13. 설치된 emacs 패키지를 확인합니다.

    ls /bin/emacs
    

    출력 예:

    sh-4.4# ls /bin/emacs
    /bin/emacs
    

    기본적으로 존재하지 않는 텍스트 파일(/etc/myfile.txt) 및 패키지(emacs)를 추가하여 기본 Oracle CNE 클러스터 노드를 사용자 정의했는지 확인합니다.

  14. exit를 입력하여 ocne-control-plane-1 노드를 종료합니다.

클러스터 제거

  1. 클러스터를 삭제합니다.

    ocne cluster delete
    
  2. defaults.yaml 파일을 삭제합니다.

    rm /home/oracle/.ocne/defaults.yaml
    

단일 클러스터의 구성 업데이트

그런 다음 사용자 정의 파일을 만들어 단일 Oracle CNE 클러스터에 적용합니다.

  1. 구성 파일을 만듭니다.

    cat << EOF | tee /home/oracle/myconfig.yaml > /dev/null
    provider: libvirt
    headless: true
    name: ocne
    kubernetesVersion: 1.31
    controlPlaneNodes: 1
    workerNodes: 1
    
    extraIgnitionInline: |
      variant: fcos
      version: 1.5.0
      storage:
        files:
          - path: /etc/myfile.txt
            contents:
              inline: Hello, world!
            mode: 0644
            user:
              id: 1000
            group:
              id: 1001
    EOF
    
  2. 생성된 파일을 확인합니다.

    cat /home/oracle/myconfig.yaml
    
  3. .qcow2 이미지를 사용하여 Oracle CNE를 시작합니다.

    ocne cluster start -u false -c /home/oracle/myconfig.yaml
    

    출력 예:

    [oracle@ocne ~]$ ocne cluster start -u false -c /home/oracle/myconfig.yaml 
    INFO[2025-04-15T18:07:00Z] Creating new Kubernetes cluster with version 1.31 named ocne 
    INFO[2025-04-15T18:08:14Z] Waiting for the Kubernetes cluster to be ready: ok 
    INFO[2025-04-15T18:08:16Z] Installing core-dns into kube-system: ok 
    INFO[2025-04-15T18:08:16Z] Installing kube-proxy into kube-system: ok 
    INFO[2025-04-15T18:08:19Z] Installing kubernetes-gateway-api-crds into kube-system: ok 
    INFO[2025-04-15T18:08:20Z] Installing flannel into kube-flannel: ok 
    INFO[2025-04-15T18:08:20Z] Installing ocne-catalog into ocne-system: ok 
    INFO[2025-04-15T18:08:20Z] Kubernetes cluster was created successfully  
    INFO[2025-04-15T18:08:20Z] Post install information:
    
    To access the cluster from the VM host:
        copy /home/oracle/.kube/kubeconfig.ocne.vm to that host and run kubectl there
    To access the cluster from this system:
        use /home/oracle/.kube/kubeconfig.ocne.local 
    
  4. 새 클러스터에 대한 kubeconfig 환경 변수를 설정합니다.

    export KUBECONFIG=$(ocne cluster show -C ocne)
    
  5. 클러스터 노드 목록을 가져옵니다.

    kubectl get nodes
    
  6. Worker 노드에 연결합니다.

    ocne cluster console --direct --node ocne-worker-1
    
  7. myfile.txt 파일이 있는지 확인합니다.

    ls -lsa /etc/myfile.txt
    
  8. 설치된 emacs 패키지를 확인합니다.

    ls /bin/emacs
    
  9. exit를 입력하여 ocne-worker-1 노드를 종료합니다.

  10. 제어 평면 노드에 연결합니다.

    ocne cluster console --direct --node ocne-control-plane-1
    
  11. myfile.txt 파일이 있는지 확인합니다.

    ls -lsa /etc/myfile.txt
    
  12. 설치된 emacs 패키지를 확인합니다.

    ls /bin/emacs
    

    기본적으로 존재하지 않는 텍스트 파일(/etc/myfile.txt) 및 패키지(emacs)를 추가하여 기본 Oracle CNE 클러스터 노드를 사용자 정의했는지 확인합니다.

  13. exit를 입력하여 ocne-control-plane-1 노드를 종료합니다.

클러스터 제거

  1. 클러스터를 삭제합니다.

    ocne cluster delete
    

다음 단계

Oracle CNE OCK 이미지 파일을 사용자 정의하면 Oracle CNE Kubernetes 클러스터 노드에서 사용되는 환경을 수정할 수 있습니다. Oracle Linux Training Station에 게시된 다른 튜토리얼을 통해 Kubernetes 및 Oracle Cloud Native Environment에 대한 지식을 지속적으로 확장할 수 있습니다.

추가 학습 자원

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

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