ノート:

ock-forgeをOracle Cloud Native Environmentで使用

イントロダクション

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はシェル・スクリプトのコレクションで、プライマリ・スクリプトはock-forgeで、起動可能なqcow2形式のイメージを生成してクラスタ・ノードを作成するか、Oracle CNEが実行中のコンテナのノードを更新するために使用できるOSTreeコンテナ・イメージです。

目的

このチュートリアルでは、次の操作を学習します。

前提条件

Oracle Cloud Native Environmentのデプロイ

ノート:独自のテナンシで実行している場合は、linux-virt-labs GitHubプロジェクトREADME.mdを読み、演習環境をデプロイする前に前提条件を完了してください。

  1. Lunaデスクトップでターミナルを開きます。

  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. 演習環境をデプロイします。

    カスタム構成を使用してインストールします。

    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のインストールが完了し、インスタンスの準備ができました。前の再生に注意してください。これは、デプロイするノードのパブリックIPアドレスとプライベートIPアドレス、および演習の実行中に必要なその他のデプロイメント情報を出力します。

Oracle Container Host for Kubernetes Builderのインストール

Oracle Container Host for Kubernetes Builder (ock-forge)は、ブート可能なメディアのOracle Container Host for Kubernetes (OCK) OSTreeベースのイメージを構築するためのコマンドライン・ツールです。ock-forgeは、qcow2形式、RAWディスク・イメージ、または既存のブロック・デバイスに直接書き込むことで、仮想マシン・イメージを生成できます。このチュートリアルでは、カスタマイズされた.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-forgeおよびOracle Container Host for Kubernetes Configuration(OCK Configuration)リポジトリをクローニングします。

  3. ock-forgeリポジトリをクローニングします。

    git clone https://github.com/oracle-cne/ock-forge
    
  4. OCK構成リポジトリをクローニングします。

    ock-forgeは、OCKのOCK構成ツリーファイル仕様を使用してイメージを構築します。

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

OCKイメージの構築

次に、ネットワーク・ブロック・デバイスを作成し、ビルドするOCKイメージに追加のLinuxパッケージを追加し、ock-forgeを使用して、ブート可能なOCKイメージの生成に必要なすべての作業を実行します。

ネットワークブロックデバイスの有効化

ネットワーク・ブロック・デバイス(NBD)は、生成された.qcow2イメージをマウントするためにock-forgeによって使用され、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構成リポジトリにあります。

  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イメージ構築プロセスが終了すると、ユーザーの作成、ファイルの作成、ネットワークの構成、systemdユニットの定義などが、Butaneのスキーマに準拠したButane構成YAMLファイルを使用してqcow2ファイルに対して可能になります。詳細は、アップストリームのButaneのドキュメントを参照してください。

次に、Butane準拠のYAMLファイルを作成してテキスト・ファイルを作成し、新しいユーザーを設定します。

デフォルト構成の使用方法

次の2つの方法のいずれかでカスタマイズを適用できます。

次のステップでは、作成したすべての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. ワーカー・ノードに接続します。

    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. ワーカー・ノードに接続します。

    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トレーニング・ステーションに投稿されている他のチュートリアルを参照して、KubernetesおよびOracle Cloud Native Environmentの知識を引き続き拡大します。

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。