6.4. 限制代理容器镜像的自动升级


默认情况下,Operator 会自动升级部署中的每个代理,以使用最新可用的容器镜像。在部署的自定义资源(CR)中,您可以通过指定版本号或特定容器镜像的 URL 来限制 Operator 升级镜像的能力。

注意

如果要限制代理容器镜像的自动升级,请确保您的 CR 具有版本号或代理和 init 容器镜像的组合 URL。

6.4.1. 使用版本号限制镜像的自动升级

您可以在新版本可用时,限制代理自动升级的容器镜像版本。

注意

当您根据版本号限制升级时,Operator 继续自动升级代理以使用包含部署的安全修复的任何新镜像。

流程

  1. 编辑代理部署的主代理 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 以具有特权的用户身份登录到 OpenShift,以便在项目中为代理部署编辑和部署 CR。

        $ oc login -u <user> -p <password> --server=<host:port>
      2. 编辑 CR。

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有特权在项目中为代理部署 CR 的用户登录到控制台。
      2. 在左侧窗格中,点 Operators Installed Operator
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) operator。
      4. AMQ Broker 选项卡。
      5. 单击 ActiveMQArtemis 实例名称的名称。
      6. YAML 标签。

        在控制台中,会打开 YAML 编辑器,供您编辑 CR 实例。

        注意

        在 CR 的 status 部分中,.status.version.brokerVersion 字段显示当前部署的 AMQ Broker 版本。

  2. spec.version 属性中,指定 Operator 可将代理和 init 容器镜像升级到的版本。以下是您可以指定的值示例。

    例子

    在以下示例中,Operator 会将部署中的当前容器镜像升级到 7.11.0。

    spec:
       version: '7.11.0'
        ...

    在以下示例中,Operator 会将部署中的当前容器镜像升级到最新可用的 7.10.x 镜像。例如,如果您的部署使用 7.10.1 容器镜像,Operator 会自动将镜像升级到 7.10.2,但不升级到 7.11.7。

    spec:
        version: '7.10'
        ...

    在以下示例中,Operator 会将部署中的当前容器镜像升级到最新的 7.x.x 镜像。例如,如果您的部署使用 7.10.2 镜像,Operator 会自动将镜像升级到 7.11.7。

    spec:
        version: '7'
        ...
    注意

    要在容器镜像的次版本(例如,从 7.10.x 升级到 7.11.x)之间升级,您需要有一个与新容器镜像相同的次版本的 Operator。例如,若要从 7.10.2 升级到 7.11.7,必须安装 7.11.x Operator。

  3. 保存 CR。
重要

除了 spec.version 属性外,请确保 CR 不包含 spec.deploymentPlan.imagespec.deploymentPlan.initImage 属性。这两个属性都覆盖 spec.version 属性。如果 CR 具有这些属性之一以及 spec.version 属性,则部署的代理和 init 镜像版本可能会被分离,这可能会阻止代理运行。

保存 CR 时,Operator 会首先验证对为 spec.version 指定的 AMQ Broker 版本的升级是否可用于现有部署。如果您指定了要升级到的 AMQ Broker 的无效版本,例如,一个还不可用的版本,Operator 会记录警告信息,且不执行进一步的操作。

但是,如果对指定版本的升级可用,Operator 升级部署中的每个代理,以使用与新的 AMQ Broker 版本对应的代理容器镜像。

Operator 使用的代理容器镜像在 Operator 部署的 operator.yaml 配置文件中的环境变量中定义。环境变量名称包含 AMQ Broker 版本的标识符。例如,环境变量 RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_7117 对应于 AMQ Broker 7.11.7。

当 Operator 应用 CR 更改时,它会重启部署中的每个代理 Pod,以便每个 Pod 使用指定的镜像版本。如果您的部署中有多个代理,则一次只有一个代理 Pod 关闭并重启。

其他资源

6.4.2. 使用镜像 URL 限制镜像自动升级

如果要升级部署中的代理以使用特定的容器镜像,您可以在 CR 中指定镜像的 registry URL。在 Operator 将代理升级到指定的容器镜像后,在替换 CR 中的镜像 URL 前,不会进一步升级。例如,Operator 不会自动升级代理以使用包含部署的镜像的安全修复的较新的镜像。

重要

如果要使用镜像 URL 限制自动升级,请为 CR 中的 spec.deploymentPlan.imagespec.deploymentPlan.initImage 属性指定 URL,以确保代理和 init 容器镜像匹配。如果您只指定了一个容器镜像的 URL,则代理和 init 容器镜像可以分离,这可能会阻止代理运行。

注意

