1.3. 用于 Red Hat Edge Manager 的操作系统镜像


基于镜像的操作系统允许将操作系统及其配置和应用程序版本化、部署和更新为单个单元。

通过执行以下操作,使用基于镜像的操作系统降低了操作风险:

  • 尽可能减少经过测试和部署到大量设备之间潜在的偏移量。
  • 通过事务更新和回滚,最大程度降低需要昂贵的维护或替换失败更新的风险。

Red Hat Edge Manager 侧重于运行可引导容器镜像(bootc)的基于镜像的 Linux 操作系统。如需更多信息,请参阅 bootc

重要: bootc 工具不会更新基于软件包的操作系统。

如需更多信息,请参阅附加资源部分

1.3.1. 镜像构建过程

在高级别上,镜像构建过程按如下方式工作:

  1. 选择基础 bootc 操作系统镜像,如 Fedora、CentOS 或 RHEL 镜像。
  2. 创建一个将以下项目分层到基础 bootc 镜像的容器文件:

    • Red Hat Edge Manager 代理和配置。
    • 可选:特定于您的目标部署环境的任何驱动程序。
    • 可选:主机配置,如证书颁发机构捆绑包,以及所有部署通用的应用程序工作负载。
  3. 使用 podmanskopeo 构建、发布和签署 引导 操作系统镜像。
  4. 使用 bootc-image-builder 创建操作系统磁盘镜像。
  5. 使用 skopeo 构建、发布和签署操作系统磁盘镜像。

注: 操作系统磁盘镜像包含分区、卷、文件系统和初始 bootc 镜像。在置备过程中,只需要创建一次操作系统磁盘镜像。

对于后续的设备更新,只需要 bootc 操作系统镜像,其中包含文件系统中的文件。

1.3.2. 其他资源

1.3.3. 构建镜像的特别注意事项

技术预览: 以下主题涵盖了为 Red Hat Edge Manager 构建镜像的特殊注意事项:

1.3.3.1. 通过动态运行时配置构建时间配置

在构建时向操作系统镜像添加配置。在构建时添加配置可确保将配置经过测试、分发和更新在一起。如果构建时配置不可行或需要,您可以使用 Red Hat Edge Manager 在运行时动态配置设备。

在以下情况下首选动态运行时配置:

  • 您有一个特定于部署或特定于站点的配置,如主机名或特定站点的网络凭证。
  • 您有不保护与镜像分发的 secret。
  • 您有应用程序工作负载需要在不重启的情况下添加、更新或删除,或者它们比操作系统更快。

1.3.3.2. 配置 /usr 目录

如果配置是静态的,且应用程序或服务支持该配置,请将配置文件放在 /usr 目录中。通过将配置放在 /usr 目录中,配置保持只读状态,并由镜像完全定义。

在以下情况下,无法将配置放在 /usr 目录中:

  • 配置是特定于部署或特定于站点的。
  • 应用程序或服务只支持从 /etc 目录中读取配置。
  • 可能需要在运行时更改配置。

1.3.3.3. 置入目录

使用置入目录来添加、替换或删除服务聚合的配置文件。不要直接编辑可能导致从目标配置分离的配置文件。

注意: 您可以在目录名称的末尾通过 .d/ 识别置入目录。例如: /etc/containers/certs.d/etc/cron.d/etc/NetworkManager/conf.d

1.3.3.4. 使用脚本的操作系统镜像

避免执行更改文件系统的脚本或命令。bootc 或 Red Hat Edge Manager 可以覆盖可能导致 deviation 或失败完整性检查的更改的文件。

相反,在镜像构建期间运行此类脚本或命令,因此更改是镜像的一部分。或者,使用 Red Hat Edge Manager 的配置管理机制。

1.3.3.5. 其他资源

技术预览: 要准备由 Red Hat Edge Manager 管理的设备,请构建包含 Red Hat Edge Manager 代理的 bootc 操作系统镜像。然后为您的设备构建操作系统磁盘镜像。

如需更多信息,请参阅以下部分:

1.3.4.1. 先决条件

请参阅以下构建 引导操作系统镜像 的先决条件:

1.3.4.2. 安装 Red Hat Edge Manager CLI

要安装 Red Hat Edge Manager CLI,请完成以下步骤:

  1. 运行以下命令,为适合您的系统的软件仓库启用订阅管理器:

    subscription-manager repos --enable rhacm-2.13-for-rhel-<version>-<arch>-rpms

    有关 Red Hat Edge Manager 可用存储库的完整列表,请参阅附加资源部分

  2. 使用您的软件包管理器安装 flightctl CLI。运行以下命令:

    sudo dnf install flightctl-cli

