附註:
- 此教學課程可在 Oracle 提供的免費實驗室環境中取得。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
搭配 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 映像檔不同。
- 額外的套件或缺少裝置驅動程式。
「OCK 映像檔產生器」是 Shell 命令檔的集合,主要是 ock-forge
,以產生可開機的 qcow2 格式映像檔,以建立叢集節點或 Oracle CNE 可以用來更新執行中容器中節點的 OSTree 容器映像檔。
目標
在本教學課程中,您將學習到:
- 安裝、設定及使用
ock-forge
建立自訂的 OCK 映像檔 - 使用自訂 OCK 映像檔建立 Oracle CNE 叢集
- 包括對 OCK 映像檔所做的
extraIgnitionInline:
變更,可作為所有建立叢集的預設值,或與個別叢集搭配使用時
必要條件
-
至少一個 Oracle Linux 9 執行處理
-
每個系統都應該安裝並設定 Oracle Linux:
- 具備 sudo 存取權的 Oracle 使用者帳戶 (在安裝期間使用)
- 主機之間的以金鑰為基礎的 SSH (亦稱為無密碼 SSH)
- 正在運作的 KVM libvirt 環境。
部署 Oracle Cloud 原生環境
注意:如果在您自己的租用戶中執行,請先閱讀 linux-virt-labs
GitHub 專案 README.md 並完成先決條件,再部署實驗室環境。
-
在 Luna 桌面上開啟終端機。
-
複製
linux-virt-labs
GitHub 專案。git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
變更至工作目錄。
cd linux-virt-labs/ocne2
-
安裝所需的集合。
ansible-galaxy collection install -r requirements.yml
-
增加開機磁碟區大小、安裝 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。
-
部署實驗室環境。
使用自訂配置進行安裝。
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 影像。
-
開啟終端機並透過 SSH 連線至 ocne 執行處理。
ssh oracle@<ip_address_of_node>
-
安裝 Git 和 Podman。
sudo dnf install -y git container-tools
ock-forge
程式需要 Podman,並使用 Git 從 GitHub 複製ock-forge
和 Oracle Container Host for Kubernetes Configuration (OCK Configuration) 儲存區域。 -
複製
ock-forge
儲存庫。git clone https://github.com/oracle-cne/ock-forge
-
複製 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 叢集。
-
載入 NBD 核心模組,並為其指派八個分割區。
sudo modprobe nbd max_part=8
-
確認 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 組態儲存庫中。
-
建立自訂檔案的目錄。
mkdir /home/oracle/ock-forge/ock/configs/config-1.31/custom
-
建立自訂檔案以安裝 Vim 和 Emacs 套裝軟體。
cat << EOF | tee /home/oracle/ock-forge/ock/configs/config-1.31/custom/myconfig.yaml > /dev/null packages: - vim - emacs EOF
-
將自訂檔案包括在
manifest.yaml
檔案中。注意:您可以為目標 Kubernetes 組建新增任何其他自訂項目至 Kubernetes 組態檔。
sed -i '23i - custom/myconfig.yaml' /home/oracle/ock-forge/ock/configs/config-1.31/manifest.yaml
-
確認新的自訂檔案會顯示在
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 映像檔
-
使用
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 指定的區塊裝置清除其分割區表,並以預設幾何圖形重新填入。
-
按 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 叢集的預設值。
- 將自訂組態套用至單一 Oracle CNE 叢集。
下列步驟示範如何將自訂設為您建立之所有 Oracle CNE 叢集的預設值。
-
建立
.ocne
目錄。mkdir /home/oracle/.ocne
-
新增
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
-
確認已建立檔案。
cat /home/oracle/.ocne/defaults.yaml
測試 OCK-forge 建立的新 OCK 映像檔。
-
將 .qcow2 影像複製到 Oracle CNE 安裝。
sudo cp /home/oracle/ock-forge/out/1.31/boot.qcow2 /var/lib/libvirt/images/boot.qcow2-1.31
-
確認複製的 .qcow2 影像。
sudo ls /var/lib/libvirt/images
-
使用 .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
-
確認叢集存在。
ocne cluster list
-
設定新叢集的
kubeconfig
環境變數。export KUBECONFIG=$(ocne cluster show -C ocne)
-
取得叢集節點清單。
kubectl get nodes
-
連線至 Worker 節點。
ocne cluster console --direct --node ocne-worker-1
-
確認
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
-
確認已安裝
emacs
套裝軟體。ls /bin/emacs
範例輸出:
sh-4.4# ls /bin/emacs /bin/emacs
-
輸入
exit
以離開ocne-worker-1
節點。 -
連線至「控制層」節點。
ocne cluster console --direct --node ocne-control-plane-1
-
確認
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
-
確認已安裝
emacs
套裝軟體。ls /bin/emacs
範例輸出:
sh-4.4# ls /bin/emacs /bin/emacs
確認您已透過新增預設不存在的文字檔 (
/etc/myfile.txt
) 和套裝程式 (emacs
),自訂預設的 Oracle CNE 叢集節點。 -
輸入
exit
以離開ocne-control-plane-1
節點。
移除叢集
-
刪除叢集。
ocne cluster delete
-
刪除
defaults.yaml
檔案。rm /home/oracle/.ocne/defaults.yaml
更新單一叢集的組態
接下來,您將建立自訂檔案並將其套用至單一 Oracle CNE 叢集。
-
建立組態檔。
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
-
確認已建立檔案。
cat /home/oracle/myconfig.yaml
-
使用 .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
-
設定新叢集的
kubeconfig
環境變數。export KUBECONFIG=$(ocne cluster show -C ocne)
-
取得叢集節點清單。
kubectl get nodes
-
連線至 Worker 節點。
ocne cluster console --direct --node ocne-worker-1
-
確認
myfile.txt
檔案存在。ls -lsa /etc/myfile.txt
-
確認已安裝
emacs
套裝軟體。ls /bin/emacs
-
輸入
exit
以離開ocne-worker-1
節點。 -
連線至「控制層」節點。
ocne cluster console --direct --node ocne-control-plane-1
-
確認
myfile.txt
檔案存在。ls -lsa /etc/myfile.txt
-
確認已安裝
emacs
套裝軟體。ls /bin/emacs
確認您已透過新增預設不存在的文字檔 (
/etc/myfile.txt
) 和套裝程式 (emacs
),自訂預設的 Oracle CNE 叢集節點。 -
輸入
exit
以離開ocne-control-plane-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 。
Use ock-forge with Oracle Cloud Native Environment
G33072-01
Copyright ©2025, Oracle and/or its affiliates.