附註:

搭配 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 映像檔產生器」可協助 Oracle CNE 使用的預設 OCK 映像檔是否不符合您的需求,例如:

「OCK 映像檔產生器」是 Shell 命令檔的集合,主要是 ock-forge,以產生可開機的 qcow2 格式映像檔,以建立叢集節點或 Oracle CNE 可以用來更新執行中容器中節點的 OSTree 容器映像檔。

目標

在本教學課程中,您將學習到:

必要條件

部署 Oracle Cloud 原生環境

注意:如果在您自己的租用戶中執行,請先閱讀 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,此變數會設定 ansible_python_interpreter 代表在 localhost 上執行的播放。環境會安裝 Oracle Cloud Infrastructure SDK for Python 的 RPM 套裝程式 (位於 python3.6 模組底下),因此需要此變數。

    預設部署資源配置使用 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 位址,以及執行實驗室時所需的任何其他部署資訊。

安裝 Oracle Container Host for Kubernetes Builder

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 組態儲存區域。

    ock-forge 會使用 OCK 的「OCK 組態」樹狀結構檔案設定來建立映像檔。

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

建立 OCK 映像檔

接下來,您將建立一個網路區塊裝置,將一些額外的 Linux 套裝軟體加到您將建立的 OCK 映像檔,然後使用 ock-forge 執行產生可開機 OCK 映像檔所需的所有工作。

啟用網路區塊裝置

ock-forge 會使用網路區塊裝置 (NBD) 來掛載產生的 .qcow2 映像檔,讓 Oracle CNE 能夠建立 Kubernetes 叢集。

  1. 載入 NBD 核心模組,並為其指派八個分割區。

    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 映像檔組建

您可以定義額外的 Linux 套裝程式,以新增至由 ock-forge 建立的 OCK 映像檔。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 映像檔組建處理作業結束後,您可以使用符合 Butane 綱要的 Butane 組態 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: - 必須設為 fcos 才能與 Oracle CNE 搭配使用
    • version: - 必須設為 1.5.0 才能與 Oracle CNE 搭配使用
    • 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 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center