1.3.4.3. 可选:为早期绑定请求注册证书

如果要在镜像中包含代理配置,请完成以下步骤:

  1. 使用 flightctl CLI 使用 Red Hat Edge Manager 服务进行身份验证。运行以下命令:

    flightctl login --username=<your_user> --password=<your_password> https://<rhem_api_server_url>

    注: CLI 使用主机的证书颁发机构池来验证 Red Hat Edge Manager 服务的身份。如果您不将证书颁发机构证书添加到池中,则验证可能会导致 TLS 验证错误。您可以通过在命令中添加 --insecure-skip-tls-verify 标志来绕过服务器验证。

  2. 运行以下命令,以代理配置文件的格式获取注册凭证:

    flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml

    备注:

    • --expiration=365d 选项指定凭据有效期为一年。
    • --output=embedded 选项指定输出是一个带有嵌入注册凭证的代理配置文件。

      返回的 config.yaml 包含 Red Hat Edge Manager 服务、证书颁发机构捆绑包以及代理注册客户端证书和密钥的 URL。请参见以下示例:

    enrollment-service:
      authentication:
        client-certificate-data: LS0tLS1CRUdJTiBD...
        client-key-data: LS0tLS1CRUdJTiBF...
      service:
        certificate-authority-data: LS0tLS1CRUdJTiBD...
        server: https://agent-api.flightctl.127.0.0.1.nip.io:7443
      enrollment-ui-endpoint: https://ui.flightctl.127.0.0.1.nip.io:8081

1.3.4.4. 可选:使用镜像 pull secret

如果您的设备依赖于私有存储库中的容器,您必须为 registry 配置 pull secret。完成以下步骤:

  1. 根据您使用的容器镜像类型,将 pull secret 放在该设备中的以下一个或多个系统路径中:

    • 操作系统镜像使用 /etc/ostree/auth.json 路径。
    • 应用程序容器镜像使用 /root/.config/containers/auth.json 路径。

    重要: 在消耗 secret 前,该设备中必须存在 pull secret。

  2. 确保 pull secret 具有以下格式:

    {
      "auths": {
        "registry.example.com": {
          "auth": "base64-encoded-credentials"
        }
      }
    }

如需更多信息,请参阅附加资源部分

1.3.4.5. 使用 bootc构建操作系统镜像

使用包含 Red Hat Edge Manager 代理的 bootc 构建操作系统镜像。您可以选择在操作系统镜像中包含以下项目:

  • 早期绑定的代理配置
  • 任何驱动程序
  • 主机配置
  • 您需要的应用程序工作负载

完成以下步骤:

  1. 创建包含以下内容的 Containerfile 文件来构建基于 RHEL 9 的操作系统镜像,其中包含 Red Hat Edge Manager 代理和配置:

    FROM registry.redhat.io/rhel9/rhel-bootc:<required_os_version> 
    1
    
    
    RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-rpms && \
        dnf -y install flightctl-agent && \
        dnf -y clean all && \
        systemctl enable flightctl-agent.service && \
        systemctl mask bootc-fetch-apply-updates.timer 
    2
    1
    FROM 中引用的基础镜像是一个可引导容器(bootc)镜像,该镜像已包含 Linux 内核,它允许您重复使用现有的标准容器构建工具和工作流。
    2
    禁用默认的自动更新。更新由 Red Hat Edge Manager 管理。

    重要: 如果您的设备依赖于私有存储库中的容器,则设备 pull secret 必须放在 /etc/ostree/auth.json 路径中。在 secret 可以被消耗前,该设备中必须存在 pull secret。

    1. 可选: 要启用 podman-compose 应用程序支持,请在 Containerfile 文件中添加以下部分:

      RUN dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \
          dnf -y install podman-compose && \
          dnf -y clean all && \
          systemctl enable podman.service
    2. 可选: 如果您为早期绑定创建了 config.yaml,请在 Containerfile 中添加以下部分:

      ADD config.yaml /etc/flightctl/

    如需更多信息,请参阅 可选:为早期绑定请求注册证书

  2. 运行以下命令定义开放容器项目(OCI) registry:

    OCI_REGISTRY=registry.redhat.io
  3. 运行以下命令,定义您具有写入权限的镜像存储库:

    OCI_IMAGE_REPO=${OCI_REGISTRY}/<your_org>/<your_image>
  4. 运行以下命令来定义镜像标签:

    OCI_IMAGE_TAG=v1
  5. 为您的目标平台构建操作系统镜像:

    sudo podman build -t ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG} .

