搜索

7.3. 使用 on-cluster 层应用自定义分层镜像

download PDF

要使用集群构建过程将自定义分层镜像应用到集群,请创建一个 MachineOSConfig 自定义资源,其中包含 Containerfile、机器配置池引用、存储库推送和 pull secret 和其他参数,如先决条件中所述。

在创建对象时,Machine Config Operator (MCO) 会创建一个 MachineOSBuild 对象和 machine-os-builder pod。构建过程还会创建临时对象,如配置映射,这些对象会在构建完成后进行清理。

构建完成后,MCO 将新的自定义分层镜像推送到您的存储库中,以便在部署新节点时使用。您可以在 MachineOSBuild 对象和 machine-os-builder pod 中看到新自定义分层镜像的摘要镜像拉取 spec。

您不需要与这些新对象或 machine-os-builder pod 交互。但是,如果需要,您可以使用所有这些资源进行故障排除。

您要使用自定义分层镜像的每个机器配置池需要单独的 MachineOSConfig CR。

重要

集群镜像分层只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

先决条件

  • 已使用功能门启用 TechPreviewNoUpgrade 功能集。如需更多信息,请参阅“使用功能门启用功能”。
  • 在 MCO 需要拉取基本操作系统镜像的 openshift-machine-config-operator 命名空间中有 pull secret。
  • 具有 MCO 需要将新的自定义分层镜像推送到 registry 所需的推送 secret。
  • 您有一个 pull secret,节点需要从 registry 中拉取新的自定义分层镜像。这应该与用于将镜像推送到存储库的 secret 不同。
  • 您熟悉如何配置 Containerfile。有关如何创建 Containerfile 的说明超出了本文档的范围。
  • 可选:为要应用自定义分层镜像的节点有单独的机器配置池。

流程

  1. 创建 machineOSconfig 对象:

    1. 创建一个类似以下示例的 YAML 文件:

      apiVersion: machineconfiguration.openshift.io/v1alpha1
      kind: MachineOSConfig
      metadata:
        name: layered
      spec:
        machineConfigPool:
          name: <mcp_name> 1
        buildInputs:
          containerFile: 2
          - containerfileArch: noarch
            content: |-
              FROM configs AS final
              RUN rpm-ostree install cowsay && \
                ostree container commit
          imageBuilder: 3
            imageBuilderType: PodImageBuilder
          baseImagePullSecret: 4
            name: global-pull-secret-copy
          renderedImagePushspec: image-registry.openshift-image-registry.svc:5000/openshift/os-image:latest  5
          renderedImagePushSecret: 6
            name: builder-dockercfg-7lzwl
        buildOutputs: 7
          currentImagePullSecret:
            name: builder-dockercfg-7lzwl
      1
      指定与要部署自定义分层镜像的节点关联的机器配置池的名称。
      2
      指定用于配置自定义分层镜像的 Containerfile。
      3
      指定要使用的镜像构建器的名称。这必须是 PodImageBuilder
      4
      指定 MCO 从 registry 中拉取基础操作系统镜像的 pull secret 名称。
      5
      指定要将新构建的自定义分层镜像推送到的镜像 registry。这可以是集群可访问的任何 registry。本例使用内部 OpenShift Container Platform registry。
      6
      指定 MCO 将新构建的自定义分层镜像推送到该 registry 的推送 secret 名称。
      7
      指定镜像 registry 所需的 secret,节点需要拉取新构建的自定义分层镜像。这应该与用于将镜像推送到存储库的 secret 不同。
    2. 创建 MachineOSConfig 对象:

      $ oc create -f <file_name>.yaml
  2. 如果需要,当 MachineOSBuild 对象被创建且处于 READY 状态时,修改您要使用新自定义分层镜像的节点 spec:

    1. 检查 MachineOSBuild 对象是否为 READY。当 SUCCEEDED 值为 True 时,构建已完成。

      $ oc get machineosbuild

      显示 MachineOSBuild 对象已就绪的输出示例

      NAME                                                                PREPARED   BUILDING   SUCCEEDED   INTERRUPTED   FAILED
      layered-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0-builder   False      False      True        False         False

    2. 通过为 MachineOSConfig 对象中指定的机器配置池添加标签来编辑您要部署自定义分层镜像的节点:

      $ oc label node <node_name> 'node-role.kubernetes.io/<mcp_name>='

      其中:

      node-role.kubernetes.io/<mcp_name>=
      指定用于标识用于部署自定义分层镜像的节点选择器。

      当您保存更改时,MCO 会排空、封锁并重启节点。重新引导后,该节点将使用新的自定义分层镜像。

