注意:
- 此教程位于 Oracle 提供的免费实验室环境中。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
将 ock-forge 与 Oracle Cloud Native Environment 结合使用
简介
Oracle Container Host for Kubernetes 映像构建器(OCK 映像构建器)工具用于构建 Oracle Cloud Native Environment (Oracle CNE) 部署中使用的 Oracle Container Host for Kubernetes (OCK) 映像。OCK 映像生成器在 Oracle CNE 使用的默认 OCK 映像不符合您的需要时提供帮助:
- 与标准 OCK 映像不同的分区布局。
- 额外的软件包或缺少的设备驱动程序。
OCK 映像生成器是 shell 脚本的集合,主要脚本为 ock-forge
,用于生成可引导的 qcow2 格式映像以创建集群节点或 OSTree 容器映像,Oracle CNE 可使用该映像更新正在运行的容器中的节点。
目标
在本教程中,您将学习:
- 安装、设置和使用
ock-forge
构建定制 OCK 映像 - 使用定制 OCK 映像创建 Oracle CNE 集群
- 将对 OCK 映像的
extraIgnitionInline:
更改作为创建的所有集群的默认值或与单个集群一起使用时
先决条件
-
最少一个 Oracle Linux 9 实例
-
每个系统都应安装 Oracle Linux 并配置以下各项:
- 具有 sudo 访问权限的 Oracle 用户帐户(在安装期间使用)
- 主机之间基于密钥的 SSH(也称为无密码 SSH)
- 工作的 KVM libvirt 环境。
部署 Oracle Cloud Native Environment
注:如果在您自己的租户中运行,请阅读 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 映像生成器在 Oracle Linux 9 上运行效果最佳。
-
部署实验室环境。
使用定制配置进行安装。
ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
空闲实验室环境需要额外的变量
local_python_interpreter
,该变量为在 localhost 上运行的播放设置ansible_python_interpreter
。此变量是必需的,因为环境为 Python 的 Oracle Cloud Infrastructure SDK 安装 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 地址以及运行实验室时所需的任何其他部署信息。
安装适用于 Kubernetes 构建器的 Oracle 容器主机
Oracle Container Host for Kubernetes Builder (ock-forge
) is a command-line tool for building bootable media Oracle Container Host for Kubernetes (OCK) OSTree-based images. ock-forge
can generate virtual machine images in qcow2 format, raw disk images, or by writing directly to an existing block device.本教程演示了如何构建和使用定制的 .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 Configuration 系统信息库。
ock-forge
使用 OCK 的 OCK 配置树文件规范来构建映像。cd ock-forge/ git clone https://github.com/oracle-cne/ock
构建 OCK 映像
接下来,您将创建一个网络块设备,将一些额外的 Linux 软件包添加到要构建的 OCK 映像,然后使用 ock-forge
执行生成可引导 OCK 映像所需的所有工作。
启用网络块设备
ock-forge
使用网络块设备 (Network Block Device,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 Configuration 系统信息库中。
-
为定制文件创建目录。
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 文档。
接下来,您将创建一个符合 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
其中(有关更多详细信息,请参见上游文档):
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 帮助中心。
Use ock-forge with Oracle Cloud Native Environment
G33071-01
Copyright ©2025, Oracle and/or its affiliates.