要使用 Sigstore 为 bootc 操作系统镜像签名,请完成以下步骤:

  1. 生成名为 signingkey.pubsigningkey.private 的 Sigstore 密钥对:

    skopeo generate-sigstore-key --output-prefix signingkey
  2. 配置 Podman 和 Skopeo 等容器工具,将 Sigstore 签名与您的签名镜像一起上传到 OCI registry:

    sudo tee "/etc/containers/registries.d/${OCI_REGISTRY}.yaml" > /dev/null <<EOF
    docker:
        ${OCI_REGISTRY}:
            use-sigstore-attachments: true
    EOF
  3. 运行以下命令登录到您的 OCI registry:

    sudo podman login ${OCI_REGISTRY}
  4. 运行以下命令签名并发布操作系统镜像:

    sudo podman push \
        --sign-by-sigstore-private-key ./signingkey.private \
        ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}

1.3.4.7. 构建操作系统磁盘镜像

构建包含设备文件系统的操作系统磁盘镜像。完成以下步骤:

  1. 运行以下命令,创建一个名为 output 的目录:

    mkdir -p output
  2. 使用 bootc-image-builder 从您的操作系统镜像生成类型为 iso 的操作系统磁盘镜像。运行以下命令:

    sudo podman run --rm -it --privileged --pull=newer \
        --security-opt label=type:unconfined_t \
        -v "${PWD}/output":/output \
        -v /var/lib/containers/storage:/var/lib/containers/storage \
        registry.redhat.io/rhel9/bootc-image-builder:latest \
        --type iso \
        ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}

bootc-image-builder 完成后,您可以在 ${PWD}/output/bootiso/install.iso 路径中找到 ISO 磁盘镜像。

将您的磁盘镜像签名并发布到您的开放容器项目(OCI)注册表。另外,您还可以将磁盘镜像压缩并作为 OCI 工件发布到与 bootc 镜像相同的 OCI registry,这有助于统一托管并分发 bootc 和 disk 镜像。要将 ISO 磁盘镜像发布到在 bootc 镜像后命名的存储库,并附加 /diskimage-iso,请完成以下步骤:

1.3.4.8.1. 先决条件

签署您的磁盘镜像并将其发布到您的 OCI 注册表。完成以下步骤:

  1. 将 ISO 磁盘镜像所在的目录的所有者从 root 更改为您的当前用户。运行以下命令:

    sudo chown -R $(whoami):$(whoami) "${PWD}/output"
  2. 定义 OCI_DISK_IMAGE_REPO 环境变量,使其与附加 /diskimage-isobootc 镜像相同的存储库。运行以下命令:

    OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-iso
  3. 运行以下命令来创建清单列表:

    sudo podman manifest create \
        ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
  4. 运行以下命令,将 ISO 磁盘镜像作为 OCI 工件添加到清单列表中:

    sudo podman manifest add \
        --artifact --artifact-type application/vnd.diskimage.iso \
        --arch=amd64 --os=linux \
        ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} \
        "${PWD}/output/bootiso/install.iso"
  5. 使用您的私有 Sigstore 密钥为清单列表签名,并将镜像推送到 registry。运行以下命令:

    sudo podman manifest push --all \
         --sign-by-sigstore-private-key ./signingkey.private \
        ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} \
        docker://${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}

1.3.4.9. 其他资源

1.3.4.10. 特定目标平台的要求

有关构建镜像,请参阅以下平台注意事项:

在为 VMware vSphere 构建操作系统镜像和磁盘镜像时,您可以使用以下更改跟踪通用镜像构建过程:

  • 在置备虚拟设备时,通过 cloud-init 注入注册证书或代理配置来使用后绑定。
  • open-vm-tools 客户机工具添加到镜像中。
  • 构建类型为 qcow2 的磁盘镜像,而不是 iso