验证

  1. 使用以下命令验证新 pod 是否正在运行:

    $ oc get pods -n <machineosbuilds_namespace>
    NAME                                                              READY   STATUS    RESTARTS   AGE
    build-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0           2/2     Running   0          2m40s 1
    # ...
    machine-os-builder-6fb66cfb99-zcpvq                               1/1     Running   0          2m42s 2
    1
    这是自定义分层镜像构建的构建 pod。
    2
    此 pod 可用于故障排除。
  2. 验证 MachineOSConfig 对象是否包含对新自定义分层镜像的引用:

    $ oc describe MachineOSConfig <object_name>
    apiVersion: machineconfiguration.openshift.io/v1alpha1
    kind: MachineOSConfig
    metadata:
      name: layered
    spec:
      buildInputs:
        baseImagePullSecret:
          name: global-pull-secret-copy
        containerFile:
        - containerfileArch: noarch
          content: ""
        imageBuilder:
          imageBuilderType: PodImageBuilder
        renderedImagePushSecret:
          name: builder-dockercfg-ng82t-canonical
        renderedImagePushspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image:latest
      buildOutputs:
        currentImagePullSecret:
          name: global-pull-secret-copy
      machineConfigPool:
        name: layered
    status:
      currentImagePullspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image@sha256:f636fa5b504e92e6faa22ecd71a60b089dab72200f3d130c68dfec07148d11cd 1
    1
    新自定义分层镜像的摘要镜像拉取 spec。
  3. 验证 MachineOSBuild 对象是否包含对新自定义分层镜像的引用。

    $ oc describe machineosbuild <object_name>
    apiVersion: machineconfiguration.openshift.io/v1alpha1
    kind: MachineOSBuild
    metadata:
      name: layered-rendered-layered-ad5a3cad36303c363cf458ab0524e7c0-builder
    spec:
      desiredConfig:
        name: rendered-layered-ad5a3cad36303c363cf458ab0524e7c0
      machineOSConfig:
        name: layered
      renderedImagePushspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image:latest
    # ...
    status:
      conditions:
        - lastTransitionTime: "2024-05-21T20:25:06Z"
          message: Build Ready
          reason: Ready
          status: "True"
          type: Succeeded
      finalImagePullspec: image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/os-image@sha256:f636fa5b504e92e6faa22ecd71a60b089dab72200f3d130c68dfec07148d11cd 1
    1
    新自定义分层镜像的摘要镜像拉取 spec。
  4. 验证适当的节点是否使用新的自定义分层镜像:

    1. 以 root 用户身份为 control plane 节点启动一个 debug 会话:

      $ oc debug node/<node_name>
    2. /host 设置为 debug shell 中的根目录:

      sh-4.4# chroot /host
    3. 运行 rpm-ostree status 命令,以查看自定义分层镜像正在使用:

      sh-5.1# rpm-ostree status

      输出示例

      # ...
      Deployments:
      * ostree-unverified-registry:quay.io/openshift-release-dev/os-image@sha256:f636fa5b504e92e6faa22ecd71a60b089dab72200f3d130c68dfec07148d11cd 1
                         Digest: sha256:bcea2546295b2a55e0a9bf6dd4789433a9867e378661093b6fdee0031ed1e8a4
                        Version: 416.94.202405141654-0 (2024-05-14T16:58:43Z)

      1
      新自定义分层镜像的摘要镜像拉取 spec。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.