注意:

将 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 映像生成器是 shell 脚本的集合,主要脚本为 ock-forge,用于生成可引导的 qcow2 格式映像以创建集群节点或 OSTree 容器映像,Oracle CNE 可使用该映像更新正在运行的容器中的节点。

目标

在本教程中,您将学习:

先决条件

部署 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 映像生成器在 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。此变量是必需的,因为环境为 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 映像。

  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 映像

接下来,您将创建一个网络块设备,将一些额外的 Linux 软件包添加到要构建的 OCK 映像,然后使用 ock-forge 执行生成可引导 OCK 映像所需的所有工作。

启用网络块设备

ock-forge 使用网络块设备 (Network Block Device,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 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 配置 YAML 文件创建用户、创建文件、配置网络、定义 systemd 单元等到 qcow2 文件。有关详细信息,请参阅上游 Butane 文档。

接下来,您将创建一个符合 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
    

    其中(有关更多详细信息,请参见上游文档):

    • 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 帮助中心