如果 CR 在 spec.deploymentPlan.imagespec.deploymentPlan.initImage 属性之外有一个 spec.version 属性,Operator 会忽略 spec.version 属性。

流程

  1. 获取 Operator 可以升级当前镜像的代理和 init 容器镜像的 URL。

    1. 在 Red Hat Catalog 中,打开 broker 容器组件页面: AMQ Broker for RHEL 8 (Multiarch)
    2. Architecture 下拉菜单中,选择您的架构。
    3. Tag 下拉菜单中,选择与您要安装的镜像对应的标签。标签会根据发行日期按按时间顺序显示。标签由发行版本和分配的标签组成。
    4. 打开 Get this image 选项卡。
    5. Manifest 字段中,点 Copy 图标。
    6. 将 URL 粘贴到文本文件中。
    7. 在 Red Hat Catalog 中,打开 init 容器组件页面: AMQ Broker Init for RHEL 8 (Multiarch)
    8. 要获取 init 容器镜像的 URL,请重复您遵循的步骤以获取代理容器镜像的 URL。
  2. 编辑代理部署的主代理 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 以具有特权的用户身份登录到 OpenShift,以便在项目中为代理部署编辑和部署 CR。

        $ oc login -u <user> -p <password> --server=<host:port>
      2. 编辑 CR。

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有特权在项目中为代理部署 CR 的用户登录到控制台。
      2. 在左侧窗格中,点 Operators Installed Operator
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) operator。
      4. AMQ Broker 选项卡。
      5. 单击 ActiveMQArtemis 实例名称的名称。
      6. YAML 标签。

        在控制台中,会打开 YAML 编辑器,供您配置 CR 实例

    3. 复制您在文本文件中记录的代理和 init 容器镜像的 URL,并将它们插入到 CR 中的 spec.deploymentPlan.imagespec.deploymentPlan.initImage 字段中。例如:

      spec:
        ...
        deploymentPlan:
          image: registry.redhat.io/amq7/amq-broker-rhel8@137b893ad15e0cd5353bae134c8fae833257a12641b12d0f774f1565ce66f63c
          initImage: registry.redhat.io/amq7/amq-broker-init-rhel8@b0b3684ef1ebf8b44d3a4c46391984173792dde1bd7363ea06d43a8f95a717d0
        ...
  3. 保存 CR。

    保存 CR 时,Operator 会升级代理以使用新镜像,并使用这些镜像,直到您再次更新 spec.deploymentPlan.imagespec.deploymentPlan.initImage 属性的值。

注意

如果您在没有设置镜像 URL 的情况下部署了 AMQ Broker,您可以原样设置镜像 URL,以防止 Operator 升级部署的当前镜像。您可以找到 .status.version.image.status.version.initImage 属性中部署的镜像的 registry URL,它们位于 CR 的 status 部分。

如果您从 .status. version.image 和 .status.version.initImage 属性复制镜像 URL,并将它们分别插入到 spec.deploymentPlan.imagespec.deploymentPlan.initImage 属性中,Operator 不会升级当前部署的镜像。

其它资源

6.4.3. 验证对自动升级的限制

保存 CR 后,Operator 会验证 CR 是否没有包含以下内容之一:

  • 没有 spec.deploymentPlan.initImage 属性的 spec.deploymentPlan.image 属性,反之亦然。
  • 带有 spec.deploymentPlan. image 和 spec.deploymentPlan.initImage 属性的 spec.version 属性,或两者。

这些配置都可能导致升级后代理和 init 容器镜像的不同版本,这可能会阻止代理启动。如果 CR 中的任何一个配置,Operator 会将 Valid 条件的状态设置为 Unknown 作为警告。例如,如果 CR 有一个 spec.deploymentPlan.image 属性,但没有 spec.deploymentPlan.initImage 属性,反之亦然,Operator 会在 CR 中显示 Valid 条件的以下状态信息。

status:
  conditions:
  - lastTransitionTime: "2023-05-18T15:17:22Z"
    message: Init image and broker image must both be configured as an interdependent pair
    observedGeneration: 1
    reason: InitImageMustBePairedWithBrokerImage
    status: "Unknown"
    type: Valid

具有 Unknown 的 status 值的 Valid 条件不会阻止 Operator 更新 StatefulSet。但是,红帽建议您通过在 CR 中指定组合的 spec.deploymentPlan.image ' 和 'spec.deploymentPlan.initImage 属性或 spec.version 属性 来修复 Valid 条件的状态。

注意

如果 CR 具有 spec.version 属性,Operator 也会验证版本格式是否正确,且版本位于 Operator 支持的有效范围内。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.