通过对以下步骤的更改完成通用步骤:

  1. 基于 RHEL 9 构建操作系统镜像,其中包含 Red Hat Edge Manager 代理和虚拟机客户机工具,但排除代理配置。
  2. 使用以下内容创建一个名为 Containerfile 的文件:

    FROM registry.redhat.io/rhel9/bootc-image-builder:latest
    
    RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-rpms && \
        dnf -y install flightctl-agent && \
        dnf -y clean all && \
        systemctl enable flightctl-agent.service
    
    RUN dnf -y install cloud-init open-vm-tools && \
        dnf -y clean all && \
        ln -s ../cloud-init.target /usr/lib/systemd/system/default.target.wants && \
        systemctl enable vmtoolsd.service
  3. 可选: 要启用 podman-compose 应用程序支持,请在 Containerfile 文件中添加以下部分:

    RUN dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \
        dnf -y install podman-compose && \
        dnf -y clean all && \
        systemctl enable podman.service

按照通用镜像构建过程,构建、签名和发布 bootc 操作系统镜像。

  1. 运行以下命令,创建一个名为 output 的目录:

    mkdir -p output
  2. 运行以下命令,从您的操作系统镜像生成类型为 vmdk 的操作系统磁盘镜像:

    sudo podman run --rm -it --privileged --pull=newer \
        --security-opt label=type:unconfined_t \
        -v "${PWD}/output":/output \
        -v /var/lib/containers/storage:/var/lib/containers/storage \
        registry.redhat.io/rhel9/bootc-image-builder:latest \
        --type qcow2 \
        ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}

bootc-image-builder 完成后,您可以在 ${PWD}/output/vmdk/disk.vmdk 路径中找到磁盘镜像。

Red Hat OpenShift Virtualization 可以从 OCI registry 下载磁盘镜像,但它需要一个容器磁盘镜像而不是 OCI 工件。完成以下步骤以构建、签名并上传 QCoW2 磁盘镜像:

  1. 使用以下内容创建一个名为 Containerfile.qcow2 的文件:

    FROM registry.access.redhat.com/ubi9/ubi:latest AS builder
    ADD --chown=107:107 output/qcow2/disk.qcow2 /disk/ 
    1
    
    RUN chmod 0440 /disk/* 
    2
    
    FROM scratch
    COPY --from=builder /disk/* /disk/ 
    3
    1
    将 QCoW2 磁盘镜像添加到构建器容器中,以设置所需的 107 文件所有权,即 QEMU 用户。
    2
    设置所需的 0440 文件权限。
    3
    将文件复制到全新镜像。
  2. 构建、签名和发布您的磁盘镜像。运行以下命令:

    sudo chown -R $(whoami):$(whoami) "${PWD}/output"
    OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-qcow2
    sudo podman build -t ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} -f Containerfile.qcow2 .
    sudo podman push --sign-by-sigstore-private-key ./signingkey.private ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
1.3.4.10.2. 为 VMware vSphere 构建的镜像

在为 VMware vSphere 构建操作系统镜像和磁盘镜像时,您可以使用以下更改跟踪通用镜像构建过程:

  • 在置备虚拟设备时,通过 cloud-init 注入注册证书或代理配置来使用后绑定。
  • open-vm-tools 客户机工具添加到镜像中。
  • 构建类型为 vmdk 的磁盘镜像,而不是 iso

通过对以下步骤的更改完成通用步骤:

  1. 基于 RHEL 9 构建操作系统镜像,其中包含 Red Hat Edge Manager 代理和虚拟机客户机工具,但排除代理配置。
  2. 使用以下内容创建一个名为 Containerfile 的文件:

    FROM registry.redhat.io/rhel9/bootc-image-builder:latest
    
    RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-rpms && \
        dnf -y install flightctl-agent && \
        dnf -y clean all && \
        systemctl enable flightctl-agent.service && \
    
    RUN dnf -y install cloud-init open-vm-tools && \
        dnf -y clean all && \
        ln -s ../cloud-init.target /usr/lib/systemd/system/default.target.wants && \
        systemctl enable vmtoolsd.service
  3. 运行以下命令,创建一个名为 output 的目录:

    mkdir -p output
  4. 运行以下命令,从您的操作系统镜像生成类型为 vmdk 的操作系统磁盘镜像:

    sudo podman run --rm -it --privileged --pull=newer \
        --security-opt label=type:unconfined_t \
        -v "${PWD}/output":/output \
        -v /var/lib/containers/storage:/var/lib/containers/storage \
        registry.redhat.io/rhel9/bootc-image-builder:latest \
        --type vmdk \
        ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}

bootc-image-builder 完成后,您可以在 ${PWD}/output/vmdk/disk.vmdk 路径中找到磁盘镜像。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部