搜索

在 OpenShift 中部署 AMQ Broker

download PDF
Red Hat AMQ 2020.Q4

用于与 AMQ Broker 7.8 一起使用

摘要

了解如何在 OpenShift Container Platform 上安装和部署 AMQ Broker。

第 1 章 OpenShift Container Platform 上的 AMQ Broker 简介

Red Hat AMQ Broker 7.8 作为容器化镜像提供,可用于 OpenShift Container Platform(OCP) 3.11 和 4.5 和 4.6。

AMQ Broker 基于 Apache ActiveMQ Artemis。它提供兼容 JMS 的消息代理。设置初始代理 pod 后,您可以使用 OpenShift Container Platform 功能快速部署副本。

1.1. 版本兼容性和支持

如需有关 OpenShift Container Platform 镜像版本兼容性的详细信息,请参阅:

1.2. 不支持的功能

  • 基于 master-slave 的高可用性

    不支持通过配置 master 和 slave 对来实现高可用性(HA)。相反,当 pod 被缩减时,OpenShift 中会利用 scaledown 控制器来提供 HA,这将启用消息迁移。

    可能需要相应地配置用于 HA 的代理集群的外部客户端(无论是通过 OpenShift 代理)或使用绑定端口。在集群方案中,代理将通知某些客户端所有代理的主机和端口信息的地址。由于它们只能在内部访问,因此某些客户端功能将无法正常工作,或者需要禁用。

    客户端Configuration

    核心 JMS 客户端

    由于外部核心协议 JMS 客户端不支持 HA 或任何类型的故障转移,因此必须使用TopologyForLoadBalancing=false 配置连接工厂。

    AMQP 客户端

    AMQP 客户端不支持故障切换列表

  • 集群中的持久订阅

    创建持久订阅时,这会在客户端连接的代理中以持久队列表示。当在 OpenShift 中运行集群时,客户端不知道创建持久订阅队列的代理上。如果订阅是持久的,并且客户端重新连接目前没有负载均衡器将其重新连接到同一节点的方法。当发生这种情况时,客户端可能会连接到不同的代理并创建重复的订阅队列。因此,不建议在代理集群中使用持久订阅。

第 2 章 规划在 OpenShift Container Platform 上部署 AMQ Broker

2.1. 部署方法比较

在 OpenShift Container Platform 中有两个部署 AMQ Broker 的方法:

本节介绍这些部署方法。

使用 AMQ Broker Operator 部署(推荐)

Operator 是可让您打包、部署和管理 OpenShift 应用程序的程序。通常,Operator 会自动执行常见或复杂的任务。通常,Operator 旨在提供:

  • 一致、可重复的安装
  • 系统组件的健康检查
  • over-the-air(OTA)更新
  • 受管升级

AMQ Broker Operator 是在 OpenShift Container Platform 上创建代理部署的建议方法。Operator 允许您在代理实例运行时进行更改,因为它们始终侦听您用来配置部署的自定义资源(CR)实例的更改。对 CR 进行更改时,Operator 会将更改与现有的代理部署协调,并更新部署以反映更改。另外,Operator 也提供了一个消息迁移功能,可以确保消息传递数据的完整性。当集群部署中的代理因为部署失败或意图缩减而关闭时,此功能会将消息迁移到仍在同一代理集群中运行的代理 Pod 中。

使用应用程序模板进行部署
重要

从 7.8 开始,在 OpenShift Container Platform 中使用应用程序模板在 OpenShift Container Platform 中部署 AMQ Broker 是一个已弃用的功能。这个功能将在以后的发行版本中被删除。红帽继续支持基于应用程序模板的现有部署。但是,红帽不推荐在新部署中使用应用程序模板。对于新部署,红帽建议使用 AMQ Broker Operator。

模板是 描述可由 OpenShift Container Platform 创建参数化和处理的对象的一种方式。您可以使用模板来描述在 OpenShift 项目中创建的任何内容,如服务或构建配置。AMQ Broker 有一些 示例应用程序模板,它可让您以 DeploymentConfig- 或 StatefulSet-based 应用程序创建各种类型的代理部署。您可以通过为应用程序模板中包含的环境变量指定值来配置代理部署。模板的一个限制是,当它们有效创建初始代理部署时,它们不提供更新部署的机制。另外,因为 AMQ Broker 没有为基于模板的部署提供消息迁移功能,因此不建议在生产环境中使用模板。

其他资源

2.2. AMQ Broker Operator 自定义资源定义概述

通常,自定义资源定义(CRD)是配置项目的模式,您可以为 Operator 部署的自定义 OpenShift 对象进行修改。通过创建对应的自定义资源(CR)实例,您可以为 CRD 中的配置项指定值。如果您是 Operator 开发人员,则通过 CRD 公开的功能实际上就是如何配置和使用部署对象的 API。您可以通过常规 HTTP curl 命令直接访问 CRD,因为 CRD 通过 Kubernetes 自动公开。

您可以使用 OpenShift 命令行界面(CLI)或 Operator Lifecycle Manager( OperatorHub 图形界面)安装 AMQ Broker Operator。在这两种情况下,AMQ Broker Operator 包括以下 CRD。

主代理 CRD

您可以基于此 CRD 部署 CR 实例,以创建并配置代理部署。

根据您安装 Operator 的方式,此 CRD 是:

  • Operator 安装存档(OpenShift CLI 安装方法)的 crds 目录中的 broker_activemqartemis_crd 文件。
  • OpenShift Container Platform Web 控制台的 Custom Resource Definitions 部分中的 ActiveMQArtemis CRD(OperatorHub 安装方法)
address CRD

您根据此 CRD 部署 CR 实例,以便为代理部署创建地址和队列。

根据您安装 Operator 的方式,此 CRD 是:

  • Operator 安装存档(OpenShift CLI 安装方法)的 crds 目录中的 broker_activemqartemisaddress_crd 文件。
  • OpenShift Container Platform Web 控制台的 Custom Resource Definitions 部分中的 ActiveMQArtemisAddresss CRD(OperatorHub 安装方法)
scaleDown CRD

当实例化用于消息迁移的扩展控制器时,Operator 会自动基于此 CRD 创建 CR 实例。

根据您安装 Operator 的方式,此 CRD 是:

  • Operator 安装存档(OpenShift CLI 安装方法)的 crds 目录中的 broker_activemqartemisscaledown_crd 文件。
  • OpenShift Container Platform Web 控制台的 Custom Resource Definitions 部分中的 ActiveMQArtemisScaledown CRD(OperatorHub 安装方法)。

其他资源

2.3. AMQ Broker Operator 示例自定义资源概述

在安装过程中下载和提取的 AMQ Broker Operator 存档包括 deploy/crs 目录中的示例自定义资源(CR)文件。这些 CR 文件示例可让您:

  • 在不使用 SSL 或集群的情况下部署最小代理。
  • 定义地址。

您下载和提取的 broker Operator 存档还包括 deploy/examples 目录中示例部署的 CR,如下所示。

artemis-basic-deployment.yaml
基本代理部署。
artemis-persistence-deployment.yaml
使用持久性存储进行代理部署。
artemis-cluster-deployment.yaml
集群代理部署。
artemis-persistence-cluster-deployment.yaml
使用持久性存储部署集群代理。
artemis-ssl-deployment.yaml
使用 SSL 安全进行代理部署.
artemis-ssl-persistence-deployment.yaml
使用 SSL 安全性和持久存储进行代理部署.
artemis-aio-journal.yaml
将异步 I/O(AIO)与代理日志结合使用。
address-queue-create.yaml
地址和队列创建.

2.4. Operator 如何选择容器镜像

当您根据 Operator 的 最少 版本 7.8.5-opr-2 为代理部署创建自定义资源(CR)实例时,您不需要 在 CR 中明确指定代理或初始容器镜像名称。默认情况下,如果部署 CR 且没有明确指定容器镜像值,Operator 会自动选择要使用的适当容器镜像。

注意

如果使用 OpenShift 命令行界面安装 Operator,Operator 安装存档包含一个名为 broker_activemqartis_cr.yaml 的示例 CR 文件。在示例 CR 中,包含 spec.deploymentPlan.image 属性,并设置为其 占位符 的默认值。这个值表示,在部署 CR 之前,Operator 不会选择代理容器镜像。

broker_activemqartis_cr.yaml 示例 CR 文件 中不包含 spec.deploymentPlan. initImage 属性(指定 Init 容器镜像)。如果您没有在 CR 中明确包含 spec.deploymentPlan.initImage 属性并指定值,Operator 会选择要在部署 CR 时使用的适当内置初始容器镜像。

本节介绍了 Operator 如何选择这些镜像。

要选择 broker 和 Init Container 镜像,Operator 首先决定镜像应对应的 AMQ Broker 版本。Operator 会根据以下方法决定版本:

  • 如果主 CR 中的 spec.upgrades.enabled 属性已设置为 truespec.version 属性指定 7.7.0、78.07.8.17.8.2,Operator 会使用指定的版本。
  • 如果 spec.upgrades.enabled 没有设置为 true,或者将 spec.version 设置为早于 7.7.0 的 AMQ Broker 版本,Operator 将使用 最新版本的 AMQ Broker(即 7.8.5)。

备注:对于 IBM Z 和 IBM Power Systems,7.8.17.8.2spec.version 的唯一有效值。

然后,Operator 会检测您的容器平台。AMQ Broker Operator 可以在以下容器平台中运行:

  • OpenShift Container Platform (x86_64)
  • IBM Z 上的 OpenShift Container Platform(s390x)
  • IBM Power Systems(ppc64le)上的 OpenShift Container Platform

根据 AMQ Broker 和容器平台的版本,Operator 会引用 operator.yaml 配置文件中的两组环境变量。这些环境变量为 AMQ Broker 的不同版本指定代理和初始容器镜像,如以下子部分所述。

2.4.1. 代理容器镜像的环境变量

代理容器镜像的 operator.yaml 配置文件中包含的环境变量有以下命名约定:

OpenShift Container Platform
RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_<AMQ_Broker_version_identifier>
IBM Z 上的 OpenShift Container Platform
RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_<AMQ_Broker_version_identifier>_s390x
IBM Power 系统上的 OpenShift Container Platform
RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_<AMQ_Broker_version_identifier>_ppc64le

表中显示了每个支持的容器平台和特定的 AMQ Broker 版本的环境变量名称。

容器平台环境变量名称

OpenShift Container Platform

  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_770
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_780
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_781

IBM Z 上的 OpenShift Container Platform

  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_770_s390x
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_780_s390x
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_781_s390x

IBM Power 系统上的 OpenShift Container Platform

  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_770_ppc64le
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_780_ppc64le
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_781_ppc64le

每个环境变量的值指定红帽提供的代理容器镜像。例如:

- name: RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_787
  #value: registry.redhat.io/amq7/amq-broker:7.8-33
  value: registry.redhat.io/amq7/amq-broker@sha256:4d60775cd384067147ab105f41855b5a7af855c4d9cbef1d4dea566cbe214558

因此,基于 AMQ Broker 版本和容器平台,Operator 会确定适用的环境变量名称。在启动代理容器时,Operator 会使用对应的镜像值。

注意

operator.yaml 文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#)符号开头,表示 SHA 值对应于特定的容器镜像标签。

2.4.2. 初始容器镜像的环境变量

Init Container 镜像的 operator.yaml 配置文件中包含的环境变量包括以下命名规则:

OpenShift Container Platform
RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_<AMQ_Broker_version_identifier>
IBM Z 上的 OpenShift Container Platform
RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_s390x_<AMQ_Broker_version_identifier>
IBM Power 系统上的 OpenShift Container Platform
RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_ppc64le_<AMQ_Broker_version_identifier>

表中显示了每个支持的容器平台和特定的 AMQ Broker 版本的环境变量名称。

容器平台环境变量名称

OpenShift Container Platform

  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_770
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_780
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_781

IBM Z 上的 OpenShift Container Platform

  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_s390x_770
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_s390x_780
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_s390x_781

IBM Power 系统上的 OpenShift Container Platform

  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_ppc64le_770
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_ppc64le_780
  • RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_ppc64le_781

每个环境变量的值指定红帽提供的初始容器镜像。例如:

- name: RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_787
  #value: registry.redhat.io/amq7/amq-broker-init-rhel7:7.8-1
  value: registry.redhat.io/amq7/amq-broker-init-rhel7@sha256:f7482d07ecaa78d34c37981447536e6f73d4013ec0c64ff787161a75e4ca3567

因此,基于 AMQ Broker 版本和容器平台,Operator 会确定适用的环境变量名称。在启动初始容器时,Operator 会使用对应的镜像值。

注意

如示例所示,Operator 会使用一个由 安全哈希算法 (SHA)值表示的镜像。注释行以数字符号(#)符号开头,表示 SHA 值对应于特定的容器镜像标签。观察对应的容器镜像标签 不是 0.2 形式的 floating 标签。这意味着 Operator 使用的容器镜像仍然被修复。当红帽可用时,Operator 不会自动 拉取和使用新的 微版本 (即 0.2-n,其中 n 是最新的微版本)。

其他资源

2.5. Operator 部署备注

本节介绍了规划基于 Operator 的部署时的一些重要注意事项

  • 部署附带 AMQ Broker Operator 的自定义资源定义(CRD)需要对 OpenShift 集群具有集群管理员特权。部署 Operator 时,非管理员用户可通过对应的自定义资源(CR)创建代理实例。要启用常规用户来部署 CR,集群管理员首先必须为 CRD 分配角色和权限。如需更多信息,请参阅 OpenShift Container Platform 文档中的为自定义资源定义创建集群角色
  • 当您使用 CRD 为最新的 Operator 版本更新集群时,这个更新会 影响集群中的所有项目。从之前版本的 Operator 部署的任何代理 Pod 都可能无法更新其状态。当您在 OpenShift Container Platform Web 控制台中点击正在运行代理 Pod 的 Logs 选项卡时,您会看到表示"UpdatePodStatus"失败的消息。但是,该项目中的代理 Pod 和 Operator 将继续按预期工作。要为受影响的项目修复这个问题,还必须升级该项目以使用最新版本的 Operator。
  • 您无法通过部署多个代理自定义资源(CR)实例在给定的 OpenShift 项目中创建多个代理部署。但是,当您在项目中创建代理部署时,您可以为 地址部署多个 CR 实例。
  • 如果要使用持久性存储部署代理,且没有 OpenShift 集群中的容器原生虚拟化,则需要手动置备持久性卷(PV),并确保这些代理可以被 Operator 声明。例如,如果要创建带有持久性存储(即,在 CR 中设置 persistenceEnabled=true )的两个代理集群,则需要有两个持久性卷可用。默认情况下,每个代理实例都需要 2 GiB 存储。

    如果您在 CR 中指定 persistenceEnabled=false,则部署的代理 将使用临时存储。临时存储意味着每次重启代理 Pod 时,任何现有数据都会丢失。

    有关在 OpenShift Container Platform 中置备持久性存储的更多信息,请参阅:

  • 在首次部署 CR 之前,您必须将以下列出的项目配置添加到主代理 CR 实例中。您不能将 这些项目的配置添加到已在运行的代理部署中。

下一节中的步骤演示了如何安装 Operator,并使用自定义资源(CR)在 OpenShift Container Platform 上创建代理部署。成功完成此流程后,您将使 Operator 在单个 Pod 中运行。您创建的每个代理实例将在与 Operator 相同的命名空间中的 StatefulSet 中作为单独的 Pod 运行。之后,您将了解如何使用专用的寻址 CR 在代理部署中定义地址。

第 3 章 使用 AMQ Broker Operator 在 OpenShift Container Platform 上部署 AMQ Broker

3.1. 先决条件

3.2. 使用 CLI 安装 Operator

注意

每个 Operator 版本都需要您下载最新的 AMQ Broker 7.8.5 .3 Operator 安装和示例文件,如下所述。

本节中的步骤演示了如何使用 OpenShift 命令行界面(CLI)在给定的 OpenShift 项目中安装和部署用于 AMQ Broker 7.8 的 Operator 的最新版本。在后续流程中,您可以使用此 Operator 部署一些代理实例。

3.2.1. 获取 Operator 代码

此流程演示了如何访问并准备为 AMQ Broker 7.8 安装最新版本的 Operator 的代码。

步骤

  1. 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
  2. 确保将 Version 下拉列表的值设置为 7.8.5,并且选择了 Patches 选项卡。
  3. AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download

    下载 amq-broker-operator-7.8.5-ocp-install-examples.zip 压缩存档会自动开始。

  4. 下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为 ~/broker/operator 的目录。

    $ mkdir ~/broker/operator
    $ mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
  5. 在您选择的安装目录中,提取存档的内容。例如:

    $ cd ~/broker/operator
    $ unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
  6. 切换至提取存档时创建的目录。例如:

    $ cd amq-broker-operator-7.8.5-ocp-install-examples
  7. 以集群管理员身份登录 OpenShift Container Platform。例如:

    $ oc login -u system:admin
  8. 指定要安装 Operator 的项目。您可以创建新项目或切换到现有项目。

    1. 创建一个新项目

      $ oc new-project <project-name>
    2. 或者,切换到现有项目:

      $ oc project <project-name>
  9. 指定要与 Operator 搭配使用的服务帐户。

    1. 在您提取的 Operator 归档的部署目录中,打开 service_account.yaml 文件。
    2. 确保 kind 元素设置为 ServiceAccount
    3. metadata 部分中,为服务帐户分配一个自定义名称,或者使用默认名称。默认名称为 amq-broker-operator
    4. 在项目中创建服务帐户。

      $ oc create -f deploy/service_account.yaml
  10. 为 Operator 指定角色名称。

    1. 打开 role.yaml 文件。此文件指定 Operator 可以使用和修改的资源。
    2. 确保 kind 元素已设置为 Role
    3. metadata 部分中,为角色分配一个自定义名称,或者使用默认名称。默认名称为 amq-broker-operator
    4. 在您的项目中创建角色。

      $ oc create -f deploy/role.yaml
  11. 为 Operator 指定角色绑定。角色绑定会根据您指定的名称将之前创建的服务帐户绑定到 Operator 角色。

    1. 打开 role_binding.yaml 文件。确保 ServiceAccountRole 的名称service_account.yamlrole.yaml 文件中指定的值匹配。例如:

      metadata:
          name: amq-broker-operator
      subjects:
          kind: ServiceAccount
          name: amq-broker-operator
      roleRef:
          kind: Role
          name: amq-broker-operator
    2. 在项目中创建角色绑定。

      $ oc create -f deploy/role_binding.yaml

在以下流程中,您要在项目中部署 Operator。

3.2.2. 使用 CLI 部署 Operator

本节中的步骤演示了如何使用 OpenShift 命令行界面(CLI)在 OpenShift 项目中部署用于 AMQ Broker 7.8 的 Operator 的最新版本。

先决条件

  • 您必须已经为 Operator 部署准备了 OpenShift 项目。请参阅 第 3.2.1 节 “获取 Operator 代码”
  • 从 AMQ Broker 7.3 开始,您可以使用新版本的红帽生态系统目录访问容器镜像。此新版本的 registry 要求您成为经过身份验证的用户,然后才能访问镜像。在按照本节中的步骤进行操作前,您必须首先完成 Red Hat Container Registry 身份验证 中描述的步骤。
  • 如果您要使用持久性存储部署代理,且没有 OpenShift 集群中的容器原生虚拟化存储,则需要手动置备持久性卷(PV),并确保它们可以被 Operator 声明。例如,如果要创建带有持久性存储(即,通过设置自定义资源中的 persistenceEnabled=true )的两个代理集群,则需要有两个 PV 可用。默认情况下,每个代理实例都需要 2 GiB 存储。

    如果您在自定义资源中指定 persistenceEnabled=false,则部署的代理 将使用临时存储。临时存储意味着每次重启代理 Pod 时,任何现有数据都会丢失。

    有关置备持久性存储的更多信息,请参阅:

步骤

  1. 在 OpenShift 命令行界面(CLI)中,以集群管理员身份登录 OpenShift。例如:

    $ oc login -u system:admin
  2. 切换到您之前为 Operator 部署准备的项目。例如:

    $ oc project <project_name>
  3. 切换到之前在之前提取 Operator 安装存档时创建的目录。例如:

    $ cd ~/broker/operator/amq-broker-operator-7.8.5-ocp-install-examples
  4. 部署 Operator 中包含的 CRD。在部署和启动 Operator 之前,您必须在 OpenShift 集群中安装 CRD。

    1. 部署主代理 CRD。

      $ oc create -f deploy/crds/broker_activemqartemis_crd.yaml
    2. 部署地址 CRD。

      $ oc create -f deploy/crds/broker_activemqartemisaddress_crd.yaml
    3. 部署 scaledown controller CRD。

      $ oc create -f deploy/crds/broker_activemqartemisscaledown_crd.yaml
  5. 将与红帽生态系统目录中用于身份验证的帐户关联的 pull secret 与 OpenShift 项目 的默认deployerbuilder 服务帐户链接。

    $ oc secrets link --for=pull default <secret_name>
    $ oc secrets link --for=pull deployer <secret_name>
    $ oc secrets link --for=pull builder <secret_name>
  6. 在您下载并提取的 Operator 归档的部署目录中,打开 operator.yaml 文件。

    注意

    operator.yaml 文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#)符号开头,表示 SHA 值对应于特定的容器镜像标签。

  7. 部署 Operator。

    $ oc create -f deploy/operator.yaml

    在 OpenShift 项目中,Operator 会启动新的 Pod。

    在 OpenShift Container Platform Web 控制台中,Operator Pod 的 Events 选项卡中的信息确认 OpenShift 已部署了 Operator 镜像,已将新容器分配给 OpenShift 集群中的某个节点,并且已启动了新的容器。

    另外,如果您点击 Pod 中的 Logs 选项卡,输出应包括以下行:

    ...
    {"level":"info","ts":1553619035.8302743,"logger":"kubebuilder.controller","msg":"Starting Controller","controller":"activemqartemisaddress-controller"}
    {"level":"info","ts":1553619035.830541,"logger":"kubebuilder.controller","msg":"Starting Controller","controller":"activemqartemis-controller"}
    {"level":"info","ts":1553619035.9306898,"logger":"kubebuilder.controller","msg":"Starting workers","controller":"activemqartemisaddress-controller","worker count":1}
    {"level":"info","ts":1553619035.9311671,"logger":"kubebuilder.controller","msg":"Starting workers","controller":"activemqartemis-controller","worker count":1}

    前面的输出确认新部署的 Operator 与 Kubernetes 通信,代理和寻址的控制器正在运行,并且这些控制器已启动了一些 worker。

注意

建议您仅在给定的 OpenShift 项目中部署 AMQ Broker Operator 的单个实例。不建议将 Operator 部署的 spec.replicas 属性设置为大于 1 的值,或者 不要 在同一项目中多次部署 Operator。

其他资源

3.3. 使用 OperatorHub 安装 Operator

3.3.1. Operator Lifecycle Manager 概述

在 OpenShift Container Platform 4.5 及更新的版本中,Operator Lifecycle Manager (OLM)可帮助用户安装、更新所有 Operator 以及在用户集群中运行的关联服务的生命周期。Operator Framework 的一部分,后者是一个开源工具包,用于以有效、自动化且可扩展的方式管理 Kubernetes 原生应用程序(Operator)。

OLM 默认在 OpenShift Container Platform 4.5 及更新的版本中运行,辅助集群管理员对集群上运行的 Operator 进行安装、升级和授予访问权。OpenShift Container Platform Web 控制台提供一些管理界面,供集群管理员安装 Operator,以及为特定项目授权以便使用集群上的可用 Operator 目录。

OperatorHub 是 OpenShift 集群管理员用来发现、安装和升级 Operator 的图形界面。只需单击一次,即可从 OperatorHub 拉取(pull),由 OLM 安装和管理这些 Operator,为工程团队在开发、测试和生产环境中管理软件做好准备。

部署 Operator 后,您可以使用自定义资源(CR)实例来创建代理部署,如独立和集群代理。

3.3.2. 在 OperatorHub 中安装 Operator

在 OperatorHub 中,AMQ Broker 7.8 的 Operator 名称是 Red Hat Integration - AMQ Broker。您应该可以看到 OperatorHub 中自动可用的 Operator。但是,如果没有看到它,请按照以下步骤在 OperatorHub 中手动安装 Operator。

注意

本节论述了如何安装 RHEL 7 Operator。另外,还有一个提供 RHEL 8 镜像的 RHEL 8 的 Operator。

要确定要选择哪个 Operator,请查看 Red Hat Enterprise Linux Container Compatibility Matrix

步骤

  1. 在网页浏览器中,导航到 AMQ Broker 7.8.5Software Downloads 页面。
  2. 确保将 Version 下拉列表的值设置为 7.8.5,并且选择了 Releases 选项卡。
  3. AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download

    下载 amq-broker-operator-7.8.5-ocp-install-examples.zip 压缩存档会自动开始。

  4. 下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为 ~/broker/operator 的目录。

    mkdir ~/broker/operator
    mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
  5. 在您选择的安装目录中,提取存档的内容。例如:

    cd ~/broker/operator
    unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
  6. 切换到您提取的 Operator 存档的目录。例如:

    cd amq-broker-operator-7.8.5-ocp-install-examples
  7. 以集群管理员身份登录 OpenShift Container Platform。例如:

    $ oc login -u system:admin
  8. 在 OperatorHub 中安装 Operator。

    $ oc create -f deploy/catalog_resources/activemq-artemis-operatorsource.yaml

    几分钟后,OpenShift Container Platform Web 控制台的 OperatorHub 部分提供了 AMQ Broker 7.8 的 Operator。Operator 的名称是 Red Hat Integration - AMQ Broker

3.3.3. 从 OperatorHub 部署 Operator

此流程演示了如何使用 OperatorHub 将用于 AMQ Broker 的 Operator 的最新版本部署到指定的 OpenShift 项目。

重要

使用 OperatorHub 部署 Operator 需要集群管理员特权。

先决条件

步骤

  1. 以集群管理员身份登录 OpenShift Container Platform Web 控制台。
  2. 在左侧导航菜单中点 OperatorsOperatorHub
  3. OperatorHub 页面顶部的 Project 下拉菜单中,选择您要在其中部署 Operator 的项目。
  4. OperatorHub 页面中,使用 Filter by keyword…​ 找到 Red Hat Integration - AMQ Broker Operator。

    注意

    在 OperatorHub 中,您可能会在其名称中找到多个 Operator 超过 AMQ Broker。确保您点击 Red Hat Integration - AMQ Broker Operator。点此 Operator 时,查看打开的信息窗格。对于 AMQ Broker 7.8,这个 Operator 的最新次要版本标签为 7.8.5-opr-2

    提供 RHEL 8 镜像的 RHEL 8 镜像的 Operator 被命名为 Red Hat Integration - AMQ Broker,并带有版本 7.8.5-opr-2

    要确定要选择哪个 Operator,请查看 Red Hat Enterprise Linux Container Compatibility Matrix

  5. Red Hat Integration - AMQ Broker Operator。在出现的对话框中,单击 Install
  6. Install Operator 页面中:

    1. Update Channel 下,通过选择以下单选按钮之一来指定用于跟踪和接收 Operator 的频道:

      • 7.x - 当有可用时,此频道将更新至 7.9
      • 7.8.x - 这是 Long Term Support(LTS)频道。
    2. Installation Mode 下,确保选择 具有特定命名空间 的单选按钮。
    3. Installed Namespace 下拉菜单中选择您要安装 Operator 的项目。
    4. Approval Strategy 下,确保选中了有权限 Automatic 的单选按钮。这个选项指定 Operator 的更新不需要手动批准安装。
    5. Install

当 Operator 安装完成后,Installed Operators 页将打开。您应该会看到 Red Hat Integration - AMQ Broker Operator 已安装到您指定的项目命名空间中。

其他资源

3.4. 创建基于 Operator 的代理部署

3.4.1. 部署基本代理实例

以下流程演示了如何使用自定义资源(CR)实例来创建基本代理部署。

注意

先决条件

步骤

当您成功安装 Operator 时,Operator 会运行并侦听与 CR 相关的更改。本例演示了如何使用 CR 实例在项目中部署基本代理。

  1. 开始为代理部署配置自定义资源(CR)实例。

    1. 使用 OpenShift 命令行界面:

      1. 以具有部署部署权限的项目中部署 CR 的用户身份登录 OpenShift。

        oc login -u <user> -p <password> --server=<host:port>
      2. 打开名为 broker_activemqartemis_cr.yaml 的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有部署部署 CR 的项目中部署 CR 权限的用户身份登录控制台。
      2. 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 AdministrationCustom Resource Definitions
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemis

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

    对于基本代理部署,配置可能类似以下配置。此配置是 broker_activemqartemis_cr.yaml 示例 CR 文件的默认内容。

    apiVersion: broker.amq.io/v2alpha4
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true

    观察 broker_activemqartemis_cr.yaml 示例 CR 文件中,image 属性被设置为 占位符 的默认值。这个值表示,默认情况下,image 属性没有指定用于部署的代理容器镜像。要了解 Operator 如何确定要使用的适当代理容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”

    注意

    metadata 部分,您只需要包含 namespace 属性,只有在您 使用 OpenShift Container Platform Web 控制台创建 CR 时才指定一个值。您指定的值是代理部署的 OpenShift 项目的名称。

    注意

    broker_activemqartemis_cr.yaml 示例 CR 使用了 ex-ao 的命名约定。这个命名规则表示 CR 是 AMQ Broker Operator 的示例 资源。AMQ Broker 基于 ActiveMQ Artemis 项目。部署此示例 CR 时,生成的 StatefulSet 使用名称 ex-aao-ss。另外,部署中的代理 Pod 可直接基于 StatefulSet 名称,如 ex-ao-ss-0ex-aao-ss-1 等等。CR 中的应用程序名称出现在部署中,作为 StatefulSet 上的标签。您可以在 Pod 选择器中使用该标签,例如:

  2. size 属性指定要部署的代理数量。值 2 或更高指定集群代理部署。但是,要部署单个代理实例,请确保将值设置为 1
  3. 部署 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到您要在其中创建代理部署的项目。

        $ oc project <project_name>
      3. 创建 CR 实例。

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create
  4. 在 OpenShift Container Platform web 控制台中,点击 WorkloadsStatefulSets (OpenShift Container Platform 4.5 或更高版本)或 ApplicationsStatefulSets (OpenShift Container Platform 3.11)。您会看到一个名为 ex-aao-ss 的新 StatefulSet。

    1. ex-aao-ss StatefulSet。您会看到一个 Pod,对应于您在 CR 中定义的单个代理。
    2. 在 StatefulSet 中,点 Pods 选项卡。点 ex-aao-ss Pod。在正在运行的 Pod 的 Events 选项卡中,您会看到代理容器已启动。Logs 选项卡显示代理本身正在运行。
  5. 要测试代理是否正常运行,请访问代理 Pod 上的 shell 来发送一些测试信息。

    1. 使用 OpenShift Container Platform Web 控制台:

      1. WorkloadsPods (OpenShift Container Platform 4.5 或更高版本)或 ApplicationsPod (OpenShift Container Platform 3.11)。
      2. ex-aao-ss Pod。
      3. 点击 Terminal 选项卡。
    2. 使用 OpenShift 命令行界面:

      1. 获取项目的 Pod 名称和内部 IP 地址。

        $ oc get pods -o wide
        
        NAME                          STATUS   IP
        amq-broker-operator-54d996c   Running  10.129.2.14
        ex-aao-ss-0                   Running  10.129.2.15
      2. 访问 broker Pod 的 shell。

        $ oc rsh ex-aao-ss-0
  6. 从 shell,使用 artemis 命令来发送一些测试消息。在 URL 中指定代理 Pod 的内部 IP 地址。例如:

    sh-4.2$ ./amq-broker/bin/artemis producer --url tcp://10.129.2.15:61616 --destination queue://demoQueue

    以上命令会在代理上自动创建一个名为 demoQueue 的队列,并将默认数量的 1000 消息发送到队列。

    您应该看到类似如下的输出:

    Connection brokerURL = tcp://10.129.2.15:61616
    Producer ActiveMQQueue[demoQueue], thread=0 Started to calculate elapsed time ...
    
    Producer ActiveMQQueue[demoQueue], thread=0 Produced: 1000 messages
    Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in second : 3 s
    Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in milli second : 3492 milli seconds

其他资源

3.4.2. 部署集群代理

如果您的项目中运行的两个或多个代理 Pod,Pod 会自动形成代理集群。集群配置可让代理根据需要连接到其他和重新分发消息,以进行负载平衡。

以下流程演示了如何部署集群代理。默认情况下,此部署中的代理 在需求 负载均衡时使用,这意味着代理仅将消息转发到具有匹配使用者的其他代理。

先决条件

步骤

  1. 打开用于基本代理部署的 CR 文件。
  2. 对于集群部署,请确保 deploymentPlan.size 的值为 2 或更高。例如:

    apiVersion: broker.amq.io/v2alpha4
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.8.5
        deploymentPlan:
            size: 4
            image: placeholder
            ...
    注意

    metadata 部分,您只需要包含 namespace 属性,只有在您 使用 OpenShift Container Platform Web 控制台创建 CR 时才指定一个值。您指定的值是代理部署的 OpenShift 项目的名称。

  3. 保存修改后的 CR 文件。
  4. 以具有部署之前创建基本代理部署的项目中部署 CR 权限的用户身份登录 OpenShift。

    $ oc login -u <user> -p <password> --server=<host:port>
  5. 切换到您之前在其中创建基本代理部署的项目。

    $ oc project <project_name>
  6. 在命令行中应用更改:

    $ oc apply -f <path/to/custom_resource_instance>.yaml

    在 OpenShift Container Platform Web 控制台中,其他代理 Pod 会根据 CR 中指定的数量在项目中启动。默认情况下,在项目中运行的代理是集群。

  7. 打开每个 Pod 的 Logs 选项卡。日志显示 OpenShift 在每个代理上建立了集群连接桥接。具体来说,日志输出包括如下行:

    targetConnector=ServerLocatorImpl (identity=(Cluster-connection-bridge::ClusterConnectionBridge@6f13fb88

3.4.3. 将自定义资源更改应用到正在运行的代理部署

以下是一些有关将自定义资源(CR)更改应用到正在运行的代理部署的重要事项:

  • 您无法动态更新 CR 中的 persistenceEnabled 属性。要更改此属性,将集群缩减到零代理。删除现有的 CR。然后,使用您的更改重新创建并重新部署 CR,同时指定部署大小。
  • CR 中的 deploymentPlan.size 属性的值会覆盖您使用 oc scale 命令对代理部署的大小所做的任何更改。例如,假设您使用 oc scale 将部署的大小从三个代理更改为两个,但 CR 中的 deploymentPlan.size 的值仍然是 3。在这种情况下,OpenShift 最初将部署缩减到两个代理。但是,当扩展操作完成后,Operator 会将部署恢复到三个代理,如 CR 中指定的。
  • 第 3.2.2 节 “使用 CLI 部署 Operator” 所述,如果您使用持久性存储创建代理部署(即,在 CR 中设置 persistenceEnabled=true )时,您可能需要为 AMQ Broker Operator 置备持久性卷(PV)来为代理 Pod 声明。如果缩减代理部署的大小,Operator 会发布之前为现在关闭的代理 Pod 声明的 PV。但是,如果您通过删除 CR 删除代理部署,AMQ Broker Operator 不会为 部署中的代理 Pod 发布 PVC。另外,这些未发布的 PV 可供任何新部署使用。在这种情况下,您需要手动释放卷。如需更多信息,请参阅 OpenShift 文档中的 发布持久卷
  • 在 AMQ Broker 7.8 中,如果要配置以下项目,您必须在第一次部署 CR 前将 适当的配置添加到主 CR 实例中。

  • 在活跃的扩展事件中,您应用的任何其他更改都由 Operator 排队,且仅在扩展完成时执行。例如,假设您将部署的大小从四个代理缩减到一。然后,在进行缩减时,您也可以更改代理管理员用户名和密码的值。在这种情况下,Operator 会排队用户名和密码,直到部署使用一个活跃代理运行为止。
  • 所有 CR 发生变化 - 除了更改部署的大小外,或者更改接收器、连接器或控制台的 expose 属性的值外,都会导致现有代理重启。如果您的部署中有多个代理,则一次只重启一个代理。

第 4 章 配置基于 Operator 的代理部署

4.1. Operator 如何生成代理配置

在使用自定义资源(CR)实例配置代理部署前,您应该了解 Operator 如何生成代理配置。

当您创建基于 Operator 的代理部署时,每个代理的 Pod 在 OpenShift 项目中在 StatefulSet 中运行。代理的应用程序容器在每个 Pod 中运行。

Operator 在初始化每个 Pod 时 运行一组 称为初始容器的容器。在 OpenShift Container Platform 中,Init 容器是在应用程序容器之前运行的专用容器。init 容器可以包含应用程序镜像中不存在的工具或设置脚本。

默认情况下,AMQ Broker Operator 使用内置的 Init 容器。Init 容器使用用于部署的主 CR 实例来生成每个代理应用程序容器使用的配置。

如果您在 CR 中指定了地址设置,Operator 会生成默认配置,然后将该配置与 CR 中指定的配置合并或替换。后续部分对此过程进行了描述。

4.1.1. Operator 如何生成地址设置配置

如果您在部署的主自定义资源(CR)实例中包含地址设置配置,Operator 会为每个代理生成地址设置配置,如下所述。

  1. Operator 在代理应用程序容器前运行初始容器。Init 容器 生成默认 的地址设置配置。默认地址设置配置如下所示。

    <address-settings>
        <!--
        if you define auto-create on certain queues, management has to be auto-create
        -->
        <address-setting match="activemq.management#">
            <dead-letter-address>DLQ</dead-letter-address>
            <expiry-address>ExpiryQueue</expiry-address>
            <redelivery-delay>0</redelivery-delay>
            <!--
            with -1 only the global-max-size is in use for limiting
            -->
            <max-size-bytes>-1</max-size-bytes>
            <message-counter-history-day-limit>10</message-counter-history-day-limit>
            <address-full-policy>PAGE</address-full-policy>
            <auto-create-queues>true</auto-create-queues>
            <auto-create-addresses>true</auto-create-addresses>
            <auto-create-jms-queues>true</auto-create-jms-queues>
            <auto-create-jms-topics>true</auto-create-jms-topics>
        </address-setting>
    
        <!-- default for catch all -->
        <address-setting match="#">
            <dead-letter-address>DLQ</dead-letter-address>
            <expiry-address>ExpiryQueue</expiry-address>
            <redelivery-delay>0</redelivery-delay>
            <!--
            with -1 only the global-max-size is in use for limiting
            -->
            <max-size-bytes>-1</max-size-bytes>
            <message-counter-history-day-limit>10</message-counter-history-day-limit>
            <address-full-policy>PAGE</address-full-policy>
            <auto-create-queues>true</auto-create-queues>
            <auto-create-addresses>true</auto-create-addresses>
            <auto-create-jms-queues>true</auto-create-jms-queues>
            <auto-create-jms-topics>true</auto-create-jms-topics>
        </address-setting>
    <address-settings>
  2. 如果您在自定义资源(CR)实例中也指定了地址设置配置,则配置的初始容器进程并将其转换为 XML。
  3. 根据 CR 中 applyRule 属性的值,Init 容器 合并,或将上面显示的默认地址设置配置替换为您在 CR 中指定的配置。这个合并或替换的结果是代理将使用的最终地址设置配置。
  4. 当初始容器生成代理配置(包括地址设置)后,代理应用程序容器将启动。启动时,代理容器从之前由 Init 容器使用的安装目录中复制其配置。您可以检查 broker.xml 配置文件中的地址设置配置。对于正在运行的代理,这个文件位于 /home/jboss/amq-broker/etc 目录中。

其他资源

4.1.2. 代理 Pod 的目录结构

当您创建基于 Operator 的代理部署时,每个代理的 Pod 在 OpenShift 项目中在 StatefulSet 中运行。代理的应用程序容器在每个 Pod 中运行。

Operator 在初始化每个 Pod 时 运行一组 称为初始容器的容器。在 OpenShift Container Platform 中,Init 容器是在应用程序容器之前运行的专用容器。init 容器可以包含应用程序镜像中不存在的工具或设置脚本。

为代理实例生成配置时,Init 容器将使用默认安装目录中所含的文件。此安装目录位于 Operator 挂载到代理 Pod 以及 Init Container 和 broker 容器共享的卷中。Init 容器用于挂载共享卷的路径在名为 CONFIG_INSTANCE_DIR 的环境变量中定义。CONFIG_INSTANCE_DIR 的默认值为 /amq/init/config。在文档中,此目录被称为 <install_dir>

注意

您无法更改 CONFIG_INSTANCE_DIR 环境变量的值。

默认情况下,安装目录有以下子目录:

子目录内容

<install_dir>/bin

运行代理所需的二进制文件和脚本。

<install_dir>/etc

配置文件。

<install_dir>/data

代理日志。

<install_dir>/lib

运行代理所需的 JAR 和库。

<install_dir>/log

代理日志文件。

<install_dir>/tmp

临时 Web 应用文件.

当 Init 容器生成代理配置后,代理应用程序容器会启动。启动时,代理容器从之前由 Init 容器使用的安装目录中复制其配置。当代理 Pod 初始化并运行时,代理配置位于代理的 /home/jboss/amq-broker 目录中。

其他资源

4.2. 为基于 Operator 的代理部署配置地址和队列

对于基于 Operator 的代理部署,您可以使用两个独立的自定义资源(CR)实例来配置地址和队列及其关联的设置。

  • 要在代理上创建地址和队列,您需要基于地址自定义资源定义(CRD)部署 CR 实例。

    • 如果您使用 OpenShift 命令行界面(CLI)安装 Operator,地址 CRD 是 proxy _activemqartisaddress_crd.yaml 文件,该文件包含在您下载并提取的 Operator 安装存档中的 deploy/crds
    • 如果使用 OperatorHub 安装 Operator,地址 CRD 是 OpenShift Container Platform Web 控制台中的 AdministrationCustom Resource Definitions 下的 ActiveMQAretmisAddress CRD。
  • 要配置与特定地址匹配的地址和队列设置,您可以在用于创建代理部署的主自定义资源(CR)实例中包含配置。

    • 如果您使用 OpenShift CLI 安装 Operator,主代理 CRD 是 proxy _activemqartemis_crd.yaml 文件,该文件包含在您下载并提取的 Operator 安装存档的 deploy/crds 中。
    • 如果使用 OperatorHub 安装 Operator,则主代理 CRD 是 OpenShift Container Platform Web 控制台中的 AdministrationCustom Resource Definitions 下列出的 ActiveMQAretmis CRD。
    注意

    要为基于 Operator 的部署配置地址设置,您必须 至少为 AMQ Broker 7.7 使用最新版本的 Operator(即 0.17 版)。要了解如何将 Operator 升级到 AMQ Broker 7.8 的最新版本,请参阅 第 6 章 升级基于 Operator 的代理部署

    通常,您可以为 OpenShift Container Platform 中部署的代理部署的地址和队列设置 完全相当于 Linux 或 Windows 上的独立代理部署。但是,您应该了解 配置这些设置的方式。这些区别在以下子部分进行了描述。

4.2.1. OpenShift 和独立代理部署间的地址和队列设置的不同

  • 要在 OpenShift Container Platform 上配置代理部署的地址和队列设置,您需要把配置添加到代理部署的主自定义资源(CR)实例的 addressSettings 部分中。这与 Linux 或 Windows 上的独立部署不同,您要将配置添加到 broker.xml 配置文件中的 address-settings 元素。
  • 用于配置项名称的格式因 OpenShift Container Platform 和独立代理部署而异。对于 OpenShift Container Platform 部署,配置项名称是 camel case,如 defaultQueueRoutingType。相反,独立部署的配置项目名称为小写,并使用连字符(-)分隔符,例如: default-queue-routing-type

    下表显示了这个命名差异的一些更多示例。

    独立代理部署的配置项OpenShift 代理部署的配置项

    address-full-policy

    addressFullPolicy

    auto-create-queues

    autoCreateQueues

    default-queue-routing-type

    defaultQueueRoutingType

    last-value-queue

    lastValueQueue

其他资源

4.2.2. 为基于 Operator 的代理部署创建地址和队列

以下流程演示了如何使用自定义资源(CR)实例将地址和相关队列添加到基于 Operator 的代理部署中。

注意

要在代理部署中创建多个地址和/或队列,您需要创建单独的 CR 文件并单独部署它们,为每个情况指定新地址和/或队列名称。另外,每个 CR 实例的 name 属性必须是唯一的。

先决条件

步骤

  1. 开始配置自定义资源(CR)实例,为代理部署定义地址和队列。

    1. 使用 OpenShift 命令行界面:

      1. 以具有部署代理部署的项目中部署 CR 权限的用户身份登录 OpenShift。

        oc login -u <user> -p <password> --server=<host:port>
      2. 打开名为 broker_activemqartemisaddress_cr.yaml 的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有部署代理部署 CR 权限的用户身份登录控制台。
      2. 根据地址 CRD 启动新的 CR 实例。在左侧窗格中,单击 AdministrationCustom Resource Definitions
      3. 单击 ActiveMQArtemisAddresss CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemisAddress

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

  2. 在 CR 的 spec 部分中,添加行来定义地址、队列和路由类型。例如:

    apiVersion: broker.amq.io/v2alpha2
    kind: ActiveMQArtemisAddress
    metadata:
        name: myAddressDeployment0
        namespace: myProject
    spec:
        ...
        addressName: myAddress0
        queueName: myQueue0
        routingType: anycast
        ...

    上述配置定义了名为 myAddress0 的地址,其队列名为 myQueue0,以及任何 广播 路由类型。

    注意

    metadata 部分,您只需要包含 namespace 属性,只有在您 使用 OpenShift Container Platform Web 控制台创建 CR 时才指定一个值。您指定的值是代理部署的 OpenShift 项目的名称。

  3. 部署 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到代理部署的项目。

        $ oc project <project_name>
      3. 创建 CR 实例。

        $ oc create -f <path/to/address_custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create
  4. (可选)要删除之前使用 CR 实例添加到部署中的地址和队列,请使用以下命令:

    $ oc delete -f <path/to/address_custom_resource_instance>.yaml

4.2.3. 在基于 Operator 的代理部署中配置的地址设置匹配

如果向客户端发送消息失败,您可能不希望代理持续尝试传送消息。要防止交付无限尝试,您可以定义 死信地址 和关联的 死信队列。在指定数量的交付尝试后,代理会从原始队列中删除未发送的消息,并将消息发送到配置的死信地址。系统管理员以后可以使用无死信队列中的未发送消息来检查消息。

以下示例演示了如何为基于 Operator 的代理部署配置死信地址和队列。这个示例演示了如何:

  • 使用主代理自定义资源(CR)实例的 addressSetting 部分来配置地址设置。
  • 将这些地址设置与代理部署中的地址匹配。

先决条件

步骤

  1. 开始配置 CR 实例,添加一个死信地址和队列,以接收部署中的每个代理的未发送消息。

    1. 使用 OpenShift 命令行界面:

      1. 以具有部署代理部署的项目中部署 CR 权限的用户身份登录 OpenShift。

        oc login -u <user> -p <password> --server=<host:port>
      2. 打开名为 broker_activemqartemisaddress_cr.yaml 的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有部署代理部署 CR 权限的用户身份登录控制台。
      2. 根据地址 CRD 启动新的 CR 实例。在左侧窗格中,单击 AdministrationCustom Resource Definitions
      3. 单击 ActiveMQArtemisAddresss CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemisAddress

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

  2. 在 CR 的 spec 部分,添加行来指定死信地址和队列以接收未发送的消息。例如:

    apiVersion: broker.amq.io/v2alpha2
    kind: ActiveMQArtemisAddress
    metadata:
        name: ex-aaoaddress
    spec:
        ...
        addressName: myDeadLetterAddress
        queueName: myDeadLetterQueue
        routingType: anycast
        ...

    上述配置定义了名为 myDeadLetterAddress 的死信地址,它具有名为 myDeadLetterQueue 和任何广播路由类型的死信队列。

    注意

    metadata 部分,您只需要包含 namespace 属性,只有在您 使用 OpenShift Container Platform Web 控制台创建 CR 时才指定一个值。您指定的值是代理部署的 OpenShift 项目的名称。

  3. 部署地址 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到代理部署的项目。

        $ oc project <project_name>
      3. 创建地址 CR。

        $ oc create -f <path/to/address_custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create
  4. 开始为代理部署配置自定义资源(CR)实例。

    1. 通过示例 CR 文件:

      1. 打开名为 broker_activemqartemis_cr.yaml 的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 AdministrationCustom Resource Definitions
      2. 单击 ActiveMQArtemis CRD。
      3. 实例 选项卡。
      4. 单击 Create ActiveMQArtemis

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

    对于基本代理部署,配置可能类似以下配置。此配置是 broker_activemqartemis_cr.yaml 示例 CR 文件的默认内容。

    apiVersion: broker.amq.io/v2alpha4
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true

    观察 broker_activemqartemis_cr.yaml 示例 CR 文件中,image 属性被设置为 占位符 的默认值。这个值表示,默认情况下,image 属性没有指定用于部署的代理容器镜像。要了解 Operator 如何确定要使用的适当代理容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”

    注意

    metadata 部分,您只需要包含 namespace 属性,只有在您 使用 OpenShift Container Platform Web 控制台创建 CR 时才指定一个值。您指定的值是代理部署的 OpenShift 项目的名称。

  5. 在 CR 的 deploymentPlan 部分中,添加一个包含单个 addressSetting 部分的新 addressSettings 部分,如下所示。

    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
  6. match 属性的单个实例添加到 addressSetting 块。指定地址匹配表达式。例如:

    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
                 -  match: myAddress
    匹配
    指定代理应用以下配置的地址 或一组 地址。在本例中,match 属性的值与名为 myAddress 的单个地址对应。
  7. 添加与未发送消息相关的属性并指定值。例如:

    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
                 -  match: myAddress
                    deadLetterAddress: myDeadLetterAddress
                    maxDeliveryAttempts: 5
    deadLetterAddress
    代理发送未发送的消息的地址。
    maxDeliveryAttempts

    代理在将消息移动到配置的死信地址前进行的最大交付尝试次数。

    在前面的示例中,如果代理使 5 次失败尝试向以 myAddress 开头的地址发送消息,代理会将消息移到指定的死信地址 myDeadLetterAddress

  8. (可选)应用类似的配置到另一个地址或一组地址。例如:

    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                addressSetting:
                 -  match: myAddress
                    deadLetterAddress: myDeadLetterAddress
                    maxDeliveryAttempts: 5
                 -  match: 'myOtherAddresses*'
                    deadLetterAddress: myDeadLetterAddress
                    maxDeliveryAttempts: 3

    在本例中,第二个 match 属性的值包含星号通配符。通配符表示上述配置应用到以字符串 myOtherAddresses 开头的任何地址。

    注意

    如果您使用通配符表达式作为 match 属性的值,您必须将该值包括在单引号中,如 'myOtherAddresses*'

  9. addressSettings 部分的开头,添加 applyRule 属性并指定值。例如:

    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            addressSettings:
                applyRule: merge_all
                addressSetting:
                 -  match: myAddress
                    deadLetterAddress: myDeadLetterAddress
                    maxDeliveryAttempts: 5
                 -  match: 'myOtherAddresses*'
                    deadLetterAddress: myDeadLetterAddress
                    maxDeliveryAttempts: 3

    applyRule 属性指定 Operator 如何应用您为每个匹配地址或一组地址添加到 CR 中的配置。您可以指定的值有:

    merge_all
    • 对于 CR 中指定的地址设置,以及 与同一地址集合匹配的默认配置:

      • 将默认配置中指定的任何属性值替换为 CR 中指定的任何属性值。
      • 保留在 CR 默认配置中唯一标识的任何属性值。在最后的合并配置中包含以上每个内容。
    • 对于在 CR 中指定的地址设置,或者 唯一与特定地址集合匹配的默认配置,请在最终合并的配置中包含它们。
    merge_replace
    • 对于 CR 中指定的地址设置 与同一地址集合匹配的默认配置,请在最终合并的配置中包含 CR 中指定的设置。不要 包含默认配置中指定的任何属性,即使这些属性没有在 CR 中指定。
    • 对于在 CR 中指定的地址设置,或者 唯一与特定地址集合匹配的默认配置,请在最终合并的配置中包含它们。
    replace_all
    将默认配置 中指定的所有 地址设置替换为 CR 中指定的所有地址设置。最终,合并的配置与 CR 中指定的相一致。
    注意

    如果没有在 CR 中明确包含 applyRule 属性,Operator 将使用默认值 merge_all

  10. 部署 broker CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 创建 CR 实例。

        $ oc create -f <path/to/broker_custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create

其他资源

  • 要了解 OpenShift Container Platform 代理部署的地址、队列和地址设置的所有配置选项,请参阅 第 11.1 节 “自定义资源配置参考”
  • 如果使用 OpenShift 命令行界面(CLI)安装 AMQ Broker Operator,则您下载并提取的安装存档包含一些配置地址设置示例。在安装存档的 deploy/examples 文件夹中,请参考:

    • artemis-basic-address-settings-deployment.yaml
    • artemis-merge-replace-address-settings-deployment.yaml
    • artemis-replace-address-settings-deployment.yaml
  • 有关为 独立 代理部署配置地址、队列和相关地址设置的更多信息,请参阅 配置 AMQ Broker 中的地址 、队列和主题。您可以使用这些信息为 OpenShift Container Platform 上的代理部署创建等同配置。
  • 如需有关 OpenShift Container Platform 中初始容器的更多信息,请参阅:

4.3. 配置代理存储要求

要在基于 Operator 的代理部署中使用持久性存储,您可以在用于创建部署的自定义资源(CR)实例中将 persistenceEnabled 设为 true。如果您的 OpenShift 集群中没有容器原生虚拟化,则需要手动置备持久性卷(PV),并确保 Operator 使用持久性卷声明(PVC)声明它们。如果您想创建带有持久性存储的两个代理集群,例如,需要有两个 PV 可用。默认情况下,部署中的每个代理都需要存储 2 GiB。但是,您可以为代理部署配置 CR,以指定每个代理所需的 PVC 大小。

重要
  • 要在基于 Operator 的部署中配置代理所需的 PVC 大小,您必须 至少为 AMQ Broker 7.7 使用最新版本的 Operator(即 0.17 版本)。要了解如何将 Operator 升级到 AMQ Broker 7.8 的最新版本,请参阅 第 6 章 升级基于 Operator 的代理部署
  • 在首次部署 CR ,您必须将代理存储大小的配置添加到代理部署的主 CR 中。您不能将 配置添加到已在运行的代理部署中。

4.3.1. 配置代理存储大小

以下流程演示了如何为代理部署配置自定义资源(CR)实例,以指定每个代理对持久性存储所需的持久性卷声明(PVC)的大小。

重要

在首次部署 CR ,您必须将代理存储大小的配置添加到代理部署的主 CR 中。您不能将 配置添加到已在运行的代理部署中。

先决条件

  • 您必须至少对 AMQ Broker 7.7 使用最新版本的 Operator(即 0.17 版本)。要了解如何将 Operator 升级到 AMQ Broker 7.8 的最新版本,请参阅 第 6 章 升级基于 Operator 的代理部署
  • 您应该熟悉如何使用 CR 实例创建基本代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”
  • 您必须已经置备了持久性卷(PV),并使其可以被 Operator 声明。例如:如果要创建带有持久性存储的两个代理集群,则需要有两个 PV 可用。

    有关置备持久性存储的更多信息,请参阅:

步骤

  1. 开始为代理部署配置自定义资源(CR)实例。

    1. 使用 OpenShift 命令行界面:

      1. 以具有部署部署权限的项目中部署 CR 的用户身份登录 OpenShift。

        oc login -u <user> -p <password> --server=<host:port>
      2. 打开名为 broker_activemqartemis_cr.yaml 的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有部署部署 CR 的项目中部署 CR 权限的用户身份登录控制台。
      2. 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 AdministrationCustom Resource Definitions
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemis

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

    对于基本代理部署,配置可能类似以下配置。此配置是 broker_activemqartemis_cr.yaml 示例 CR 文件的默认内容。

    apiVersion: broker.amq.io/v2alpha4
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true

    观察 broker_activemqartemis_cr.yaml 示例 CR 文件中,image 属性被设置为 占位符 的默认值。这个值表示,默认情况下,image 属性没有指定用于部署的代理容器镜像。要了解 Operator 如何确定要使用的适当代理容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”

    注意

    metadata 部分,您只需要包含 namespace 属性,只有在您 使用 OpenShift Container Platform Web 控制台创建 CR 时才指定一个值。您指定的值是代理部署的 OpenShift 项目的名称。

  2. 要指定代理存储要求,在 CR 的 deploymentPlan 部分添加 storage 部分。添加 size 属性并指定值。例如:

    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            storage:
                size: 4Gi
    storage.size
    每个代理 Pod 所需的持久性卷声明(PVC)大小(以字节为单位)大小(以字节为单位)。只有在将 persistenceEnabled 设置为 true 时,才会应用此属性。您指定的值 必须包含一个 单元。支持字节表示法(例如:K、M、G)或二进制等同数(Ki, Mi, Gi)。
  3. 部署 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到您要在其中创建代理部署的项目。

        $ oc project <project_name>
      3. 创建 CR 实例。

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create

4.4. 为基于 Operator 的代理部署配置资源限值和请求

当您创建基于 Operator 的代理部署时,部署中的代理 Pod 在 OpenShift 集群的节点上在 StatefulSet 中运行。您可以为部署配置自定义资源(CR)实例,以指定每个 Pod 中运行的代理容器使用的 host-node 计算资源。通过指定 CPU 和内存(RAM)的限值和请求值,您可以确保代理 Pod 的性能满意。

重要
  • 要在基于 Operator 的部署中为代理配置资源限值和请求,必须至少 将 Operator 的最新版本用于 AMQ Broker 7.7(即 0.17 版本)。要了解如何将 Operator 升级到 AMQ Broker 7.8 的最新版本,请参阅 第 6 章 升级基于 Operator 的代理部署
  • 在首次部署 CR ,您必须为代理部署的 CR 实例添加限制和请求的配置。您不能将 配置添加到已在运行的代理部署中。
  • 红帽无法推荐限制和请求的值,因为它们基于您的特定消息传递系统用例和您所实施的结果构架。但是 建议您在开发环境中测试并调整这些值,然后再为生产环境进行配置。
  • 在初始化每个代理 Pod 时,Operator 运行一组称为初始容器的容器。您为每个代理容器配置的任何资源限值和请求都适用于每个初始容器。有关在代理部署中使用初始容器的更多信息,请参阅 第 4.1 节 “Operator 如何生成代理配置”

您可以指定以下限制和请求值:

CPU 限制
对于在 Pod 中运行的每个代理容器,这个值是容器可以消耗的最大主机 CPU 数量。如果代理容器尝试超过指定的 CPU 限制,OpenShift 会节流容器。这样可确保容器具有一致的性能,无论节点上运行的 Pod 数量是什么。
内存限制
对于在 Pod 中运行的每个代理容器,这个值是容器可以消耗的最大主机内存量。如果代理容器尝试超过指定的内存限制,OpenShift 会终止该容器。代理 Pod 重启。
CPU 请求

对于在 Pod 中运行的每个代理容器,这个值是容器请求的主机 CPU 数量。OpenShift 调度程序在 Pod 放置过程中考虑 CPU 请求值,将代理 Pod 绑定到具有足够计算资源的节点。

CPU 请求值是代理容器运行 所需的最小 CPU 量。但是,如果节点上没有 CPU 竞争,容器可以使用所有可用的 CPU。如果您指定了一个 CPU 限制,则容器不能超过该 CPU 用量。如果节点上存在 CPU 争用,则 CPU 请求值可提供一个方式 OpenShift 来衡量所有容器上的 CPU 使用量。

内存请求

对于在 Pod 中运行的每个代理容器,这个值是容器请求的主机内存量。OpenShift 调度程序在 Pod 放置过程中考虑内存请求值,将代理 Pod 绑定到具有足够计算资源的节点。

内存请求值是代理容器运行所需的 最小内存量。但是,容器可以尽可能消耗可用内存。如果您指定了内存限制,则代理容器不能超过内存用量。

CPU 以名为 millicores 的单位来衡量。OpenShift 集群中的每一节点检查操作系统,以确定节点上的 CPU 内核数。然后,节点将该值乘以 1000 以表示总容量。例如,如果某个节点有两个内核,则节点的 CPU 容量以 2000m 表示。因此,如果要使用单个内核的一次性,请指定 100m 值。

内存以字节为单位。您可以使用字节表示法(E、P、T、G、M、K)或二进制等同指定值(i, Pi, Ti, Gi, Mi, Ki)。您指定的值必须包含一个单元。

4.4.1. 配置代理资源限制和请求

以下示例演示了如何为代理部署配置主自定义资源(CR)实例,为部署中运行的 Pod 中每个代理容器设置 CPU 和内存的限值和请求。

重要
  • 在首次部署 CR ,您必须为代理部署的 CR 实例添加限制和请求的配置。您不能将 配置添加到已在运行的代理部署中。
  • 红帽无法推荐限制和请求的值,因为它们基于您的特定消息传递系统用例和您所实施的结果构架。但是 建议您在开发环境中测试并调整这些值,然后再为生产环境进行配置。

先决条件

步骤

  1. 开始为代理部署配置自定义资源(CR)实例。

    1. 使用 OpenShift 命令行界面:

      1. 以具有部署部署权限的项目中部署 CR 的用户身份登录 OpenShift。

        oc login -u <user> -p <password> --server=<host:port>
      2. 打开名为 broker_activemqartemis_cr.yaml 的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有部署部署 CR 的项目中部署 CR 权限的用户身份登录控制台。
      2. 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 AdministrationCustom Resource Definitions
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemis

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

    对于基本代理部署,配置可能类似以下配置。此配置是 broker_activemqartemis_cr.yaml 示例 CR 文件的默认内容。

    apiVersion: broker.amq.io/v2alpha4
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true

    观察 broker_activemqartemis_cr.yaml 示例 CR 文件中,image 属性被设置为 占位符 的默认值。这个值表示,默认情况下,image 属性没有指定用于部署的代理容器镜像。要了解 Operator 如何确定要使用的适当代理容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”

    注意

    metadata 部分,您只需要包含 namespace 属性,只有在您 使用 OpenShift Container Platform Web 控制台创建 CR 时才指定一个值。您指定的值是代理部署的 OpenShift 项目的名称。

  2. 在 CR 的 deploymentPlan 部分中,添加 resources 部分。添加 限制和请求 子部分。在每个子部分中,添加 cpumemory 属性并指定值。例如:

    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
            resources:
                limits:
                    cpu: "500m"
                    memory: "1024M"
                requests:
                    cpu: "250m"
                    memory: "512M"
    limits.cpu
    在部署中的 Pod 中运行的每个代理容器都不能超过这个主机节点 CPU 的使用情况。
    limits.memory
    在部署中的 Pod 中运行的每个代理容器都不能超过这个数量的主机内存用量。
    requests.cpu
    在部署中的 Pod 中运行的每个代理容器都请求这个数量的主机 CPU。这个值是代理容器运行 所需的最小 CPU 量。
    requests.memory
    部署中运行的 Pod 中的每个代理容器都请求这个数量的主机内存。这个值是代理容器运行所需的 最小内存量
  3. 部署 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到您要在其中创建代理部署的项目。

        $ oc project <project_name>
      3. 创建 CR 实例。

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create

4.5. 指定自定义初始容器镜像

第 4.1 节 “Operator 如何生成代理配置” 所述,AMQ Broker Operator 使用默认、内置初始容器来生成代理配置。要生成配置,Init 容器将主自定义资源(CR)实例用于您的部署。您可以在 CR 中指定的 唯一 项目是在主代理自定义资源定义(CRD)中公开的项目。

但是,在有些情况下您可能需要包含 CRD 中未 公开的配置。在本例中,在主 CR 实例中,您可以指定 自定义 Init 容器。自定义初始容器可以修改或添加到 Operator 已创建的配置中。例如,您可以使用自定义 Init 容器修改代理日志设置。或者,您可以使用自定义初始容器在代理安装目录中包含额外的运行时依赖项(即 .jar 文件)。

构建自定义初始容器镜像时,您必须遵循以下重要准则:

  • 在为自定义镜像创建的构建脚本(例如,Docker Dockerfile 或 Podman Containerfile)中,FROM 指令必须指定最新版本的 AMQ Broker Operator 内置 Init 容器作为基础镜像。在脚本中包含以下行:

    FROM registry.redhat.io/amq7/amq-broker-init-rhel7:0.2-13
  • 自定义镜像必须将名为 post-config.sh 的脚本包含在名为 /amq/scripts 的目录中。post-config.sh 脚本是您可以修改或添加到 Operator 生成的初始配置。当您指定自定义初始容器时,Operator 在使用 CR 实例生成配置后运行 post-config.sh 脚本,但在启动代理应用程序容器
  • 第 4.1.2 节 “代理 Pod 的目录结构” 所述,Init 容器使用的安装目录的路径是在名为 CONFIG_INSTANCE_DIR 的环境变量中定义。在引用安装目录时,post-config.sh 脚本应使用此环境变量名称(例如 :${CONFIG_INSTANCE_DIR}/lib ),而不是 此变量的实际值(例如 /amq/init/config/lib)。
  • 如果要在自定义代理配置中包含其他资源(如 .xml.jar 文件),您必须确保这些资源包含在自定义镜像中,并可以被 post-config.sh 脚本访问。

以下流程描述了如何指定自定义初始容器镜像。

先决条件

步骤

  1. 开始为代理部署配置自定义资源(CR)实例。

    1. 使用 OpenShift 命令行界面:

      1. 以具有部署部署权限的项目中部署 CR 的用户身份登录 OpenShift。

        oc login -u <user> -p <password> --server=<host:port>
      2. 打开名为 broker_activemqartemis_cr.yaml 的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的 deploy/crs 目录中。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有部署部署 CR 的项目中部署 CR 权限的用户身份登录控制台。
      2. 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 AdministrationCustom Resource Definitions
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 单击 Create ActiveMQArtemis

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

    对于基本代理部署,配置可能类似以下配置。此配置是 broker_activemqartemis_cr.yaml 示例 CR 文件的默认内容。

    apiVersion: broker.amq.io/v2alpha4
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true

    观察 broker_activemqartemis_cr.yaml 示例 CR 文件中,image 属性被设置为 占位符 的默认值。这个值表示,默认情况下,image 属性没有指定用于部署的代理容器镜像。要了解 Operator 如何确定要使用的适当代理容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”

    注意

    metadata 部分,您只需要包含 namespace 属性,只有在您 使用 OpenShift Container Platform Web 控制台创建 CR 时才指定一个值。您指定的值是代理部署的 OpenShift 项目的名称。

  2. 在 CR 的 deploymentPlan 部分中,添加 initImage 属性。

    apiVersion: broker.amq.io/v2alpha4
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            initImage:
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
  3. initImage 属性的值设置为自定义初始容器镜像的 URL。

    apiVersion: broker.amq.io/v2alpha4
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.8.5
        deploymentPlan:
            size: 1
            image: placeholder
            initImage: <custom_init_container_image_url>
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
    initImage
    指定自定义 Init Container 镜像的完整 URL,该镜像必须添加到容器 registry 中的存储库中。
  4. 部署 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到您要在其中创建代理部署的项目。

        $ oc project <project_name>
      3. 创建 CR 实例。

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 配置完 CR 后,点 Create

其他资源

4.6. 为客户端连接配置基于 Operator 的代理部署

4.6.1. 配置接收器

要启用 OpenShift 部署中的代理 Pod 的客户端连接,您可以为部署定义 接收器。接收器定义代理 Pod 接受连接的方式。您可以在用于代理部署的主自定义资源(CR)中定义接收器。当您创建接受者时,您可以指定消息传递协议等信息,以便在接受者上启用,代理 Pod 上的端口用于这些协议。

以下流程演示了如何在 CR 中为代理部署定义新的接受者。

先决条件

步骤

  1. 在您在初始安装过程中下载并提取的 Operator 归档的 deploy/crs 目录中,打开 broker_activemqartis_cr.yaml 自定义资源(CR)文件。
  2. 在接收器元素 ,添加命名的接受者。添加 协议和端口 参数。设置值来指定接受者以及每个代理 Pod 上要公开的端口的消息传递协议。例如:

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp
        port: 5672
    ...

    配置的接受者将端口 5672 公开给 AMQP 客户端。下表中显示了您可以为 protocol 参数指定的完整值。

    协议订阅价值

    核心协议

    core

    AMQP

    amqp

    OpenWire

    OpenWire

    MQTT

    mqtt

    STOMP

    stomp

    所有支持的协议

    all

    注意
    • 对于部署中的每个代理 Pod,Operator 还会创建一个使用端口 61616 的默认接受器。代理集群需要这个默认接受器,并启用了 Core Protocol。
    • 默认情况下,AMQ Broker 管理控制台使用代理 Pod 上的端口 8161。部署中的每个代理 Pod 都有一个专用的服务,可访问控制台。如需更多信息,请参阅 第 5 章 连接到基于 Operator 的代理部署的 AMQ 管理控制台
  3. 要在同一接受者上使用其他协议,请修改 protocol 参数。指定以逗号分隔的协议列表。例如:

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp,openwire
        port: 5672
    ...

    现在,配置的接收器向 AMQP 和 OpenWire 客户端公开端口 5672。

  4. 要指定接受器允许的并发客户端连接数量,请添加 connectionAllowed 参数并设置值。例如:

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp,openwire
        port: 5672
        connectionsAllowed: 5
    ...
  5. 默认情况下,接受者仅公开给与代理部署相同的 OpenShift 集群中的客户端。若要也向 OpenShift 外部的客户端公开接受者,请添加 expose 参数,并将值设为 true

    另外,要启用到 OpenShift 外部客户端的安全连接,请添加 sslEnabled 参数,并将值设为 true

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp,openwire
        port: 5672
        connectionsAllowed: 5
        expose: true
        sslEnabled: true
        ...
    ...

    当您在接收器(或连接器)上启用 SSL(即安全套接字层)安全性时,您可以添加相关配置,例如:

    • 用于在 OpenShift 集群中存储身份验证凭据的机密名称。当您在接受器上启用 SSL 时,需要一个 secret。有关生成此 secret 的更多信息,请参阅 第 4.6.2 节 “保护 broker-client 连接”
    • 用于安全网络通信的传输层安全(TLS)协议。TLS 是 SSL 的更新、更安全的版本。您可以在 enabledProtocols 参数中指定 TLS 协议。
    • 接受者是否在代理和客户端之间使用双向 TLS(也称为 mutual 身份验证 )。您可以通过将 require ClientAuth 参数的值设置为 true 来指定此功能。

其他资源

4.6.2. 保护 broker-client 连接

如果您在接受或连接器(即将 sslEnabled 设置为 true)上启用了安全性,则必须配置传输层安全(TLS)以允许代理和客户端之间的基于证书的身份验证。TLS 是 SSL 的更新、更安全的版本。主要 TLS 配置有两个:

单向 TLS
仅代理提供证书。客户端使用证书来验证代理。这是最常见的配置。
双向 TLS
代理和客户端存在的证书。这有时称为 相互验证

后续部分描述:

对于单向和双向 TLS,您可以通过生成存储代理和客户端之间成功 TLS 握手所需的凭证的 secret 完成配置。这是您必须在安全接受或连接器的 sslSecret 参数中指定的 secret 名称。secret 必须包含 Base64 编码的代理密钥存储(单向和双向 TLS)、Base64 编码的代理信任存储(仅双向 TLS),以及这些文件的对应密码(base64 编码)。单向和双向 TLS 配置流程演示了如何生成此 secret。

注意

如果您没有在安全接收器或连接器的 sslSecret 参数中明确指定 secret 名称,接收器或连接器会假定默认 secret 名称。默认 secret 名称使用格式 <CustomResourceName>-<AcceptorName>-secret<CustomResourceName>-<ConnectorName>-secret。例如,my-broker-deployment-my-acceptor-secret

即使接收器或连接器假定默认 secrete 名称,您仍必须自行生成此 secret。它不会被自动创建。

4.6.2.1. 为主机名验证配置代理证书
注意

本节论述了配置单向或双向 TLS 时必须生成的代理证书的一些要求。

当客户端尝试连接到部署中的代理 Pod 时,客户端连接 URL 中的 verifyHost 选项确定客户端是否将代理证书的通用名称(CN)与其主机名进行比较,以验证它们是否匹配。如果您在客户端连接 URL 中指定 verifyHost=true 或类似,则客户端执行此验证。

如果连接的安全在隔离网络中的 OpenShift 集群上部署,则可能会在罕见的情况下省略此验证。否则,对于安全连接,建议客户端执行此验证。在这种情况下,正确配置代理密钥存储证书是确保成功的客户端连接至关重要。

通常,当客户端使用主机验证时,您在生成代理证书时指定的 CN 必须与客户端连接的代理 Pod 上的 Route 的完整主机名匹配。例如,如果您有一个部署带有单个代理 Pod,则 CN 可能类似如下:

CN=my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain

要确保 CN 可以解析到带有多个代理的部署 中的任何 代理 Pod,您可以指定一个星号(*)通配符字符来代替代理 Pod 的 或dinal。例如:

CN=my-broker-deployment-*-svc-rte-my-openshift-project.my-openshift-domain

上例中显示的 CN 成功解析为 my-broker-deployment 部署中的任何代理 Pod。

另外,在生成代理证书时指定的 Subject Alternative Name(SAN) 必须单独列出 部署中的所有代理 Pod,作为用逗号分开的列表。例如:

"SAN=DNS:my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain,DNS:my-broker-deployment-1-svc-rte-my-openshift-project.my-openshift-domain,..."
4.6.2.2. 配置单向 TLS

本节中的步骤演示了如何配置单向传输层安全(TLS)来保护 broker-client 连接的安全。

在单向 TLS 中,只有代理提供证书。此证书供客户端用来验证代理。

先决条件

步骤

  1. 为代理密钥存储生成自签名证书。

    $ keytool -genkey -alias broker -keyalg RSA -keystore ~/broker.ks
  2. 从代理密钥存储中导出证书,以便它可以与客户端共享。以 Base64 编码的 .pem 格式导出证书。例如:

    $ keytool -export -alias broker -keystore ~/broker.ks -file ~/broker_cert.pem
  3. 在客户端,创建导入代理证书的客户端信任存储。

    $ keytool -import -alias broker -keystore ~/client.ts -file ~/broker_cert.pem
  4. 以管理员身份登录 OpenShift Container Platform。例如:

    $ oc login -u system:admin
  5. 切换到包含代理部署的项目。例如:

    $ oc project my-openshift-project
  6. 创建用于存储 TLS 凭据的机密。例如:

    $ oc create secret generic my-tls-secret \
    --from-file=broker.ks=~/broker.ks \
    --from-file=client.ts=~/broker.ks \
    --from-literal=keyStorePassword=<password> \
    --from-literal=trustStorePassword=<password>
    注意

    在生成机密时,OpenShift 要求您同时指定密钥存储和信任存储。信任存储密钥通常命名为 client.ts。对于代理和客户端之间的单向 TLS,实际上不需要信任存储。但是,若要成功生成 secret,您需要将 一些 有效的存储文件指定为 client.ts 的值。上一步通过重复使用之前生成的代理密钥文件,为 client.ts 提供 "dummy" 值。这足以生成带有单向 TLS 所需的所有凭证的 secret。

  7. 将 secret 链接到安装 Operator 时创建的服务帐户。例如:

    $ oc secrets link sa/amq-broker-operator secret/my-tls-secret
  8. 在安全接受或连接器的 sslSecret 参数中指定 secret 名称。例如:

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp,openwire
        port: 5672
        sslEnabled: true
        sslSecret: my-tls-secret
        expose: true
        connectionsAllowed: 5
    ...
4.6.2.3. 配置双向 TLS

本节中的步骤演示了如何配置双向传输层安全(TLS)来保护 broker-client 连接的安全。

在双向 TLS 中,代理和客户端都显示证书。代理和客户端使用这些证书在有时称为相互身份验证的过程中 相互验证

先决条件

步骤

  1. 为代理密钥存储生成自签名证书。

    $ keytool -genkey -alias broker -keyalg RSA -keystore ~/broker.ks
  2. 从代理密钥存储中导出证书,以便它可以与客户端共享。以 Base64 编码的 .pem 格式导出证书。例如:

    $ keytool -export -alias broker -keystore ~/broker.ks -file ~/broker_cert.pem
  3. 在客户端,创建导入代理证书的客户端信任存储。

    $ keytool -import -alias broker -keystore ~/client.ts -file ~/broker_cert.pem
  4. 在客户端上,为客户端密钥存储生成自签名证书。

    $ keytool -genkey -alias broker -keyalg RSA -keystore ~/client.ks
  5. 在客户端上,从客户端密钥存储中导出证书,以便它可以与代理共享。以 Base64 编码的 .pem 格式导出证书。例如:

    $ keytool -export -alias broker -keystore ~/client.ks -file ~/client_cert.pem
  6. 创建导入客户端证书的代理信任存储。

    $ keytool -import -alias broker -keystore ~/broker.ts -file ~/client_cert.pem
  7. 以管理员身份登录 OpenShift Container Platform。例如:

    $ oc login -u system:admin
  8. 切换到包含代理部署的项目。例如:

    $ oc project my-openshift-project
  9. 创建用于存储 TLS 凭据的机密。例如:

    $ oc create secret generic my-tls-secret \
    --from-file=broker.ks=~/broker.ks \
    --from-file=client.ts=~/broker.ts \
    --from-literal=keyStorePassword=<password> \
    --from-literal=trustStorePassword=<password>
    注意

    在生成机密时,OpenShift 要求您同时指定密钥存储和信任存储。信任存储密钥通常命名为 client.ts。对于代理和客户端之间的双向 TLS,您必须生成包括代理信任存储的 secret,因为这会保存客户端证书。因此,在前面的步骤中,您为 client.ts 键指定的值实际上是 代理 信任存储文件。

  10. 将 secret 链接到安装 Operator 时创建的服务帐户。例如:

    $ oc secrets link sa/amq-broker-operator secret/my-tls-secret
  11. 在安全接受或连接器的 sslSecret 参数中指定 secret 名称。例如:

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp,openwire
        port: 5672
        sslEnabled: true
        sslSecret: my-tls-secret
        expose: true
        connectionsAllowed: 5
    ...

4.6.3. 代理部署中的网络服务

在代理部署的 OpenShift Container Platform Web 控制台的 Networking 窗格上,有两个正在运行的服务: 无头服务 和一个 ping 服务。无头服务的默认名称使用 <Custom Resource name>-hdls-svc 格式,如 my-broker-deployment-hdls-svc。ping 服务的默认名称使用 <Custom Resource name>-ping-svc 格式,例如 'my-broker-deployment-ping-svc

无头服务提供了对每个代理 Pod 上的端口 8161 和 61616 的访问。代理管理控制台使用端口 8161,端口 61616 用于代理集群。您还可以使用无头服务连接到内部客户端(即与代理部署相同的客户端)中的代理 Pod。

ping Service 由代理用于发现,并允许代理在 OpenShift 环境中组成集群。此服务在内部公开端口 8888。

其他资源

4.6.4. 从内部和外部客户端连接到代理

本节中的示例演示了如何从内部客户端(即与代理部署相同的 OpenShift 集群中的客户端)和外部客户端(即 OpenShift 集群外部的客户端)连接代理。

4.6.4.1. 从内部客户端连接到代理

内部客户端可以使用为代理部署运行的 无头服务 连接到代理 Pod。

要使用无头服务连接到代理 Pod,以 <Protocol>://<PodName>.<HeadlessServiceName>.<ProjectName>.svc.cluster.local 格式指定一个地址。例如:

$ tcp://my-broker-deployment-0.my-broker-deployment-hdls-svc.my-openshift-project.svc.cluster.local

OpenShift DNS 成功解析这种格式的地址,因为基于 Operator 的代理部署创建的 StatefulSets 提供稳定的 Pod 名称。

其他资源

4.6.4.2. 从外部客户端连接到代理

当您向外部客户端公开接受者(即,将 expose 参数的值设置为 true时,会为部署中的每个代理 Pod 自动创建专用服务和路由。要查看给定代理 Pod 上配置的路由,请在 OpenShift Container Platform web 控制台中选择 Pod 并点 Routes 选项卡。

外部客户端可以通过指定为代理 Pod 创建的 Route 的完整主机名来连接到代理。您可以使用基本的 curl 命令测试对这个完整主机名的外部访问权限。例如:

$ curl https://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain

Route 的完整主机名必须解析为托管 OpenShift 路由器的节点。OpenShift 路由器使用主机名来确定在 OpenShift 内部网络内发送流量的位置。

默认情况下,OpenShift 路由器侦听端口 80 以获得安全保护(即非 SSL)流量和端口 443(即 SSL 加密)流量和端口 443。对于 HTTP 连接,如果您指定了一个安全连接 URL(即 https),路由器会自动将流量定向到端口 443(即 http)。

对于非 HTTP 连接:

  • 客户端必须明确指定端口号(例如,端口 443)作为连接 URL 的一部分。
  • 对于单向 TLS,客户端必须指定到其信任存储和相应的密码的路径,作为连接 URL 的一部分。
  • 对于双向 TLS,客户端 还必须 指定其密钥存储和对应的密码的路径,作为连接 URL 的一部分。

下方显示了一些客户端连接 URL 的示例,如受支持的消息传递 protcols。

外部核心客户端,使用单向 TLS

tcp://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?useTopologyForLoadBalancing=false&sslEnabled=true \
&trustStorePath=~/client.ts&trustStorePassword=<password>

注意

在连接 URL 中,使用TopologyForLoadBalancing 键明确设置为 false,因为外部 Core 客户端无法使用代理返回的拓扑信息。如果此键设为 true,或者您没有指定值,则会生成 DEBUG 日志消息。

外部核心客户端,使用双向 TLS

tcp://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?useTopologyForLoadBalancing=false&sslEnabled=true \
&keyStorePath=~/client.ks&keyStorePassword=<password> \
&trustStorePath=~/client.ts&trustStorePassword=<password>

使用单向 TLS 的外部 OpenWire 客户端

ssl://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443"

# Also, specify the following JVM flags
-Djavax.net.ssl.trustStore=~/client.ts -Djavax.net.ssl.trustStorePassword=<password>

使用双向 TLS 的外部 OpenWire 客户端

ssl://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443"

# Also, specify the following JVM flags
-Djavax.net.ssl.keyStore=~/client.ks -Djavax.net.ssl.keyStorePassword=<password> \
-Djavax.net.ssl.trustStore=~/client.ts -Djavax.net.ssl.trustStorePassword=<password>

使用单向 TLS 的外部 AMQP 客户端

amqps://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?transport.verifyHost=true \
&transport.trustStoreLocation=~/client.ts&transport.trustStorePassword=<password>

使用双向 TLS 的外部 AMQP 客户端

amqps://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?transport.verifyHost=true \
&transport.keyStoreLocation=~/client.ks&transport.keyStorePassword=<password> \
&transport.trustStoreLocation=~/client.ts&transport.trustStorePassword=<password>

4.6.4.3. 使用 NodePort 连接到代理

作为使用路由的替代选择,OpenShift 管理员可以将 NodePort 配置为从 OpenShift 外部的客户端连接到代理 Pod。NodePort 应映射到由为代理配置的接收器指定的协议指定端口之一。

默认情况下,NodePort 在 30000 到 32767 范围中,这意味着 NodePort 通常与代理 Pod 中预期的端口不匹配。

要从 OpenShift 外部的客户端通过 NodePort 连接到代理,您需要以 <Protocol>://<OCPNodeIP>:<NodePortNumber> 格式指定一个 URL。

其他资源

  • 有关使用从 OpenShift 集群外部通信方法(如 Route 和 NodePort)与集群中运行的服务进行通信的更多信息,请参阅:

4.7. 为 AMQP 消息配置大型消息处理

客户端可能会发送可超过代理内部缓冲大小的大型 AMQP 消息,从而导致意外错误。要防止这种情况,您可以将代理配置为在消息大于指定最小值时存储消息。以这种方式处理大量消息意味着代理不会在内存中保存消息。相反,代理会将消息存储在用于存储大型消息文件的专用目录中。

对于 OpenShift Container Platform 上的代理部署,大型消息目录为 /opt/<custom-resource-name>/data/large-messages,供代理用于消息存储。当代理将消息作为大消息存储时,队列会保留对大型消息目录中的 文件的引用。

重要
  • 要为 AMQP 消息配置大型消息处理,必须至少 将 Operator 的最新版本用于 AMQ Broker 7.7(版本 0.17)。要了解如何将 Operator 升级到 AMQ Broker 7.8 的最新版本,请参阅 第 6 章 升级基于 Operator 的代理部署
  • 对于 AMQ Broker 7.8 中的基于 Operator 的代理部署,只有 AMQP 协议可以使用大型消息处理。

4.7.1. 为大型消息处理配置 AMQP 接收器

以下步骤演示了如何配置接收器,以处理大于指定大小的 AMQP 消息作为大消息。

先决条件

步骤

  1. 打开之前定义 AMQP 接受者的自定义资源(CR)实例。

    1. 使用 OpenShift 命令行界面:

      $ oc edit -f <path/to/custom-resource-instance>.yaml
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 在左侧导航菜单中点击 AdministrationCustom Resource Definitions
      2. 单击 ActiveMQArtemis CRD。
      3. 实例 选项卡。
      4. 查找与项目命名空间对应的 CR 实例。

    之前配置的 AMQP 接受器可能类似如下:

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp
        port: 5672
        connectionsAllowed: 5
        expose: true
        sslEnabled: true
    ...
  2. 指定代理作为大型消息的 AMQP 消息最小大小(以字节为单位)。例如:

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp
        port: 5672
        connectionsAllowed: 5
        expose: true
        sslEnabled: true
        amqpMinLargeMessageSize: 204800
        ...
    ...

    在前面的示例中,代理配置为接受端口 5672 上的 AMQP 消息。根据 amqpMinLargeMessageSize 的值,如果接受者收到大于或等于 204800 字节的 AMQP 消息(即 200 KB),代理将消息保存为大消息。

    代理将消息保存在用于消息存储的持久性卷(PV)上的大消息目录(/opt/<custom-resource-name>/data/large-messages )中。

    如果没有为 amqpMinLargeMessageSize 属性指定值,则代理使用默认值 102400(即 100 KB)。

    如果将mq pMinLargeMessageSize 设置为 -1,则禁用用于 AMQP 消息的大型消息处理。

4.8. 高可用性和消息迁移

4.8.1. 高可用性

术语 高可用性 是指在该系统出现故障时或关闭时仍可保持操作的系统。对于 OpenShift Container Platform 上的 AMQ Broker,这意味着,如果代理 Pod 失败,则确保消息传递数据的完整性和可用性,或者因为部署意外缩减而关闭。

要在 OpenShift Container Platform 上允许 AMQ Broker 的高可用性,您可以在代理集群中运行多个代理 Pod。每个代理 Pod 将其消息数据写入您声明用于持久性卷声明(PVC)的可用持久性卷(PV)。如果代理 Pod 失败或者关闭,则存储在 PV 中的消息数据会迁移到代理集群中的另一个可用代理 Pod。其他代理 Pod 会将消息数据存储在自己的 PV 中。

注意

消息迁移 仅适用于 基于 AMQ Broker Operator 的部署。基于应用模板的部署 没有 消息迁移功能。

下图显示了基于 StatefulSet 的代理部署。在这种情况下,代理集群中的两个代理 Pod 仍然在运行。

AH ocp pod draining

当代理 Pod 关闭时,AMQ Broker Operator 会自动启动一个 扩展控制器,该控制器将执行消息迁移到仍在代理集群中运行的另一代理 Pod。此消息迁移过程也称为 Pod 排空操作。下面的部分描述了消息迁移。

4.8.2. 消息迁移

当集群部署中的代理因为部署失败或意图部署而关闭时,消息迁移是如何确保消息传递数据的完整性。也称为 Pod 排空功能,这个过程指的是从已关闭的代理 Pod 中删除和重新分配信息。

注意
  • 消息迁移 仅适用于 基于 AMQ Broker Operator 的部署。基于应用模板的部署 没有 消息迁移功能。
  • 执行消息迁移的扩展控制器只能在单个 OpenShift 项目中运行。控制器无法在单独的项目中的代理之间迁移消息。
  • 要使用消息迁移,您的部署中必须至少有两个代理。默认集群有两个或更多代理的代理。

对于基于 Operator 的代理部署,您可以在部署的主代理资源中将 messageMigration 设置为 true 来启用消息迁移。

消息迁移过程遵循以下步骤:

  1. 当因为部署中的代理 Pod 失败或意图缩减而关闭时,Operator 会自动启动一个缩减控制器来为消息迁移做准备。扩展控制器在与代理集群相同的 OpenShift 项目名称中运行。
  2. 缩减控制器自行注册并侦听与项目中的持久性卷声明(PVC)相关的 Kubernetes 事件。
  3. 要检查已孤立的持久性卷(PV),扩展控制器会查看卷声明中的孤立卷。控制器将卷声明中的 或dinal 与您项目中仍运行的代理 Pod(即代理集群)中的代理 Pod 进行比较。

    如果卷声明中的 ordinal 高于代理集群中运行的任何代理 Pod 的 ordinal,则扩展控制器决定在那个或非插件关闭时代理 Pod,且消息传递数据必须迁移到另一个代理 Pod。

  4. 缩减控制器启动排空器 Pod。drainer Pod 运行代理并执行消息迁移。然后,drainer Pod 会标识一个替代的代理 Pod,可将孤立消息迁移到该 Pod。

    注意

    部署中必须至少有一个代理 Pod 仍然在部署中运行,以便进行消息迁移。

下图显示了扩展控制器(也称为 drain控制器)如何将消息迁移到正在运行的代理 Pod。

AH ocp pod draining 3

当消息成功迁移到操作代理 Pod 后,排空程序 Pod 会关闭,扩展控制器会删除孤立 PV 的 PVC。PV 返回为 "Released" 状态。

注意

如果您将代理部署缩减为 0(零),则不会发生消息迁移,因为没有正在运行的代理 Pod 可以迁移到哪些消息传递数据。但是,如果您将部署缩减为 0,然后备份到小于原始部署的大小,则会为保持关闭的代理启动排空 Pod。

其他资源

4.8.3. 在缩减时迁移信息

要在缩减代理部署时迁移消息,请使用主代理自定义资源(CR)启用消息迁移。在缩减集群代理部署时,AMQ Broker Operator 会自动运行专用的扩展控制器来执行消息迁移。

启用消息迁移后,Operator 中的扩展控制器检测到代理 Pod 关闭,并启动 drainer Pod 以执行消息迁移。drainer Pod 连接到集群中的其他实时代理 Pod 之一,并将消息迁移到该 live 代理 Pod。迁移完成后,缩减控制器将关闭。

注意
  • 缩减控制器只在单一 OpenShift 项目中运行。控制器无法在单独的项目中的代理之间迁移消息。
  • 如果您将代理部署缩减为 0(零),则不会发生消息迁移信息,因为没有正在运行的代理 Pod 可以迁移到消息传递数据。但是,如果您将部署缩减到零代理,然后备份到原始部署中的一些代理,则会为继续关闭的代理启动排空 Pod。

以下示例显示了扩展控制器的行为。

先决条件

步骤

  1. 在最初下载并提取的 Operator 存储库的 deploy/crs 目录中,打开主代理 CR,broker_activemqartemis_cr.yaml
  2. 在主代理 CR 中,将 messageMigrationpersistenceEnabled 设置为 true

    这些设置意味着,当稍后缩减集群代理部署的大小时,Operator 会自动启动扩展控制器,并将信息迁移到仍在运行的代理 Pod 中。

  3. 在现有的代理部署中,验证哪些 Pod 正在运行。

    $ oc get pods

    您会看到类似如下的输出。

    activemq-artemis-operator-8566d9bf58-9g25l   1/1   Running   0   3m38s
    ex-aao-ss-0                                  1/1   Running   0   112s
    ex-aao-ss-1                                  1/1   Running   0   8s

    前面的输出显示,有三个 Pod 正在运行:一个用于代理 Operator 本身,以及部署中每个代理的独立 Pod。

  4. 登录到每个 Pod,并将一些信息发送到每个代理。

    1. Pod ex-ao-ss-0 有集群 IP 地址 172.17.0.6,运行以下命令:

      $ /opt/amq-broker/bin/artemis producer --url tcp://172.17.0.6:61616 --user admin --password admin
    2. Pod ex-aao-ss-1 具有 172.17.0.7 的集群 IP 地址,运行以下命令:

      $ /opt/amq-broker/bin/artemis producer --url tcp://172.17.0.7:61616 --user admin --password admin

      前面的命令在每个代理上创建一个名为 TEST 的队列,并将 1000 个消息添加到每个队列。

  5. 将集群从两个代理缩减到一。

    1. 打开主代理 CR,broker_activemqartemis_cr.yaml
    2. 在 CR 中,将 deploymentPlan.size 设置为 1
    3. 在命令行中应用更改:

      $ oc apply -f deploy/crs/broker_activemqartemis_cr.yaml

      您会看到 Pod ex-ao-ss-1 开始关闭。扩展控制器启动相同名称的新排空器 Pod。这个 drainer Pod 还会在将代理 Pod ex-ao-ss-1 的所有消息迁移到集群中的其他代理 Pod 后关闭,即 ex-aao-ss-0

  6. 关闭 drainer Pod 时,检查代理 Pod ex-aao-ss-0 上测试队列的消息数。您会看到队列中的消息数量为 2000,这表示排空 Pod 成功从关闭的代理 Pod 中迁移了 1000 信息。

第 5 章 连接到基于 Operator 的代理部署的 AMQ 管理控制台

基于 Operator 的部署中的每个代理 Pod 在端口 8161 上托管自己的 AMQ 管理控制台实例。要为每个代理提供对控制台的访问,您可以为代理部署配置自定义资源(CR)实例,以指示 Operator 为每个代理 Pod 自动创建专用服务和路由。

以下流程描述了如何连接到部署的代理的 AMQ 管理控制台。

先决条件

  • 您必须使用 AMQ Broker Operator 创建代理部署。例如,要了解如何使用示例 CR 创建基本代理部署,请参阅 第 3.4.1 节 “部署基本代理实例”
  • 要指示 Operator 自动为控制台访问部署中的每个代理 Pod 创建 Service 和 Route,您必须在用于创建部署的自定义资源(CR)实例中将 console.expose 属性的值设置为 true。这个属性的默认值为 false。有关完整的自定义资源配置引用,包括 CR 的 console 部分配置,请参阅 第 11.1 节 “自定义资源配置参考”

5.1. 连接到 AMQ 管理控制台

当您在用于创建代理部署的自定义资源(CR)实例中将 console.expose 属性的值设置为 true 时,Operator 会自动为每个代理 Pod 创建专用的服务和路由,以提供对 AMQ 管理控制台的访问。

自动创建的服务的默认名称为 <custom-resource-name>-wconsj-<broker-pod-ordinal>-svc。例如: my-broker-deployment-wconsj-0-svc。自动创建的 Route 的默认名称格式为 <custom-resource-name>-wconsj-<broker-pod-ordinal>-svc-rte。例如: my-broker-deployment-wconsj-0-svc-rte

此流程演示了如何访问正在运行的代理 Pod 的控制台。

步骤

  1. 在 OpenShift Container Platform web 控制台中,点 NetworkingRoutes (OpenShift Container Platform 4.5 或更高版本)或 ApplicationsRoutes (OpenShift Container Platform 3.11)。

    Routes 页面中,识别给定代理 Pod 的 wconsj Route。例如: my-broker-deployment-wconsj-0-svc-rte

  2. Location (OpenShift Container Platform 4.5 或更高版本) 或主机名 下(OpenShift Container Platform 3.11)下,点击与路由对应的链接。

    在 Web 浏览器中打开一个新标签页。

  3. Management Console 链接。

    此时会打开 AMQ Management Console 登录页面。

  4. 要登录到控制台,请在用于创建代理部署的自定义资源(CR)实例中输入 adminUseradminPassword 属性指定的值。

    如果在 CR 中没有为 adminUseradminPassword 明确指定值,请按照 第 5.2 节 “访问 AMQ 管理控制台登录凭证” 中的说明检索登录到控制台所需的凭证。

    注意

    只有 将 CR 的 requireLogin 属性设置为 true,才需要 adminUseradminPassword 的值来登录控制台。此属性指定是否需要登录到 代理和 控制台的登录凭证。如果 requireLogin 设置为 false,则具有 OpenShift 项目的管理员特权的任何用户可以登录到控制台。

5.2. 访问 AMQ 管理控制台登录凭证

如果您没有在用于代理部署的自定义资源(CR)实例中指定 adminUseradminPassword 的值,Operator 会自动生成这些凭证并将其存储在 secret 中。默认 secret 名称格式为 <custom-resource-name>-credentials-secret,如 my-broker-deployment-credentials-secret

注意

只有 将 CR 的 requireLogin 参数设置为 true,才需要 adminUseradminPassword 的值来登录管理控制台。如果 requireLogin 设置为 false,则具有 OpenShift 项目的管理员特权的任何用户可以登录到控制台。

此步骤显示如何访问登录凭证。

步骤

  1. 请参阅 OpenShift 项目中机密的完整列表。

    1. 在 OpenShift Container Platform web 控制台中,点 WorkloadSecrets (OpenShift Container Platform 4.5 或更高版本)或 ResourcesSecrets (OpenShift Container Platform 3.11)。
    2. 在命令行中:

      $ oc get secrets
  2. 打开适当的 secret,以显示 Base64 编码的控制台登录凭证。

    1. 在 OpenShift Container Platform web 控制台中,在其名称中点包含代理自定义资源实例的 secret。点 YAML 标签页(OpenShift Container Platform 4.5 或更高版本)或 ActionsEdit YAML (OpenShift Container Platform 3.11)。
    2. 在命令行中:

      $ oc edit secret <my-broker-deployment-credentials-secret>
  3. 要解码 secret 中的值,请使用以下命令:

    $ echo 'dXNlcl9uYW1l' | base64 --decode
    console_admin

其他资源

第 6 章 升级基于 Operator 的代理部署

本节中的步骤演示了如何升级:

  • AMQ Broker Operator 版本,同时使用 OpenShift 命令行界面(CLI)和 OperatorHub
  • 基于 Operator 的代理部署的代理容器镜像

6.1. 开始前

本节论述了在为基于 Operator 的代理部署升级 Operator 和代理容器镜像前的一些重要注意事项。

  • 要升级在 OpenShift Container Platform 3.11 上运行的基于 Operator 的代理部署,以便在 OpenShift Container Platform 4.5 或更高版本上运行,您必须首先升级 OpenShift Container Platform 安装。然后,您必须创建一个与现有部署匹配的基于 Operator 的代理部署。要了解如何创建新的基于 Operator 的代理部署,请参阅 第 3 章 使用 AMQ Broker Operator 在 OpenShift Container Platform 上部署 AMQ Broker
  • 使用 OpenShift 命令行界面(CLI)或 OperatorHub 升级 Operator 需要 OpenShift 集群的集群管理员特权。
  • 如果您最初使用 CLI 安装 Operator,则还应使用 CLI 来升级 Operator。如果您最初使用 OperatorHub 安装 Operator(即,OpenShift Container Platform Web 控制台中的项目的 Operators 下会出现),则还应使用 OperatorHub 来升级 Operator。有关这些升级方法的更多信息,请参阅:

6.2. 使用 CLI 升级 Operator

本节中的步骤演示了如何使用 OpenShift 命令行界面(CLI)将 Operator 的不同版本升级到 AMQ Broker 7.8 的最新版本。

6.2.1. 先决条件

  • 只有在最初使用 CLI 安装 Operator 时,才应使用 CLI 来升级 Operator。如果您最初使用 OperatorHub 安装 Operator(即,OpenShift Container Platform Web 控制台中的项目的 Operators 下会出现 Operator),则应使用 OperatorHub 来升级 Operator。要了解如何使用 OperatorHub 升级 Operator,请参阅 第 6.3 节 “使用 OperatorHub 升级 Operator”

6.2.2. 升级 Operator 的 0.19 版本

此流程演示了如何使用 OpenShift 命令行界面(CLI)将 Operator 的 0.19 版本升级到 AMQ Broker 7.8 的最新版本。

步骤

  1. 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
  2. 确保将 Version 下拉列表的值设置为 7.8.5,并且选择了 Patches 选项卡。
  3. AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download

    下载 amq-broker-operator-7.8.5-ocp-install-examples.zip 压缩存档会自动开始。

  4. 下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为 ~/broker/operator 的目录。

    mkdir ~/broker/operator
    mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
  5. 在您选择的安装目录中,提取存档的内容。例如:

    cd ~/broker/operator
    unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
  6. 以包含现有 Operator 部署的项目的管理员身份登录 OpenShift Container Platform。

    $ oc login -u <user>
  7. 切换到您要升级 Operator 版本的 OpenShift 项目。

    $ oc project <project-name>
  8. 在您下载并提取的最新 Operator 归档的部署目录中,打开 operator.yaml 文件。

    注意

    operator.yaml 文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#)符号开头,表示 SHA 值对应于特定的容器镜像标签。

  9. 为之前的 Operator 部署打开 operator.yaml 文件。检查您在之前配置中指定的任何非默认值是否已 在新的 operator.yaml 配置文件中复制。
  10. 如果您对 新的 operator.yaml 文件进行了任何更新,请保存文件。
  11. 应用更新的 Operator 配置。

    $ oc apply -f deploy/operator.yaml

    OpenShift 会更新项目以使用最新的 Operator 版本。

  12. 要重新创建之前的代理部署,请创建一个新的 CR yaml 文件以匹配原始 CR 的目的并应用它。第 3.4.1 节 “部署基本代理实例” 描述了如何在 Operator 安装存档中应用 deploy/crs/broker_activemqartemis_cr.yaml 文件,您可以使用该文件作为新 CR yaml 文件的基础。

6.2.3. 升级 Operator 的 0.18 版本

此流程演示了如何使用 OpenShift 命令行界面(CLI)将 Operator 的 0.18 版本升级为 AMQ Broker 7.8 的最新版本。

步骤

  1. 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
  2. 确保将 Version 下拉列表的值设置为 7.8.5,并且选择了 Patches 选项卡。
  3. AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download

    下载 amq-broker-operator-7.8.5-ocp-install-examples.zip 压缩存档会自动开始。

  4. 下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为 ~/broker/operator 的目录。

    mkdir ~/broker/operator
    mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
  5. 在您选择的安装目录中,提取存档的内容。例如:

    cd ~/broker/operator
    unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
  6. 以包含现有 Operator 部署的项目的管理员身份登录 OpenShift Container Platform。

    $ oc login -u <user>
  7. 切换到您要升级 Operator 版本的 OpenShift 项目。

    $ oc project <project-name>
  8. 在您下载并提取的最新 Operator 归档的部署目录中,打开 operator.yaml 文件。

    注意

    operator.yaml 文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#)符号开头,表示 SHA 值对应于特定的容器镜像标签。

  9. 为之前的 Operator 部署打开 operator.yaml 文件。检查您在之前配置中指定的任何非默认值是否已 在新的 operator.yaml 配置文件中复制。

    注意

    Operator 的 0.18 版本的 operator.yaml 文件包括环境变量,其名称以 BROKER_IMAGE 开头。不要在 新配置中复制这些环境变量。AMQ Broker 7.8 的 Operator 的最新版本不再使用这些环境变量。

  10. 如果您对 新的 operator.yaml 文件进行了任何更新,请保存文件。
  11. 应用更新的 Operator 配置。

    $ oc apply -f deploy/operator.yaml

    OpenShift 会更新项目以使用最新的 Operator 版本。

  12. 要重新创建之前的代理部署,请创建一个新的 CR yaml 文件以匹配原始 CR 的目的并应用它。第 3.4.1 节 “部署基本代理实例” 描述了如何在 Operator 安装存档中应用 deploy/crs/broker_activemqartemis_cr.yaml 文件,您可以使用该文件作为新 CR yaml 文件的基础。

6.2.4. 升级 Operator 的 0.17 版本

此流程演示了如何使用 OpenShift 命令行界面(CLI)将 Operator 的 0.17 版本升级为 AMQ Broker 7.8 的最新版本。

步骤

  1. 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
  2. 确保将 Version 下拉列表的值设置为 7.8.5,并且选择了 Patches 选项卡。
  3. AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download

    下载 amq-broker-operator-7.8.5-ocp-install-examples.zip 压缩存档会自动开始。

  4. 下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为 ~/broker/operator 的目录。

    mkdir ~/broker/operator
    mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
  5. 在您选择的安装目录中,提取存档的内容。例如:

    cd ~/broker/operator
    unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
  6. 以集群管理员身份登录 OpenShift Container Platform。例如:

    $ oc login -u system:admin
  7. 切换到您要升级 Operator 版本的 OpenShift 项目。

    $ oc project <project-name>
  8. 删除项目中的主代理自定义资源(CR)实例。这也会删除代理部署。例如:

    $ oc delete -f deploy/crs/broker_activemqartemis_cr.yaml
  9. 将 OpenShift 集群中的主要代理自定义资源定义(CRD)更新至最新版本。

    $ oc apply -f deploy/crds/broker_activemqartemis_crd.yaml
    注意

    您不需要使用 最新版本的 CRD 来更新集群寻址或扩展控制器。这些 CRD 与之前 Operator 版本中包含的完全兼容。

  10. 在您下载并提取的最新 Operator 归档的部署目录中,打开 operator.yaml 文件。

    注意

    operator.yaml 文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#)符号开头,表示 SHA 值对应于特定的容器镜像标签。

  11. 为之前的 Operator 部署打开 operator.yaml 文件。检查您在之前配置中指定的任何非默认值是否已 在新的 operator.yaml 配置文件中复制。

    注意

    Operator 的 0.17 版本的 operator.yaml 文件包括环境变量,其名称以 BROKER_IMAGE 开头。不要在 新配置中复制这些环境变量。AMQ Broker 7.8 的 Operator 的最新版本不再使用这些环境变量。

  12. 如果您对 新的 operator.yaml 文件进行了任何更新,请保存文件。
  13. 应用更新的 Operator 配置。

    $ oc apply -f deploy/operator.yaml

    OpenShift 会更新项目以使用最新的 Operator 版本。

  14. 要重新创建之前的代理部署,请创建一个新的 CR yaml 文件以匹配原始 CR 的目的并应用它。第 3.4.1 节 “部署基本代理实例” 描述了如何在 Operator 安装存档中应用 deploy/crs/broker_activemqartemis_cr.yaml 文件,您可以使用该文件作为新 CR yaml 文件的基础。

6.2.5. 升级 Operator 的 0.15 版本

此流程演示了如何使用 OpenShift 命令行界面(CLI)将 Operator 的 0.15 版本升级为 AMQ Broker 7.8 的最新版本。

步骤

  1. 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
  2. 确保将 Version 下拉列表的值设置为 7.8.5,并且选择了 Patches 选项卡。
  3. AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download

    下载 amq-broker-operator-7.8.5-ocp-install-examples.zip 压缩存档会自动开始。

  4. 下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为 ~/broker/operator 的目录。

    mkdir ~/broker/operator
    mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
  5. 在您选择的安装目录中,提取存档的内容。例如:

    cd ~/broker/operator
    unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
  6. 以集群管理员身份登录 OpenShift Container Platform。例如:

    $ oc login -u system:admin
  7. 切换到您要升级 Operator 版本的 OpenShift 项目。

    $ oc project <project-name>
  8. 删除项目中的主代理自定义资源(CR)实例。这也会删除代理部署。例如:

    $ oc delete -f deploy/crs/broker_activemqartemis_cr.yaml
  9. 将 OpenShift 集群中的主要代理自定义资源定义(CRD)更新至最新版本。

    $ oc apply -f deploy/crds/broker_activemqartemis_crd.yaml
    注意

    您不需要使用 最新版本的 CRD 来更新集群寻址或扩展控制器。这些 CRD 与之前 Operator 版本中包含的完全兼容。

  10. 在您下载并提取的最新 Operator 归档的部署目录中,打开 operator.yaml 文件。

    注意

    operator.yaml 文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#)符号开头,表示 SHA 值对应于特定的容器镜像标签。

  11. 为之前的 Operator 部署打开 operator.yaml 文件。检查您在之前配置中指定的任何非默认值是否已 在新的 operator.yaml 配置文件中复制。

    注意

    Operator 的 0.15 版本的 operator.yaml 文件包括环境变量,其名称以 BROKER_IMAGE 开头。不要在 新配置中复制这些环境变量。AMQ Broker 7.8 的 Operator 的最新版本不再使用这些环境变量。

  12. 如果您对 新的 operator.yaml 文件进行了任何更新,请保存文件。
  13. 应用更新的 Operator 配置。

    $ oc apply -f deploy/operator.yaml

    OpenShift 会更新项目以使用最新的 Operator 版本。

  14. 要重新创建之前的代理部署,请创建一个新的 CR yaml 文件以匹配原始 CR 的目的并应用它。第 3.4.1 节 “部署基本代理实例” 描述了如何在 Operator 安装存档中应用 deploy/crs/broker_activemqartemis_cr.yaml 文件,您可以使用该文件作为新 CR yaml 文件的基础。

6.2.6. 升级 Operator 的 0.13 版本

此流程演示了如何使用 OpenShift 命令行界面(CLI)将 Operator 的 0.13 版本升级为 AMQ Broker 7.8 的最新版本。

步骤

  1. 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
  2. 确保将 Version 下拉列表的值设置为 7.8.5,并且选择了 Patches 选项卡。
  3. AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download

    下载 amq-broker-operator-7.8.5-ocp-install-examples.zip 压缩存档会自动开始。

  4. 下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为 ~/broker/operator 的目录。

    mkdir ~/broker/operator
    mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
  5. 在您选择的安装目录中,提取存档的内容。例如:

    cd ~/broker/operator
    unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
  6. 以集群管理员身份登录 OpenShift Container Platform。例如:

    $ oc login -u system:admin
  7. 切换到您要升级 Operator 版本的 OpenShift 项目。

    $ oc project <project-name>
  8. 删除项目中的主代理自定义资源(CR)实例。这也会删除代理部署。例如:

    $ oc delete -f deploy/crs/broker_activemqartemis_cr.yaml
  9. 将 OpenShift 集群中的主要代理自定义资源定义(CRD)更新至最新版本。

    $ oc apply -f deploy/crds/broker_activemqartemis_crd.yaml
  10. 将 OpenShift 集群中的 地址 CRD 更新至 AMQ Broker 7.8 中包含的最新版本。

    $ oc apply -f deploy/crds/broker_activemqartemisaddress_crd.yaml
    注意

    您不需要 使用扩展控制器的 CRD 的最新版本更新集群。在 AMQ Broker 7.8 中,此 CRD 与 Operator for AMQ Broker 7.6 一起完全兼容。

  11. 在您下载并提取的最新 Operator 归档的部署目录中,打开 operator.yaml 文件。

    注意

    operator.yaml 文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#)符号开头,表示 SHA 值对应于特定的容器镜像标签。

  12. 为之前的 Operator 部署打开 operator.yaml 文件。检查您在之前配置中指定的任何非默认值是否已 在新的 operator.yaml 配置文件中复制。
  13. 如果您对 新的 operator.yaml 文件进行了任何更新,请保存文件。
  14. 应用更新的 Operator 配置。

    $ oc apply -f deploy/operator.yaml

    OpenShift 会更新项目以使用最新的 Operator 版本。

6.2.7. 升级 Operator 的 0.9 版本

以下流程演示了如何使用 OpenShift 命令行界面(CLI)将 Operator 的 0.9 版本升级为 AMQ Broker 7.8 的最新版本。

步骤

  1. 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
  2. 确保将 Version 下拉列表的值设置为 7.8.5,并且选择了 Patches 选项卡。
  3. AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download

    下载 amq-broker-operator-7.8.5-ocp-install-examples.zip 压缩存档会自动开始。

  4. 下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为 ~/broker/operator 的目录。

    mkdir ~/broker/operator
    mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
  5. 在您选择的安装目录中,提取存档的内容。例如:

    cd ~/broker/operator
    unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
  6. 以集群管理员身份登录 OpenShift Container Platform。例如:

    $ oc login -u system:admin
  7. 切换到您要升级 Operator 版本的 OpenShift 项目。

    $ oc project <project-name>
  8. 删除项目中的主代理自定义资源(CR)实例。这也会删除代理部署。例如:

    $ oc delete -f deploy/crs/broker_v2alpha1_activemqartemis_cr.yaml
  9. 将 OpenShift 集群中的主代理自定义资源定义(CRD)更新至 AMQ Broker 7.8 中包含的最新版本。

    $ oc apply -f deploy/crds/broker_activemqartemis_crd.yaml
  10. 将 OpenShift 集群中的地址 CRD 更新至 AMQ Broker 7.8 中包含的最新版本。

    $ oc apply -f deploy/crds/broker_activemqartemisaddress_crd.yaml
    注意

    您不需要 使用扩展控制器的 CRD 的最新版本更新集群。在 AMQ Broker 7.8 中,此 CRD 与之前 Operator 版本中包含的完全兼容。

  11. 在您下载并提取的最新 Operator 归档的部署目录中,打开 operator.yaml 文件。

    注意

    operator.yaml 文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#)符号开头,表示 SHA 值对应于特定的容器镜像标签。

  12. 为之前的 Operator 部署打开 operator.yaml 文件。检查您在之前配置中指定的任何非默认值是否已 在新的 operator.yaml 配置文件中复制。
  13. 如果您对 新的 operator.yaml 文件进行了任何更新,请保存文件。
  14. 应用更新的 Operator 配置。

    $ oc apply -f deploy/operator.yaml

    OpenShift 会更新项目以使用最新的 Operator 版本。

  15. 要重新创建之前的代理部署,请创建一个新的 CR yaml 文件以匹配原始 CR 的目的并应用它。第 3.4.1 节 “部署基本代理实例” 描述了如何在 Operator 安装存档中应用 deploy/crs/broker_activemqartemis_cr.yaml 文件,您可以使用该文件作为新 CR yaml 文件的基础。

6.3. 使用 OperatorHub 升级 Operator

本节论述了如何使用 OperatorHub 将 Operator 的不同版本升级到 AMQ Broker 7.8 的最新版本。

6.3.1. 先决条件

  • 只有在最初使用 OperatorHub 安装 Operator 时,才应使用 OperatorHub 升级 Operator(即,OpenShift Container Platform Web 控制台的项目的 OperatorsInstalled Operators 下)。相反,如果您最初使用 OpenShift 命令行界面(CLI)安装 Operator,则还应使用 CLI 来升级 Operator。要了解如何使用 CLI 升级 Operator,请参阅 第 6.2 节 “使用 CLI 升级 Operator”
  • 使用 OperatorHub 升级 AMQ Broker Operator 需要 OpenShift 集群的集群管理员特权。

6.3.2. 开始前

本节论述了在使用 OperatorHub 升级 AMQ Broker Operator 实例前的一些重要事项。

  • 当您从 OperatorHub 安装最新的 Operator 版本时,Operator Lifecycle Manager 会自动更新 OpenShift 集群中的 CRD。您不需要删除现有 CRD。
  • 当您使用 CRD 为最新的 Operator 版本更新集群时,这个更新会 影响集群中的所有项目。从之前版本的 Operator 部署的任何代理 Pod 可能无法在 OpenShift Container Platform Web 控制台中更新其状态。当您点击正在运行的代理 Pod 的 Logs 选项卡时,您会看到表示"UpdatePodStatus"的消息已失败。但是,该项目中的代理 Pod 和 Operator 将继续按预期工作。要为受影响的项目修复这个问题,还必须升级该项目以使用最新版本的 Operator。

6.3.3. 使用 OperatorHub 升级 Operator

此流程演示了如何使用 OperatorHub 来升级 AMQ Broker Operator 实例。

步骤

  1. 以集群管理员身份登录 OpenShift Container Platform Web 控制台。
  2. 删除项目中代理部署的主要自定义资源(CR)实例。此操作会删除代理部署。

    1. 在左侧导航菜单中,点 AdministrationCustom Resource Definitions
    2. Custom Resource Definitions 页面上,单击 ActiveMQArtemis CRD。
    3. 实例 选项卡。
    4. 查找与项目命名空间对应的 CR 实例。
    5. 对于 CR 实例,在右侧点击 More Options 图标(three vertical dots)。选择 Delete ActiveMQArtemis
  3. 从项目中卸载现有的 AMQ Broker Operator。

    1. 在左侧导航菜单中,点 OperatorsInstalled Operators
    2. 在页面顶部的 Project 下拉菜单中选择您要卸载 Operator 的项目。
    3. 找到您要卸载的 Red Hat Integration - AMQ Broker 实例。
    4. 对于 Operator 实例,点击右侧的 More Options 图标(three vertical dots)。点击 Uninstall Operator
    5. 在确认对话框中点 Uninstall
  4. 使用 OperatorHub 为 AMQ Broker 7.8 安装最新版本的 Operator。如需更多信息,请参阅 第 3.3.3 节 “从 OperatorHub 部署 Operator”
  5. 要重新创建之前的代理部署,请创建一个新的 CR yaml 文件以匹配原始 CR 的目的并应用它。第 3.4.1 节 “部署基本代理实例” 描述了如何在 Operator 安装存档中应用 deploy/crs/broker_activemqartemis_cr.yaml 文件,您可以使用该文件作为新 CR yaml 文件的基础。

6.4. 通过指定 AMQ Broker 版本来升级代理容器镜像

以下流程演示了如何通过指定 AMQ Broker 版本来为基于 Operator 的代理部署升级代理容器镜像。例如,您可以将 Operator 升级到 AMQ Broker 7.8.5 的最新版本,但 CR 中的 spec.upgrades.enabled 属性已设置为 truespec.version 属性指定 7.7.07.8.0要升级 代理容器镜像,您需要手动指定一个新的 AMQ Broker 版本(如 7.8.5)。当您指定 AMQ Broker 的新版本时,Operator 会自动选择与此版本对应的代理容器镜像。

先决条件

步骤

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

    1. 使用 OpenShift 命令行界面:

      1. 以具有编辑和部署 CR 的用户身份登录到 OpenShift,以供代理部署。

        $ oc login -u <user> -p <password> --server=<host:port>
      2. 在文本编辑器中,打开用于代理部署的 CR 文件。例如,这可能是您之前下载并提取的 Operator 安装的 deploy/crs 目录中包含的 broker_activemqartemis_cr.yaml 文件。
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以有权编辑和部署项目中 CR 的用户身份登录控制台,以进行代理部署。
      2. 在左侧窗格中,单击 AdministrationCustom Resource Definitions
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 查找与项目命名空间对应的 CR 实例。
      6. 对于 CR 实例,在右侧点击 More Options 图标(three vertical dots)。选择 Edit ActiveMQArtemis

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

  2. 要指定将代理容器镜像升级到的 AMQ Broker 版本,请为 CR 的 spec.version 属性设置一个值。例如:

    spec:
        version: 7.8.5
        ...
  3. 在 CR 的 spec 部分,找到 upgrade 部分。如果这个部分还没有包含在 CR 中,请添加它。

    spec:
        version: 7.8.5
        ...
        upgrades:
  4. 确保 upgrade 部分包含 enabledminor 属性。

    spec:
        version: 7.8.5
        ...
        upgrades:
            enabled:
            minor:
  5. 要启用基于指定版本的 AMQ Broker 的代理容器镜像升级,请将 enabled 属性的值设置为 true

    spec:
        version: 7.8.5
        ...
        upgrades:
            enabled: true
            minor:
  6. 要定义代理的升级行为,请为 minor 属性设置一个值。

    1. 要允许在 次要 AMQ Broker 版本间升级,请将 minor 的值设置为 true

      spec:
          version: 7.8.5
          ...
          upgrades:
              enabled: true
              minor: true

      例如,假设当前代理容器镜像对应于 7.7.0,以及一个与为 spec.version 指定的 7.8.5 版本对应的新镜像。在这种情况下,Operator 决定在 7.77.8 次版本间有可用的升级。根据前面的设置,允许次版本间的升级,Operator 会升级代理容器镜像。

      相反,假设当前代理容器镜像对应于 7.8.0 和新镜像,对应于为 spec.version 指定的 7.8.5 版本。在这种情况下,Operator 决定在 7.8.07.8.5 微版本之间有可用的升级。根据前面的设置,这只允许在次版本间升级,Operator 不会 升级代理容器镜像。

    2. 要允许在 AMQ Broker 版本间升级,请将 minor 的值设为 false

      spec:
          version: 7.8.5
          ...
          upgrades:
              enabled: true
              minor: false

      例如,假设当前代理容器镜像对应于 7.7.0,以及一个与为 spec.version 指定的 7.8.5 版本对应的新镜像。在这种情况下,Operator 决定在 7.77.8 次版本间有可用的升级。根据前面的设置,这不允许在次版本之间升级(这只在微版本之间升级),Operator 不会 升级代理容器镜像。

      相反,假设当前代理容器镜像对应于 7.8.0 和新镜像,对应于为 spec.version 指定的 7.8.5 版本。在这种情况下,Operator 决定在 7.8.07.8.5 微版本之间有可用的升级。根据允许在微版本之间升级的设置,Operator 会升级代理容器镜像。

  7. 将更改应用到 CR。

    1. 使用 OpenShift 命令行界面:

      1. 保存 CR 文件。
      2. 切换到代理部署的项目。

        $ oc project <project_name>
      3. 应用 CR。

        $ oc apply -f <path/to/broker_custom_resource_instance>.yaml
    2. 使用 OpenShift Web 控制台:

      1. 编辑完 CR 后,点击 Save

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

    但是,如果升级到指定的版本,且为 upgrade. enabled 和 upgrade. minor 指定的值允许升级,Operator 会升级部署中的每个代理,以使用与新 AMQ Broker 版本对应的代理容器镜像。

    Operator 使用的 broker 容器镜像在 Operator 部署的 operator.yaml 配置文件的一个环境变量中定义。环境变量名称包括 AMQ Broker 版本的标识符。例如,环境变量 RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_781 对应于 AMQ Broker 7.8.1。

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

其他资源

第 7 章 使用应用程序模板在 OpenShift Container Platform 上部署 AMQ Broker

重要

从 7.8 开始,在 OpenShift Container Platform 中使用应用程序模板在 OpenShift Container Platform 中部署 AMQ Broker 是一个已弃用的功能。这个功能将在以后的发行版本中被删除。红帽继续支持基于应用程序模板的现有部署。但是,红帽不推荐在新部署中使用应用程序模板。对于新部署,红帽建议使用 AMQ Broker Operator。有关安装和部署 Operator 的详情,请参考 第 3 章 使用 AMQ Broker Operator 在 OpenShift Container Platform 上部署 AMQ Broker

本节中的步骤显示:

  • 如何安装 AMQ Broker 镜像流和应用程序模板
  • 如何准备基于模板的代理部署
  • 使用 OpenShift Container Platform Web 控制台使用应用程序模板部署基本代理实例的示例。有关使用模板部署其他代理配置示例,请参阅 基于模板的代理部署示例

7.1. 先决条件

7.2. 安装镜像流和应用程序模板

OpenShift Container Platform 镜像流和应用程序模板上的 AMQ Broker 默认在 OpenShift Container Platform 中不可用。您必须使用本节中的步骤手动安装它们。完成手动安装后,您可以实例化模板,以便您可以在 OpenShift 集群上部署所选代理配置。有关以这种方式创建各种代理配置的示例,请参阅使用应用程序模板和 基于模板的代理部署示例 在 OpenShift Container Platform 上部署 AMQ Broker

步骤

  1. 在命令行中,以集群管理员登录 OpenShift(或作为具有全局 openshift 项目命名空间特定命名空间管理员访问权限的用户身份登录),例如:

    $ oc login -u system:admin
    $ oc project openshift

    使用 openshift 项目时,您可以稍后在 OpenShift 集群中的所有项目中安装该镜像流和应用程序模板。如果要显式指定镜像流和应用程序模板已导入到 openshift 项目,您也可以将 -n openshift 作为可选参数添加 -n openshift 作为稍后使用的 oc replace 命令。

    作为使用 openshift 项目的替代选择(例如,如果集群管理员不可用),您可以登录到具有管理员访问权限的特定 OpenShift 项目,并在其中创建代理部署,例如:

    $ oc login -u <USERNAME>
    $ oc project <PROJECT_NAME>

    登录到特定项目后,您稍后在此流程中安装的镜像流和模板只能在该项目的命名空间中可用。

    注意

    OpenShift Container Platform 上的 AMQ Broker 使用 StatefulSet 资源以及所有 *-persistence*.yaml 模板。对于不是 *-persistence*.yaml 的模板,AMQ Broker 使用 Deployment 资源。两种类型的资源都是 Kubernetes 原生资源,它们 只能 消耗来自模板要实例化的同一项目命名空间中的镜像流。

  2. 在命令行中,运行以下命令将代理镜像流导入到项目命名空间中。将 --force 选项与 oc replace 命令一起使用会更新资源,或者创建这些资源(如果它们尚不存在)。

    $ oc replace --force  -f \
    https://raw.githubusercontent.com/jboss-container-images/jboss-amq-7-broker-openshift-image/78-7.8.5.GA/amq-broker-7-image-streams.yaml
  3. 运行以下命令以更新 AMQ Broker 应用程序模板。

    $ for template in amq-broker-78-basic.yaml \
    amq-broker-78-ssl.yaml \
    amq-broker-78-custom.yaml \
    amq-broker-78-persistence.yaml \
    amq-broker-78-persistence-ssl.yaml \
    amq-broker-78-persistence-clustered.yaml \
    amq-broker-78-persistence-clustered-ssl.yaml;
     do
     oc replace --force -f \
    https://raw.githubusercontent.com/jboss-container-images/jboss-amq-7-broker-openshift-image/78-7.8.5.GA/templates/${template}
     done

7.3. 准备基于模板的代理部署

先决条件

  • 在 OpenShift Container Platform 上部署代理实例前,您必须安装 AMQ Broker 镜像流和应用程序模板。如需更多信息 ,请参阅安装镜像流和应用程序模板
  • 以下过程假定您安装的代理镜像流和应用程序模板在全局 openshift 项目中可用。如果在特定项目命名空间中安装了镜像和应用程序模板,则继续使用该项目,而不是创建新项目,如 amq-demo

步骤

  1. 使用命令提示符创建新项目:

    $ oc new-project amq-demo
  2. 创建用于 AMQ Broker 部署的服务帐户:

    $ echo '{"kind": "ServiceAccount", "apiVersion": "v1", "metadata": {"name": "amq-service-account"}}' | oc create -f -
  3. 将 view 角色添加到服务帐户。view 角色可让服务帐户查看 amq-demo 命名空间中的所有资源,在使用 OpenShift dns-ping 协议发现代理集群时,这是管理集群所必需的。

    $ oc policy add-role-to-user view system:serviceaccount:amq-demo:amq-service-account
  4. AMQ Broker 需要代理密钥存储、客户端密钥存储,以及包含代理密钥存储的客户端信任存储。这个示例使用 Java Keytool 是 Java Development Kit 中包含的软件包来生成 dummy 凭证,用于 AMQ Broker 安装。

    1. 为代理密钥存储生成自签名证书:

      $ keytool -genkey -alias broker -keyalg RSA -keystore broker.ks
    2. 导出证书以便可以与客户端共享:

      $ keytool -export -alias broker -keystore broker.ks -file broker_cert
    3. 为客户端密钥存储生成自签名证书:

      $ keytool -genkey -alias client -keyalg RSA -keystore client.ks
    4. 创建导入代理证书的客户端信任存储:

      $ keytool -import -alias broker -keystore client.ts -file broker_cert
    5. 使用代理密钥存储文件创建 AMQ Broker secret:

      $ oc create secret generic amq-app-secret --from-file=broker.ks
    6. 将 secret 链接到之前创建的服务帐户:

      $ oc secrets link sa/amq-service-account secret/amq-app-secret

7.4. 部署基本代理

本节中的步骤演示了如何部署临时且不支持 SSL 的基本代理。

注意

此代理不支持 SSL,外部客户端无法访问。只有 OpenShift 集群内部运行的客户端才能连接到代理。有关创建支持 SSL 的代理配置示例,请参阅 基于模板的代理部署示例

先决条件

  • 您已准备了代理部署。请参阅 准备基于模板的代理部署
  • 以下流程假设安装镜像流和应用程序模板中的代理 镜像流和应用程序模板 可在全局 openshift 项目中可用。如果在特定项目命名空间中安装了镜像和应用程序模板,则继续使用该项目,而不是创建新项目,如 amq-demo
  • 从 AMQ Broker 7.3 开始,您可以使用新版本的红帽生态系统目录访问容器镜像。此新版本的注册表要求您成为经过身份验证的用户,然后才能访问镜像并将它们提取到 OpenShift 项目中。在执行本节中的步骤前,您必须首先完成 Red Hat Container Registry 身份验证 中描述的步骤。

7.4.1. 创建代理应用程序

步骤

  1. 登录到 amq-demo 项目空间或要在其中部署代理的现有项目。

    $ oc login -u <USER_NAME>
    $ oc project <PROJECT_NAME>
  2. 根据基本代理的模板创建新代理应用程序。此模板创建的代理是临时的,不支持 SSL。

    $ oc new-app --template=amq-broker-78-basic \
       -p AMQ_PROTOCOL=openwire,amqp,stomp,mqtt,hornetq \
       -p AMQ_QUEUES=demoQueue \
       -p AMQ_ADDRESSES=demoTopic \
       -p AMQ_USER=amq-demo-user \
       -p AMQ_PASSWORD=password \

    基本代理应用程序模板设置下表中显示的环境变量。

    表 7.1. 基本代理应用程序模板
    环境变量显示名称订阅价值描述

    AMQ_PROTOCOL

    AMQ 协议

    openwire,amqp,stomp,mqtt,hornetq

    代理接受的协议

    AMQ_QUEUES

    队列

    demoQueue

    创建名为 demoQueue 的任何广播队列

    AMQ_ADDRESSES

    地址

    demoTopic

    创建名为 demoTopic 的地址(或主题)。默认情况下,此地址没有分配路由类型。

    AMQ_USER

    AMQ Username

    amq-demo-user

    客户端用于连接代理的用户名

    AMQ_PASSWORD

    AMQ 密码

    password

    客户端使用 及用户名连接到代理的密码

7.4.2. 关于敏感凭证

在 AMQ Broker 应用程序模板中,以下环境变量的值存储在 secret 中:

  • AMQ_USER
  • AMQ_PASSWORD
  • AMQ_CLUSTER_USER(集群代理部署)
  • AMQ_CLUSTER_PASSWORD(集群代理部署)
  • AMQ_TRUSTSTORE_PASSWORD(支持 SSL 的代理部署)
  • AMQ_KEYSTORE_PASSWORD(支持 SSL 的代理部署)

要检索并使用这些环境变量的值,AMQ Broker 应用程序模板会访问 AMQ_CREDENTIAL_SECRET 环境变量中指定的 secret。默认情况下,这个环境变量中指定的 secret 名称是 amq-credential-secret。即使您在部署模板时为任何这些变量指定自定义值,OpenShift Container Platform 会使用当前存储在指定 secret 中的值。另外,除非编辑 secret 以更改值,否则应用程序模板始终使用存储在 amq-credential-secret 中的默认值,或使用新值创建并指定新 secret。您可以使用 OpenShift 命令行界面编辑 secret,如下例所示:

$ oc edit secrets amq-credential-secret

amq-credential-secret 中的值使用 base64 编码。要解码 secret 中的值,请使用类似如下的命令:

$ echo 'dXNlcl9uYW1l' | base64 --decode
user_name

7.4.3. 部署并启动代理应用程序

创建代理应用程序后,您需要进行部署。部署应用程序创建 Pod 以便代理运行。

步骤

  1. 在 OpenShift Container Platform Web 控制台中,单击 Deployments
  2. broker-amq 应用程序。
  3. 单击 Deploy

    注意

    如果应用程序没有部署,您可以点击 Events 选项卡来检查配置。如果错误不正确,请单击 Actions 按钮来编辑部署配置。

  4. 部署代理应用程序后,检查代理 Pod 的当前状态。

    1. DeploymentConfig
    2. broker-amq Pod,然后点 Logs 选项卡验证代理的状态。您应该会看到之前通过应用程序模板创建的队列。

      如果日志显示:

      • 代理正在运行,跳至此步骤的第 9 步。
      • 代理日志没有加载,Pod 状态会显示 ErrImagePullImagePullBackOff,您的部署配置无法直接从红帽容器注册表中提取指定的代理镜像。在这种情况下,请继续这个过程的第 5 步。
  5. 要准备 Pod 用于安装代理容器镜像,请将正在运行的代理数量扩展为 0。

    1. DeploymentConfigsbroker-amq
    2. ActionsEdit DeploymentConfig
    3. 在部署配置 .yaml 文件中,将 replicas 属性的值设置为 0。
    4. 点击 Save
    5. pod 重启,零代理实例正在运行。
  6. 安装最新的代理容器镜像。

    1. 在 Web 浏览器中,导航到 Red Hat Container Catalog
    2. 在搜索框中输入 AMQ Broker。点 Search
    3. 根据下表中的信息,选择镜像存储库。

      平台(存档)容器镜像名称仓库名称

      OpenShift Container Platform(amd64)

      用于 RHEL 8 的 AMQ Broker 或 AMQ Broker

      amq7/amq-broker 或 amq7/amq-broker-rhel8

      IBM Z 上的 OpenShift Container Platform(s390x)

      OpenJDK 11 上的 RHEL 8 AMQ Broker

      amq7/amq-broker-openjdk-11-rhel8

      IBM Power Systems(ppc64le)上的 OpenShift Container Platform

      OpenJDK 11 上的 RHEL 8 AMQ Broker

      amq7/amq-broker-openjdk-11-rhel8

      例如,对于 OpenShift Container Platform 代理容器镜像,点 AMQ Broker。这时将打开 amq7/amq-broker 存储库,最新的镜像版本会自动选择。如果要更改为较早的镜像版本,请单击 Tags 选项卡,然后选择另一个版本标签。

    4. Get this Image 选项卡。
    5. 在通过 注册表令牌进行身份验证 后,请查看 Using OpenShift secrets 部分中的页面说明。以下说明描述了如何将引用添加到代理镜像,以及与 Red Hat Container Registry 中用于身份验证的帐户关联的镜像 pull secret 名称到 Pod 部署配置文件中。

      例如,要在 amq-demo 项目命名空间中引用 broker-amq 部署配置中的代理镜像和 pull secret,请包括类似如下的行:

      apiVersion: apps.openshift.io/v1
      kind: DeploymentConfig
      ..
      metadata:
        name: broker-amq
        namespace: amq-demo
      ..
        spec:
          containers:
              name: broker-amq
              image: 'registry.redhat.io/amq7/amq-broker:7.8'
          ..
          imagePullSecrets:
            - name: {PULL-SECRET-NAME}
    6. 点击 Save
  7. 将最新的代理镜像版本导入到项目命名空间中。例如:

    $ oc import-image amq7/amq-broker:7.8 --from=registry.redhat.io/amq7/amq-broker --confirm
  8. 按照前面所述,再次编辑 broker-amq 部署配置。将 replicas 属性的值重新设置为其原始值。

    代理 Pod 重启,所有正在运行的代理都引用新的代理镜像。

  9. 点击 Terminal 选项卡访问可以启动代理的 shell,并使用 CLI 来测试发送和接收消息。

    sh-4.2$ ./broker/bin/artemis run
    sh-4.2$ ./broker/bin/artemis producer --destination queue://demoQueue
    Producer ActiveMQQueue[demoQueue], thread=0 Started to calculate elapsed time ...
    
    Producer ActiveMQQueue[demoQueue], thread=0 Produced: 1000 messages
    Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in second : 4 s
    Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in milli second : 4584 milli seconds
    sh-4.2$ ./broker/bin/artemis consumer --destination queue://demoQueue
    Consumer:: filter = null
    Consumer ActiveMQQueue[demoQueue], thread=0 wait until 1000 messages are consumed
    Received 1000
    Consumer ActiveMQQueue[demoQueue], thread=0 Consumed: 1000 messages
    Consumer ActiveMQQueue[demoQueue], thread=0 Consumer thread finished

    另外,也可使用 OpenShift 客户端使用 Pod 名称访问 shell,如下例中所示。

    // Get the Pod names and internal IP Addresses
    $ oc get pods -o wide
    
    // Access a broker Pod by name
    $ oc rsh <broker-pod-name>

7.5. 将外部客户端连接到基于模板的代理部署

本节论述了如何配置 SSL,将 OpenShift Container Platform 外部客户端的连接启用使用应用程序模板部署的代理。

7.5.1. 配置 SSL

对于允许 OpenShift Container Platform 之外的连接的最小 SSL 配置,AMQ Broker 需要代理密钥存储、客户端密钥存储,以及包含代理密钥存储的客户端信任存储。代理密钥存储也可用于为 OpenShift Container Platform 镜像上的 AMQ Broker 创建 secret,该镜像添加到服务帐户。

以下示例命令使用 Java KeyTool(Java Development Kit 中包含的软件包)生成必要的证书和存储。

有关部署支持 SSL 的代理实例的完整示例,请参阅使用 SSL 部署基本代理

步骤

  1. 为代理密钥存储生成自签名证书:

    $ keytool -genkey -alias broker -keyalg RSA -keystore broker.ks
  2. 导出证书以便可以与客户端共享:

    $ keytool -export -alias broker -keystore broker.ks -file broker_cert
  3. 为客户端密钥存储生成自签名证书:

    $ keytool -genkey -alias client -keyalg RSA -keystore client.ks
  4. 创建导入代理证书的客户端信任存储:

    $ keytool -import -alias broker -keystore client.ts -file broker_cert
  5. 从密钥存储导出客户端的证书:

    $ keytool -export -alias client -keystore client.ks -file client_cert
  6. 将客户端的导出证书导入到代理 SERVER truststore 中:

    $ keytool -import -alias client -keystore broker.ts -file client_cert

7.5.2. 生成 AMQ Broker secret

代理密钥存储可用于为命名空间生成 secret,该 secret 也会添加到服务帐户中,以便应用能够被授权。

步骤

  • 在命令行中运行以下命令:

    $ oc create secret generic <secret-name> --from-file=<broker-keystore> --from-file=<broker-truststore>
    $ oc secrets link sa/<service-account-name> secret/<secret-name>

7.5.3. 创建 SSL 路由

要在 OpenShift 集群外部启用客户端应用程序以附加到代理,您需要为代理 Pod 创建 SSL 路由。您只能向外部客户端公开支持 SSL 的路由,因为 OpenShift 路由器需要 Server Name Indication(SNI)向正确的服务发送流量。

当您使用应用程序模板在 OpenShift Container Platform 上部署代理时,您可以使用 AMQ_PROTOCOL 模板参数在以逗号分隔的列表中指定代理使用的消息传递协议。可用选项包括 amqpmqttOpenwirestomphornetq。如果没有指定任何协议,则所有协议都可用。

对于代理使用的每个消息传递协议,OpenShift 会在代理 Pod 上公开专用端口。另外,OpenShift 会自动创建 多个协议端口。OpenShift 外部的客户端应用程序始终使用多个,所有协议端口都连接到代理,无论它们正在使用的支持的协议是什么。

与所有协议端口的连接都是通过 OpenShift 自动创建的服务,以及您创建的 SSL 路由。代理 Pod 中的无头服务提供了对其他协议特定端口的访问,该端口没有他们自己的服务和路由,供客户端直接访问。

OpenShift 为各种 AMQ Broker 传输协议公开的端口显示在下表中。代理侦听 OpenShift 集群中流量的非 SSL 端口。如果您使用基于 SSL 的(即 *-ssl.yaml)模板创建部署,代理会侦听来自 OpenShift 之外的客户端流量的 SSL 启用端口。

表 7.2. AMQ Broker 传输协议的默认端口
AMQ Broker 传输协议默认端口

所有协议(OpenWire、AMQP、STOMP、MQTT 和 HornetQ)

61616

所有协议 -SSL(OpenWire AMQP、STOMP、MQTT 和 HornetQ)

61617

AMQP

5672

AMQP(SSL)

5671

MQTT

1883

MQTT (SSL)

8883

STOMP

61613

STOMP(SSL)

61612

以下是在代理 Pod 上创建 SSL 路由时需要注意的一些事项:

  • 当您创建路由时,请将 TLS 终止 设置为 Passthrough 转发到 AMQ Broker 的所有通信,而无需 OpenShift 路由器解密并重新发送它。

    注意

    常规 HTTP 流量不需要 TLS 透传路由,因为 OpenShift 路由器使用 HAProxy,即 HTTP 代理。

  • 当为 SSL 连接设置代理 URL 时,外部代理客户端必须指定 OpenShift 路由器端口(443)。当客户端连接指定 OpenShift 路由器端口时,路由器决定了客户端流量应定向到的代理 Pod 上的相应端口。

    注意

    默认情况下,OpenShift 路由器使用端口 443。但是,根据为 ROUTER_SERVICE_HTTPS_PORT 环境变量指定的值,路由器可能会配置为使用不同的端口号。如需更多信息,请参阅 OpenShift Container Platform 路由

  • 在 Pod 重启或升级时,在代理 URL 中包含故障转移协议会保留客户端连接,或者在路由器上发生中断。

    前面的两个设置都如下例所示。

    ...
    factory.setBrokerURL("failover://ssl://<broker-pod-route-name>:443");
    ...

其他资源

第 8 章 基于模板的代理部署示例

先决条件

  • 这些过程假设了与 OpenShift Container Platform 入门 中创建的类似 OpenShift Container Platform 实例。
  • 在 AMQ Broker 应用程序模板中,AMQ_USER、AMQ_PASSWORD、AMQ_CLUSTER_USER、AMQ_CLUSTER_PASSWORD、AMQ_TRUSTSTORE_PASSWORD 和 AMQ_KEYSTORE_PASSWORD 环境变量存储在 secret 中。要在以下任何教程中部署模板时,了解更多有关使用和修改这些环境变量的信息,请参阅关于敏感凭证

以下流程描述了如何使用应用程序模板创建各种代理部署。

8.1. 使用 SSL 部署基本代理

部署具有临时并支持 SSL 的基本代理。

8.1.1. 部署镜像和模板

先决条件

步骤

  1. 导航到 OpenShift Web 控制台并登录。
  2. 选择 amq-demo 项目空间。
  3. Add to Project > Browse Catalog 来列出所有默认镜像流和模板。
  4. 使用 Filter 搜索栏,将列表限制为与 amq 匹配的列表。您可能需要点击 See all 来显示所需的应用程序模板。
  5. 选择标记为 Red Hat AMQ Broker 7.8(使用 SSL)amq-broker-78-ssl 模板。
  6. 在配置中设置以下值,并点 Create

    表 8.1. 模板示例
    环境变量显示名称订阅价值描述

    AMQ_PROTOCOL

    AMQ 协议

    openwire,amqp,stomp,mqtt,hornetq

    代理接受的协议

    AMQ_QUEUES

    队列

    demoQueue

    创建名为 demoQueue 的任何广播队列

    AMQ_ADDRESSES

    地址

    demoTopic

    创建名为 demoTopic 的地址(或主题)。默认情况下,此地址没有分配路由类型。

    AMQ_USER

    AMQ Username

    amq-demo-user

    客户端使用的用户名

    AMQ_PASSWORD

    AMQ 密码

    password

    客户端使用的密码及用户名

    AMQ_TRUSTSTORE

    trust Store Filename

    broker.ts

    SSL 信任存储文件名

    AMQ_TRUSTSTORE_PASSWORD

    信任存储密码

    password

    创建 Truststore 时使用的密码

    AMQ_KEYSTORE

    AMQ Keystore Filename

    broker.ks

    SSL 密钥存储文件名

    AMQ_KEYSTORE_PASSWORD

    AMQ Keystore 密码

    password

    创建密钥存储时使用的密码

8.1.2. 部署应用程序

创建应用程序后,将其部署到 Pod 并启动代理。

步骤

  1. 在 OpenShift Container Platform Web 控制台中,单击 Deployments
  2. broker-amq 部署。
  3. 单击 Deploy 以部署应用。
  4. 点代理 Pod,然后点 Logs 选项卡验证代理的状态。

    如果代理日志没有加载,Pod 状态显示 ErrImagePullImagePullBackOff,您的部署配置无法直接从红帽容器注册表中提取指定的代理镜像。在这种情况下,编辑部署配置以引用与 Red Hat Container Registry 中用于身份验证的帐户关联的正确代理镜像名称和镜像 pull secret 名称。然后,您可以导入代理镜像并启动代理。为此,请完成与部署和启动 代理应用程序 类似的步骤。

8.1.3. 创建路由

为代理创建一个路由,以便 OpenShift Container Platform 之外的客户端可以使用 SSL 进行连接。默认情况下,安全代理协议可通过 61617/TCP 端口获得。另外,代理 Pod 中公开了 SSL 和非 SSL 端口,供代理支持的每个消息传递协议。但是,外部客户端无法直接连接到代理中的这些端口。取而代之,外部客户端通过 Openshift 路由器连接到 OpenShift,它会决定如何将流量转发到代理 Pod 上的相应端口。

注意

如果将部署扩展到集群中的多个代理,您必须手动创建一个服务和每个代理的 Route,然后使用各个 Service-and-Route 组合将给定客户端定向到给定的代理或代理列表。有关配置多个服务和路由以将集群代理连接到他们自己的 AMQ Broker 管理控制台的实例,请参阅为 AMQ Broker 管理控制台创建路由

先决条件

  • 在创建 SSL 路由前,您应了解外部客户端如何使用此路由连接到代理。如需更多信息,请参阅创建 SSL 路由

步骤

  1. 单击 Servicesbroker-amq-tcp-ssl
  2. 点击 ActionsCreate a route
  3. 要显示 TLS 参数,请选择 Secure route 复选框。
  4. TLS 终止 下拉菜单中选择 Passthrough。此选择将所有通信转发到 AMQ Broker,无需 OpenShift 路由器解密并重新发送它。
  5. 要查看路由,请点击 Routes。例如:

    https://broker-amq-tcp-amq-demo.router.default.svc.cluster.local

外部客户端将使用此主机名通过 SNI 使用 SSL 连接代理。

其他资源

8.2. 使用持久性和 SSL 部署基本代理

部署支持 SSL 的持久代理。当代理需要持久性时,代理被部署为 StatefulSet,并通过持久性卷声明将消息传递数据存储在与代理 Pod 关联的持久性卷中。创建代理 Pod 时,它会在关闭 Pod 时保留存储,或者 Pod 意外关闭。此配置意味着消息不会丢失,因为它们使用标准部署。

先决条件

8.2.1. 部署镜像和模板

步骤

  1. 导航到 OpenShift Web 控制台并登录。
  2. 选择 amq-demo 项目空间。
  3. 点击 Add to ProjectBrowse catalog,以列出所有默认镜像流和模板。
  4. 使用 Filter 搜索栏,将列表限制为与 amq 匹配的列表。您可能需要点击 See all 来显示所需的应用程序模板。
  5. 选择 amq-broker-78-persistence-ssl 模板,该模板已被标记 Red Hat AMQ Broker 7.8(Persistence),使用 SSL
  6. 在配置中设置以下值,然后单击 创建

    表 8.2. 模板示例
    环境变量显示名称订阅价值描述

    AMQ_PROTOCOL

    AMQ 协议

    openwire,amqp,stomp,mqtt,hornetq

    代理接受的协议

    AMQ_QUEUES

    队列

    demoQueue

    创建名为 demoQueue 的任何广播队列

    AMQ_ADDRESSES

    地址

    demoTopic

    创建名为 demoTopic 的地址(或主题)。默认情况下,此地址没有分配路由类型。

    VOLUME_CAPACITY

    AMQ 卷大小

    1Gi

    为日志创建的持久性卷大小

    AMQ_USER

    AMQ Username

    amq-demo-user

    客户端使用的用户名

    AMQ_PASSWORD

    AMQ 密码

    password

    客户端使用的密码及用户名

    AMQ_TRUSTSTORE

    trust Store Filename

    broker.ts

    SSL 信任存储文件名

    AMQ_TRUSTSTORE_PASSWORD

    信任存储密码

    password

    创建 Truststore 时使用的密码

    AMQ_KEYSTORE

    AMQ Keystore Filename

    broker.ks

    SSL 密钥存储文件名

    AMQ_KEYSTORE_PASSWORD

    AMQ Keystore 密码

    password

    创建密钥存储时使用的密码

8.2.2. 部署应用程序

创建应用程序后,需要部署它。部署应用程序会创建一个 Pod 并启动代理。

步骤

  1. 在 OpenShift Container Platform web 控制台中点 StatefulSets
  2. broker-amq 部署。
  3. 单击 Deploy 以部署应用。
  4. 点代理 Pod,然后点 Logs 选项卡验证代理的状态。您应该会看到通过模板创建的队列。

    如果代理日志没有加载,Pod 状态会显示 ErrImagePullImagePullBackOff,您的配置无法直接从红帽容器注册表中提取指定的代理镜像。在这种情况下,编辑部署配置以引用与 Red Hat Container Registry 中用于身份验证的帐户关联的正确代理镜像名称和镜像 pull secret 名称。然后,您可以导入代理镜像并启动代理。为此,请完成与部署和启动 代理应用程序 类似的步骤。

  5. Terminal 选项卡访问可以使用 CLI 发送一些消息的 shell。

    sh-4.2$ ./broker/bin/artemis producer --destination queue://demoQueue
    Producer ActiveMQQueue[demoQueue], thread=0 Started to calculate elapsed time ...
    
    Producer ActiveMQQueue[demoQueue], thread=0 Produced: 1000 messages
    Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in second : 4 s
    Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in milli second : 4584 milli seconds
    
    sh-4.2$ ./broker/bin/artemis consumer  --destination queue://demoQueue
    Consumer:: filter = null
    Consumer ActiveMQQueue[demoQueue], thread=0 wait until 1000 messages are consumed
    Received 1000
    Consumer ActiveMQQueue[demoQueue], thread=0 Consumed: 1000 messages
    Consumer ActiveMQQueue[demoQueue], thread=0 Consumer thread finished

    另外,也可使用 OpenShift 客户端使用 Pod 名称访问 shell,如下例中所示。

    // Get the Pod names and internal IP Addresses
    oc get pods -o wide
    
    // Access a broker Pod by name
    oc rsh <broker-pod-name>
  6. 现在使用 oc 命令缩减代理。

    $ oc scale statefulset broker-amq --replicas=0
    statefulset "broker-amq" scaled

    您可以使用控制台检查 Pod 计数是否为 0

  7. 现在,将代理备份为 1

    $ oc scale statefulset broker-amq --replicas=1
    statefulset "broker-amq" scaled
  8. 使用终端再次消耗消息。例如:

    sh-4.2$ broker/bin/artemis consumer --destination queue://demoQueue
    Consumer:: filter = null
    Consumer ActiveMQQueue[demoQueue], thread=0 wait until 1000 messages are consumed
    Received 1000
    Consumer ActiveMQQueue[demoQueue], thread=0 Consumed: 1000 messages
    Consumer ActiveMQQueue[demoQueue], thread=0 Consumer thread finished

其他资源

  • 有关管理有状态应用程序的更多信息,请参阅 StatefulSets (外部)。

8.2.3. 创建路由

为代理创建一个路由,以便 OpenShift Container Platform 之外的客户端可以使用 SSL 进行连接。默认情况下,代理协议可通过 61617/TCP 端口获得。

注意

如果将部署扩展到集群中的多个代理,您必须手动创建一个服务和每个代理的 Route,然后使用各个 Service-and-Route 组合将给定客户端定向到给定的代理或代理列表。有关配置多个服务和路由以将集群代理连接到他们自己的 AMQ Broker 管理控制台的实例,请参阅为 AMQ Broker 管理控制台创建路由

先决条件

  • 在创建 SSL 路由前,您应了解外部客户端如何使用此路由连接到代理。如需更多信息,请参阅创建 SSL 路由

步骤

  1. 单击 Servicesbroker-amq-tcp-ssl
  2. 点击 ActionsCreate a route
  3. 要显示 TLS 参数,请选择 Secure route 复选框。
  4. TLS 终止 下拉菜单中选择 Passthrough。此选择将所有通信转发到 AMQ Broker,无需 OpenShift 路由器解密并重新发送它。
  5. 要查看路由,请点击 Routes。例如:

    https://broker-amq-tcp-amq-demo.router.default.svc.cluster.local

外部客户端将使用此主机名通过 SNI 使用 SSL 连接代理。

其他资源

8.3. 部署一组集群代理

部署一组集群代理,每个代理在其自己的 Pod 中运行。

8.3.1. 分发消息

消息分发配置为使用 ON_DEMAND。这意味着,当消息到达集群代理时,消息会以轮循方式分发给具有使用者的任何代理。

此消息分发策略可以保护在特定代理上卡住的消息,而使用者则通过 OpenShift 路由器直接或通过 OpenShift 路由器连接到不同的代理。

默认情况下,重新发布延迟为零。如果消息位于没有消费者的队列中,它将重新分发到另一个代理。

注意

启用重新分发后,消息可以按顺序发送。

8.3.2. 部署镜像和模板

先决条件

步骤

  1. 导航到 OpenShift Web 控制台并登录。
  2. 选择 amq-demo 项目空间。
  3. 点击 Add to Project > Browse catalog,以列出所有默认镜像流和模板
  4. 使用 Filter 搜索栏,将列表限制为与 amq 匹配的列表。点 See all 显示所需的应用程序模板。
  5. 选择 amq-broker-78-persistence-clustered 模板,该模板标记为 Red Hat AMQ Broker 7.8(无 SSL,集群)。
  6. 在配置中设置以下值,然后单击 创建

    表 8.3. 模板示例
    环境变量显示名称订阅价值描述

    AMQ_PROTOCOL

    AMQ 协议

    openwire,amqp,stomp,mqtt,hornetq

    代理接受的协议

    AMQ_QUEUES

    队列

    demoQueue

    创建名为 demoQueue 的任何广播队列

    AMQ_ADDRESSES

    地址

    demoTopic

    创建名为 demoTopic 的地址(或主题)。默认情况下,此地址没有分配路由类型。

    VOLUME_CAPACITY

    AMQ 卷大小

    1Gi

    为日志创建的持久性卷大小

    AMQ_CLUSTERED

    clustered

    true

    这需要 true 以确保代理集群

    AMQ_CLUSTER_USER

    集群用户

    generated

    代理用来相互连接的用户名

    AMQ_CLUSTER_PASSWORD

    集群密码

    generated

    代理用来相互连接的密码

    AMQ_USER

    AMQ Username

    amq-demo-user

    客户端使用的用户名

    AMQ_PASSWORD

    AMQ 密码

    password

    客户端使用的密码及用户名

8.3.3. 部署应用程序

创建应用程序后,需要部署它。部署应用程序会创建一个 Pod 并启动代理。

步骤

  1. 在 OpenShift Container Platform web 控制台中点 StatefulSets
  2. broker-amq 部署。
  3. 单击 Deploy 以部署应用。

    注意

    集群模板的默认副本数为 0。您应该不会看到任何 Pod。

  4. 将 Pod 扩展至三个,以创建代理集群。

    $ oc scale statefulset broker-amq --replicas=3
    statefulset "broker-amq" scaled
  5. 检查是否有三个 Pod 正在运行。

    $ oc get pods
    NAME           READY     STATUS    RESTARTS   AGE
    broker-amq-0   1/1       Running   0          33m
    broker-amq-1   1/1       Running   0          33m
    broker-amq-2   1/1       Running   0          29m
  6. 如果 Pod 状态显示 ErrImagePullImagePullBackOff,您的部署无法直接从 Red Hat Container Registry 中拉取指定的代理镜像。在这种情况下,编辑 StatefulSet 来引用与 Red Hat Container Registry 中用于身份验证的帐户关联的正确代理镜像名称和镜像 pull secret 名称。然后,您可以导入代理镜像并启动代理。为此,请完成与部署和启动 代理应用程序 类似的步骤。
  7. 通过检查日志,验证代理是否已通过新 Pod 集群。

    $ oc logs broker-amq-2

    这会显示新代理的日志,以及代理之间创建的集群桥接条目:

    2018-08-29 07:43:55,779 INFO  [org.apache.activemq.artemis.core.server] AMQ221027: Bridge ClusterConnectionBridge@1b0e9e9d [name=$.artemis.internal.sf.my-cluster.4333c830-ab5f-11e8-afb8-0a580a82006e, queue=QueueImpl[name=$.artemis.internal.sf.my-cluster.4333c830-ab5f-11e8-afb8-0a580a82006e, postOffice=PostOfficeImpl [server=ActiveMQServerImpl::serverUUID=9cedb69d-ab5e-11e8-87a4-0a580a82006c], temp=false]@5e0c0398 targetConnector=ServerLocatorImpl (identity=(Cluster-connection-bridge::ClusterConnectionBridge@1b0e9e9d [name=$.artemis.internal.sf.my-cluster.4333c830-ab5f-11e8-afb8-0a580a82006e, queue=QueueImpl[name=$.artemis.internal.sf.my-cluster.4333c830-ab5f-11e8-afb8-0a580a82006e, postOffice=PostOfficeImpl [server=ActiveMQServerImpl::serverUUID=9cedb69d-ab5e-11e8-87a4-0a580a82006c], temp=false]@5e0c0398 targetConnector=ServerLocatorImpl [initialConnectors=[TransportConfiguration(name=artemis, factory=org-apache-activemq-artemis-core-remoting-impl-netty-NettyConnectorFactory) ?port=61616&host=10-130-0-110], discoveryGroupConfiguration=null]]::ClusterConnectionImpl@806813022[nodeUUID=9cedb69d-ab5e-11e8-87a4-0a580a82006c, connector=TransportConfiguration(name=artemis, factory=org-apache-activemq-artemis-core-remoting-impl-netty-NettyConnectorFactory) ?port=61616&host=10-130-0-108, address=, server=ActiveMQServerImpl::serverUUID=9cedb69d-ab5e-11e8-87a4-0a580a82006c])) [initialConnectors=[TransportConfiguration(name=artemis, factory=org-apache-activemq-artemis-core-remoting-impl-netty-NettyConnectorFactory) ?port=61616&host=10-130-0-110], discoveryGroupConfiguration=null]] is connected

8.3.4. 为 AMQ Broker 管理控制台创建路由

默认情况下,集群模板不会公开 AMQ Broker 管理控制台。这是因为 OpenShift 代理在集群中的每个代理执行负载均衡,因此无法控制在给定时间连接哪些代理控制台。

以下示例演示了如何配置集群中的每个代理,以连接到自己的管理控制台实例。为此,您可以为集群中的每个代理 Pod 创建专用的 Service-and-Route 组合。

先决条件

步骤

  1. 使用 StatefulSet 选择器在 Pod 间选择,为集群中的每个 Pod 创建常规 Service。要做到这一点,以 .yaml 格式部署一个 Service 模板,如下所示:

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        description: 'Service for the management console of broker pod XXXX'
      labels:
        app: application2
        application: application2
        template: amq-broker-78-persistence-clustered
      name: amq2-amq-console-XXXX
      namespace: amq75-p-c-ssl-2
    spec:
      ports:
        - name: console-jolokia
          port: 8161
          protocol: TCP
          targetPort: 8161
      selector:
        deploymentConfig: application2-amq
        statefulset.kubernetes.io/pod-name: application2-amq-XXXX
      type: ClusterIP

    在前面的模板中,将 XXXX 替换为您要与该服务关联的代理 Pod 的 ordinal 值。例如,要将 Service 与集群中的第一个 Pod 关联,请将 XXXX 设为 0。要将服务与第二个 Pod 关联,请将 XXXX 设置为 1,以此类推。

    为集群中的每个代理 Pod 保存和部署模板实例。

    注意

    在上面显示的示例模板中,选择器使用 Kubernetes 定义的 Pod 名称。

  2. 为每个代理 Pod 创建一个路由,以便 AMQ Broker 管理控制台可以连接到 Pod。

    单击 RoutesCreate Route

    这会打开 Edit Route 页面。

    1. Services 下拉菜单中,选择之前创建的代理服务,将其与 Route 关联,例如 amq2-amq-console-0
    2. Target Port 设为 8161,为 AMQ Broker 管理控制台启用访问权限。
    3. 要显示 TLS 参数,请选择 Secure route 复选框。

      1. TLS 终止 下拉菜单中选择 Passthrough

        此选择将所有通信转发到 AMQ Broker,无需 OpenShift 路由器解密并重新发送它。

    4. Create

      当您创建与其中一个代理 Pod 关联的路由时,生成的 .yaml 文件包括类似如下的行:

      spec:
        host: amq2-amq-console-0-amq75-p-c-2.apps-ocp311.example.com
        port:
          targetPort: console-jolokia
        tls:
          termination: passthrough
        to:
          kind: Service
          name: amq2-amq-console-0
          weight: 100
        wildcardPolicy: None
  3. 要访问特定代理实例的管理控制台,请将上方显示 的主机 URL 复制到 Web 浏览器。

其他资源

8.4. 部署一组集群 SSL 代理

部署一组集群代理,其中每个代理在自有 Pod 中运行,并将代理配置为使用 SSL 接受连接。

8.4.1. 分发消息

消息分发配置为使用 ON_DEMAND。这意味着,当消息到达集群代理时,消息会以轮循方式分发给具有使用者的任何代理。

此消息分发策略可以保护在特定代理上卡住的消息,而使用者则通过 OpenShift 路由器直接或通过 OpenShift 路由器连接到不同的代理。

默认情况下,重新发布延迟为非零。如果消息位于没有消费者的队列中,它将重新分发到另一个代理。

注意

启用重新分发后,消息可以按顺序发送。

8.4.2. 部署镜像和模板

先决条件

步骤

  1. 导航到 OpenShift Web 控制台并登录。
  2. 选择 amq-demo 项目空间。
  3. Add to Project > Browse catalog,以列出所有默认镜像流和模板。
  4. 使用 Filter 搜索栏,将列表限制为与 amq 匹配的列表。点 See all 显示所需的应用程序模板。
  5. 选择 amq-broker-78-persistence-clustered-ssl 模板,该模板标记为 Red Hat AMQ Broker 7.8(SSL,集群)。
  6. 在配置中设置以下值,然后单击 创建

    表 8.4. 模板示例
    环境变量显示名称订阅价值描述

    AMQ_PROTOCOL

    AMQ 协议

    openwire,amqp,stomp,mqtt,hornetq

    代理接受的协议

    AMQ_QUEUES

    队列

    demoQueue

    创建名为 demoQueue 的任何广播队列

    AMQ_ADDRESSES

    地址

    demoTopic

    创建名为 demoTopic 的地址(或主题)。默认情况下,此地址没有分配路由类型。

    VOLUME_CAPACITY

    AMQ 卷大小

    1Gi

    为日志创建的持久性卷大小

    AMQ_CLUSTERED

    clustered

    true

    这需要 true 以确保代理集群

    AMQ_CLUSTER_USER

    集群用户

    generated

    代理用来相互连接的用户名

    AMQ_CLUSTER_PASSWORD

    集群密码

    generated

    代理用来相互连接的密码

    AMQ_USER

    AMQ Username

    amq-demo-user

    客户端使用的用户名

    AMQ_PASSWORD

    AMQ 密码

    password

    客户端使用的密码及用户名

    AMQ_TRUSTSTORE

    trust Store Filename

    broker.ts

    SSL 信任存储文件名

    AMQ_TRUSTSTORE_PASSWORD

    信任存储密码

    password

    创建 Truststore 时使用的密码

    AMQ_KEYSTORE

    AMQ Keystore Filename

    broker.ks

    SSL 密钥存储文件名

    AMQ_KEYSTORE_PASSWORD

    AMQ Keystore 密码

    password

    创建密钥存储时使用的密码

8.4.3. 部署应用程序

在创建应用后进行部署。部署应用程序会创建一个 Pod 并启动代理。

步骤

  1. 在 OpenShift Container Platform web 控制台中点 StatefulSets
  2. broker-amq 部署。
  3. 单击 Deploy 以部署应用。

    注意

    集群模板的默认副本数为 0, 因此您不会看到任何 Pod。

  4. 将 Pod 扩展至三个,以创建代理集群。

    $ oc scale statefulset broker-amq --replicas=3
    statefulset "broker-amq" scaled
  5. 检查是否有三个 Pod 正在运行。

    $ oc get pods
    NAME           READY     STATUS    RESTARTS   AGE
    broker-amq-0   1/1       Running   0          33m
    broker-amq-1   1/1       Running   0          33m
    broker-amq-2   1/1       Running   0          29m
  6. 如果 Pod 状态显示 ErrImagePullImagePullBackOff,您的部署无法直接从 Red Hat Container Registry 中拉取指定的代理镜像。在这种情况下,编辑 StatefulSet 来引用与 Red Hat Container Registry 中用于身份验证的帐户关联的正确代理镜像名称和镜像 pull secret 名称。然后,您可以导入代理镜像并启动代理。为此,请完成与 Deploy 中相似的步骤,并启动代理应用程序
  7. 通过检查日志,验证新 Pod 已集群代理。

    $ oc logs broker-amq-2

    这显示新代理的所有日志以及在代理器中创建的集群桥接条目,例如:

    2018-08-29 07:43:55,779 INFO  [org.apache.activemq.artemis.core.server] AMQ221027: Bridge ClusterConnectionBridge@1b0e9e9d [name=$.artemis.internal.sf.my-cluster.4333c830-ab5f-11e8-afb8-0a580a82006e, queue=QueueImpl[name=$.artemis.internal.sf.my-cluster.4333c830-ab5f-11e8-afb8-0a580a82006e, postOffice=PostOfficeImpl [server=ActiveMQServerImpl::serverUUID=9cedb69d-ab5e-11e8-87a4-0a580a82006c], temp=false]@5e0c0398 targetConnector=ServerLocatorImpl (identity=(Cluster-connection-bridge::ClusterConnectionBridge@1b0e9e9d [name=$.artemis.internal.sf.my-cluster.4333c830-ab5f-11e8-afb8-0a580a82006e, queue=QueueImpl[name=$.artemis.internal.sf.my-cluster.4333c830-ab5f-11e8-afb8-0a580a82006e, postOffice=PostOfficeImpl [server=ActiveMQServerImpl::serverUUID=9cedb69d-ab5e-11e8-87a4-0a580a82006c], temp=false]@5e0c0398 targetConnector=ServerLocatorImpl [initialConnectors=[TransportConfiguration(name=artemis, factory=org-apache-activemq-artemis-core-remoting-impl-netty-NettyConnectorFactory) ?port=61616&host=10-130-0-110], discoveryGroupConfiguration=null]]::ClusterConnectionImpl@806813022[nodeUUID=9cedb69d-ab5e-11e8-87a4-0a580a82006c, connector=TransportConfiguration(name=artemis, factory=org-apache-activemq-artemis-core-remoting-impl-netty-NettyConnectorFactory) ?port=61616&host=10-130-0-108, address=, server=ActiveMQServerImpl::serverUUID=9cedb69d-ab5e-11e8-87a4-0a580a82006c])) [initialConnectors=[TransportConfiguration(name=artemis, factory=org-apache-activemq-artemis-core-remoting-impl-netty-NettyConnectorFactory) ?port=61616&host=10-130-0-110], discoveryGroupConfiguration=null]] is connected

其他资源

8.5. 使用自定义配置部署代理

使用自定义配置部署代理。虽然可以使用模板来获取功能,但在需要时可以自定义代理配置。

先决条件

8.5.1. 部署镜像和模板

步骤

  1. 导航到 OpenShift Web 控制台并登录。
  2. 选择 amq-demo 项目空间。
  3. Add to Project > Browse catalog,以列出所有默认镜像流和模板。
  4. 使用 Filter 搜索栏,将结果限制为与 amq 匹配的结果。点 See all 显示所需的应用程序模板。
  5. 选择标记为 Red Hat AMQ Broker 7.8(Ephemeral, no SSL)amq-broker-78-custom 模板。
  6. 在配置中,使用您要使用的自定义配置更新 broker.xml。点 Create

    注意

    使用文本编辑器创建代理的 XML 配置。然后,在 broker.xml 字段中剪切和粘贴详情。

    注意

    OpenShift Container Platform 不使用 ConfigMap 对象来存储您在 broker.xml 字段中指定的自定义配置,因为此平台上部署的许多应用程序都很常见。相反,OpenShift 会在代理容器启动时将配置传送到独立文件前,将指定的配置临时存储在环境变量中。

8.5.2. 部署应用程序

创建应用程序后,需要部署它。部署应用程序会创建一个 Pod 并启动代理。

步骤

  1. 在 OpenShift Container Platform Web 控制台中,单击 Deployments
  2. broker-amq 部署
  3. 单击 Deploy 以部署应用。

8.6. 基本 SSL 客户端示例

实施一个客户端,它将利用 Qpid JMS 客户端,从配置为使用 SSL 的代理发送和接收消息。

先决条件

8.6.1. 配置客户端

创建一个示例客户端,可以进行更新以连接到 SSL 代理。以下流程基于 AMQ JMS 示例 构建。

步骤

  1. 在您的 /etc/hosts 文件中添加一个条目,将路由名称映射到 OpenShift 集群的 IP 地址:

    10.0.0.1 broker-amq-tcp-amq-demo.router.default.svc.cluster.local
  2. 更新 jndi.properties 配置文件,以使用之前创建的路由、信任存储和密钥存储,例如:

    connectionfactory.myFactoryLookup = amqps://broker-amq-tcp-amq-demo.router.default.svc.cluster.local:8443?transport.keyStoreLocation=<keystore-path>client.ks&transport.keyStorePassword=password&transport.trustStoreLocation=<truststore-path>/client.ts&transport.trustStorePassword=password&transport.verifyHost=false
  3. 更新 jndi.properties 配置文件,以使用之前创建的队列。

    queue.myDestinationLookup = demoQueue
  4. 执行发送者客户端以发送文本信息。
  5. 执行接收器客户端接收文本信息。您应该看到:

    Received message: Message Text!

8.7. 使用子域示例的外部客户端

通过节点端口公开一组集群代理,并使用核心 JMS 客户端与其连接。这可让客户端连接到使用 amq-broker-78-persistence-clustered-ssl 模板配置的一组代理。

8.7.1. 公开代理

配置代理,以便代理集群外部可用,并可直接连接到直接连接,绕过 OpenShift 路由器。这可以通过创建一个使用其自己的主机名公开每个 pod 的路由。

步骤

  1. Add to Project 下拉菜单中选择 导入 YAML/JSON
  2. 输入以下内容并点击 create。

    apiVersion: v1
    kind: Route
    metadata:
      labels:
        app: broker-amq
        application: broker-amq
      name: tcp-ssl
    spec:
      port:
        targetPort: ow-multi-ssl
      tls:
        termination: passthrough
      to:
        kind: Service
        name: broker-amq-headless
        weight: 100
      wildcardPolicy: Subdomain
      host: star.broker-ssl-amq-headless.amq-demo.svc
    注意

    此处的重要配置是 Subdomain 的通配符策略。这允许通过自己的主机名访问每个代理。

8.7.2. 连接客户端

创建一个示例客户端,可以进行更新以连接到 SSL 代理。此流程中基于 AMQ JMS 示例 构建的步骤。

步骤

  1. 在 /etc/hosts 文件中添加条目,将路由名称映射到代理的实际 IP 地址:

    10.0.0.1 broker-amq-0.broker-ssl-amq-headless.amq-demo.svc broker-amq-1.broker-ssl-amq-headless.amq-demo.svc broker-amq-2.broker-ssl-amq-headless.amq-demo.svc
  2. 更新 jndi.properties 配置文件,以使用之前创建的路由、信任存储和密钥存储,例如:

    connectionfactory.myFactoryLookup = amqps://broker-amq-0.broker-ssl-amq-headless.amq-demo.svc:443?transport.keyStoreLocation=/home/ataylor/projects/jboss-amq-7-broker-openshift-image/client.ks&transport.keyStorePassword=password&transport.trustStoreLocation=/home/ataylor/projects/jboss-amq-7-broker-openshift-image/client.ts&transport.trustStorePassword=password&transport.verifyHost=false
  3. 更新 jndi.properties 配置文件,以使用之前创建的队列。

    queue.myDestinationLookup = demoQueue
  4. 执行发送者客户端代码,以发送文本信息。
  5. 执行接收器客户端代码来接收文本信息。您应该看到:

    Received message: Message Text!

其他资源

  • 有关使用 AMQ JMS 客户端的更多信息,请参阅 AMQ JMS 示例

8.8. 使用端口绑定示例的外部客户端

通过 NodePort 公开一组集群代理,并使用核心 JMS 客户端与其连接。这可启用不支持 SNI 或 SSL 的客户端。它可用于使用 amq-broker-78-persistence-clustered 模板配置的集群。

8.8.1. 公开代理

配置代理,以便代理集群外部可用,并可直接连接到直接连接,绕过 OpenShift 路由器。这可以通过创建一个使用 NodePort 在集群间负载均衡的服务来实现。

步骤

  1. Add to Project 下拉菜单中选择 导入 YAML/JSON
  2. 输入以下内容并点击 create。

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        description: The broker's OpenWire port.
        service.alpha.openshift.io/dependencies: >-
          [{"name": "broker-amq-amqp", "kind": "Service"},{"name":
          "broker-amq-mqtt", "kind": "Service"},{"name": "broker-amq-stomp", "kind":
          "Service"}]
      creationTimestamp: '2018-08-29T14:46:33Z'
      labels:
        application: broker
        template: amq-broker-78-statefulset-clustered
      name: broker-external-tcp
      namespace: amq-demo
      resourceVersion: '2450312'
      selfLink: /api/v1/namespaces/amq-demo/services/broker-amq-tcp
      uid: 52631fa0-ab9a-11e8-9380-c280f77be0d0
    spec:
      externalTrafficPolicy: Cluster
      ports:
       -  nodePort: 30001
          port: 61616
          protocol: TCP
          targetPort: 61616
      selector:
        deploymentConfig: broker-amq
      sessionAffinity: None
      type: NodePort
    status:
      loadBalancer: {}
    注意

    NodePort 配置很重要。NodePort 是客户端访问代理的端口,类型是 NodePort

8.8.2. 连接客户端

使用 AMQ 代理 CLI 创建集群中代理的循环消费者。

步骤

  1. 在终端中,创建一个使用者,并将它附加到运行 OpenShift 的 IP 地址。

    artemis consumer --url tcp://<IP_ADDRESS>:30001 --message-count 100 --destination queue://demoQueue
  2. 重复步骤 1 两次,以启动两个消费者。

    注意

    现在,您应该有三个使用者在三个代理之间进行平衡。

  3. 创建制作者来发送消息。

    artemis producer --url tcp://<IP_ADDRESS>:30001 --message-count 300 --destination queue://demoQueue
  4. 验证各个消费者接收消息。

    Consumer:: filter = null
    Consumer ActiveMQQueue[demoQueue], thread=0 wait until 100 messages are consumed
    Consumer ActiveMQQueue[demoQueue], thread=0 Consumed: 100 messages
    Consumer ActiveMQQueue[demoQueue], thread=0 Consumer thread finished

第 9 章 升级基于模板的代理部署

以下流程演示了如何为基于应用程序模板的部署升级代理容器镜像。

注意
  • 要升级 OpenShift Container Platform 3.11 上的现有 AMQ Broker 部署以便在 OpenShift Container Platform 4.5 或更高版本中运行,您必须首先升级 OpenShift Container Platform 安装,然后执行与现有部署匹配的 AMQ Broker。要执行一个干净的 AMQ Broker 安装,请使用以下方法之一:

  • 该流程演示了如何在 次版本 间手动升级您的镜像规格(例如,从 7.x 升级到 7.y)。如果您在镜像规格中使用浮动标签,您的部署 会自动 拉取和使用新的 镜像版本(即 7.y -z),当它们从红帽可用时,只要 StatefulSet 或 DeploymentConfig 中的 imagePullPolicy 属性被设置为 Always

    例如,假设部署的 image 属性指定了 floating 标签 7.8。如果部署当前使用次版本 7.8-5,且一个新的次版本 7.8-6 包括在 registry 中,则您的部署会自动拉取并使用新的次版本。要使用新镜像,部署中的每个代理 Pod 会被重启。如果您的部署中有多个代理,则代理 Pod 会一次重启一个代理。

9.1. 升级非持久性代理部署

此流程演示了如何升级非持久性代理部署。OpenShift Container Platform 服务目录中的非持久性代理模板具有类似以下的标签:

  • Red Hat AMQ Broker 7.x(Ephemeral,没有 SSL)
  • Red Hat AMQ Broker 7.x(使用 SSL 临时)
  • Red Hat AMQ Broker 7.x(Custom Config、Ephemeral 和 no SSL)

先决条件

  • 从 AMQ Broker 7.3 开始,您可以使用新版本的红帽生态系统目录访问容器镜像。此新版本的注册表要求您成为经过身份验证的用户,然后才能访问镜像并将它们提取到 OpenShift 项目中。在执行本节中的步骤前,您必须首先完成 Red Hat Container Registry 身份验证 中描述的步骤。

步骤

  1. 导航到 OpenShift Container Platform Web 控制台并登录。
  2. 点您要升级非持久性代理部署的项目。
  3. 选择与代理部署对应的 DeploymentConfig(DC)。

    1. 在 OpenShift Container Platform 4.5 或更高版本中,点击 Workloads DeploymentConfig。
    2. 在 OpenShift Container Platform 3.11 中,点 ApplicationsDeployments。在您的代理部署中,点 Configuration 选项卡。
  4. Actions 菜单中,点 Edit DeploymentConfig (OpenShift Container Platform 4.5 或更高版本)或 Edit YAML (OpenShift Container Platform 3.11)。

    DeploymentConfig 的 YAML 标签会打开,在可编辑模式下带有 .yaml 文件。

  5. 编辑 image 属性,以指定最新的 AMQ Broker 7.8 容器镜像 registry.redhat.io/amq7/amq-broker:7.8
  6. 添加 imagePullSecrets 属性,以指定与 Red Hat Container Registry 中用于身份验证的帐户关联的镜像 pull secret。

    基于前两个步骤的更改在以下示例中显示:

    ...
    spec:
        containers:
            image: 'registry.redhat.io/amq7/amq-broker:7.8'
    ..
    imagePullSecrets:
      - name: {PULL-SECRET-NAME}
    注意

    在 AMQ Broker 中,容器镜像标签会在 1 中增加添加到红帽镜像 registry 的每个新版本的容器镜像,如 7.8-1、7.8-2 等。如果您指定了没有最终数字的标签名称(例如7.8 ),该标签被称为 浮动标签。当您指定浮动标签时,OpenShift Container Platform 会自动识别最新可用镜像(即带有最高最终数字的镜像标签),并使用此镜像来升级代理部署。

  7. 点击 Save

    如果红帽提供了比当前安装的代理镜像更新的代理镜像,OpenShift Container Platform 会升级您的代理部署。要做到这一点,OpenShift Container Platform 会停止现有代理 Pod,然后启动使用新镜像的新 Pod。

9.2. 升级持久代理部署

此流程演示了如何升级持久代理部署。OpenShift Container Platform 服务目录中的持久代理模板具有类似以下的标签:

  • Red Hat AMQ Broker 7.x(Persistence,集群,没有 SSL)
  • Red Hat AMQ Broker 7.x(使用 SSL 集群、集群)
  • Red Hat AMQ Broker 7.x(使用 SSL 的Persistence)

先决条件

  • 从 AMQ Broker 7.3 开始,您可以使用新版本的红帽生态系统目录访问容器镜像。此新版本的注册表要求您成为经过身份验证的用户,然后才能访问镜像并将它们提取到 OpenShift 项目中。在执行本节中的步骤前,您必须首先完成 Red Hat Container Registry 身份验证 中描述的步骤。

步骤

  1. 导航到 OpenShift Container Platform Web 控制台并登录。
  2. 点您要升级持久代理部署的项目。
  3. 选择与代理部署对应的 StatefulSet(SS)。

    1. 在 OpenShift Container Platform 4.5 或更高版本中,点 WorkloadsStatefulSets
    2. 在 OpenShift Container Platform 3.11 中,点 ApplicationsStatefulSets
  4. Actions 菜单中,点 Edit StatefulSet (OpenShift Container Platform 4.5 或更高版本)或 Edit YAML (OpenShift Container Platform 3.11)。

    StatefulSet 的 YAML 选项卡会打开,在可编辑模式下带有 .yaml 文件。

  5. 要准备您的代理部署进行升级,将部署缩减到零代理。

    1. 如果 replicas 属性目前设置为 1 或更高,则将其设置为 0。
    2. 点击 Save
  6. 当所有代理 Pod 都已关闭后,再次编辑 StatefulSet .yaml 文件。编辑 image 属性,以指定最新的 AMQ Broker 7.8 容器镜像 registry.redhat.io/amq7/amq-broker:7.8
  7. 添加 imagePullSecrets 属性,以指定与 Red Hat Container Registry 中用于身份验证的帐户关联的镜像 pull secret。

    基于前两个步骤的更改在以下示例中显示:

    ...
    spec:
        containers:
            image: 'registry.redhat.io/amq7/amq-broker:7.8'
    ..
    imagePullSecrets:
      - name: {PULL-SECRET-NAME}
  8. replicas 属性设置回原始值。
  9. 点击 Save

    如果红帽提供了比当前安装的代理镜像更新的代理镜像,OpenShift Container Platform 会升级您的代理部署。要做到这一点,OpenShift Container Platform 重启代理 Pod。

第 10 章 监控代理

10.1. 在 Fuse 控制台中查看代理

您可以将基于 Operator 的代理部署配置为使用 Fuse Console for OpenShift,而不使用 AMQ 管理控制台。适当配置了代理部署后,Fuse Console 会发现代理并将其显示在专用 Artemis 选项卡上。您可以查看您在 AMQ 管理控制台中执行的相同代理运行时数据。您还可以执行相同的基本管理操作,如创建地址和队列。

以下流程描述了如何为代理部署配置自定义资源(CR)实例,以便为 OpenShift 启用 Fuse 控制台来发现和显示部署中的代理。

重要

从 Fuse 控制台查看代理只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

先决条件

  • OpenShift 的 Fuse 控制台必须部署到 OCP 集群,或部署到该集群上的特定命名空间。如果您将控制台部署到特定命名空间,您的代理部署必须 位于同一命名空间中,以便控制台发现代理。否则,Fuse 控制台和要部署到同一 OCP 集群中的代理就足够了。如需有关在 OCP 上安装 Fuse Online 的更多信息,请参阅在 OpenShift Container Platform 上安装和操作 Fuse Online
  • 您必须已创建了代理部署。例如,要了解如何使用自定义资源(CR)实例创建基于 Operator 的基本部署,请参阅 第 3.4.1 节 “部署基本代理实例”

步骤

  1. 打开用于代理部署的 CR 实例。例如,基本部署的 CR 可能类似以下部署:

    apiVersion: broker.amq.io/v2alpha4
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.8.0
        deploymentPlan:
            size: 4
            image: registry.redhat.io/amq7/amq-broker:7.8
            ...
  2. deploymentPlan 部分中,添加 jolokiaAgentEnabledmanagementRBACEnabled 属性,并指定值,如下所示。

    apiVersion: broker.amq.io/v2alpha4
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
        version: 7.8.0
        deploymentPlan:
            size: 4
            image: registry.redhat.io/amq7/amq-broker:7.8
            ...
            jolokiaAgentEnabled: true
            managementRBACEnabled: false
    jolokiaAgentEnabled
    指定 Fuse 控制台是否可以发现和显示部署中代理的运行时数据。要使用 Fuse 控制台,请将值设为 true
    managementRBACEnabled

    指定是否为部署中的代理启用了基于角色的访问控制(RBAC)。您必须将 值设为 false 以使用 Fuse 控制台,因为 Fuse 控制台使用自己的基于角色的访问控制。

    重要

    如果将 managementRBACEnabled 的值设置为 false 来启用 Fuse 控制台的使用,则代理的管理 MBeans 不再需要授权。您不应该使用 AMQ 管理控制台,而 managementRBACEnabled 被设置为 false,因为这可能会将代理中的所有管理操作公开到未经授权的使用。

  3. 保存 CR 实例。
  4. 切换到您之前在其中创建代理部署的项目。

    $ oc project <project-name>
  5. 在命令行中应用更改。

    $ oc apply -f <path/to/custom-resource-instance>.yaml
  6. 在 Fuse Console 中,若要查看 Fuse 应用程序,请单击 Online 选项卡。若要查看正在运行的代理,请在左侧导航菜单中,单击 Artemis

其他资源

10.2. 使用 Prometheus 监控代理运行时指标

以下部分描述了如何在 OpenShift Container Platform 上为 AMQ Broker 配置 Prometheus 指标插件。您可以使用插件来监控和存储代理运行时指标。您还可以使用图形工具(如 Grafana)配置 Prometheus 插件收集的数据的更高级视觉化和仪表板。

注意

Prometheus 指标插件可让您以 Prometheus 格式 收集和导出代理指标。但是,红帽不支持 安装或配置 Prometheus 本身,也无法支持 Grafana 等视觉化工具。如果您需要安装、配置或运行 Prometheus 或 Grafana 的支持,请访问社区支持和文档等资源的产品网站。

10.2.1. 指标概述

要监控代理实例的健康和性能,您可以使用 AMQ Broker 的 Prometheus 插件监控和存储代理运行时指标。AMQ Broker Prometheus 插件将代理运行时指标导出到 Prometheus 格式,可让您使用 Prometheus 本身来视觉化和对数据运行查询。

您还可以使用图形工具(如 Grafana)为 Prometheus 插件收集的指标配置更高级的视觉化和仪表板。

下方描述了插件导出到 Prometheus 格式的指标。

代理指标

artemis_address_memory_usage
此代理上的所有地址用于内存消息的字节数。
artemis_address_memory_usage_percentage
此代理上的所有地址使用的内存作为 global-max-size 参数的百分比。
artemis_connection_count
连接到此代理的客户端数量。
artemis_total_connection_count
自从此代理启动以来,已连接到此代理的客户端数量。

地址指标

artemis_routed_message_count
路由到一个或多个队列绑定的消息数量。
artemis_unrouted_message_count
路由到任何队列绑定的消息数量。

队列指标

artemis_consumer_count
消耗来自给定队列的消息的客户端数量。
artemis_delivering_durable_message_count
给定队列当前发送给消费者的消息数量。
artemis_delivering_durable_persistent_size
给定队列当前发送到消费者的持久消息大小。
artemis_delivering_message_count
给定队列当前给消费者的消息数量。
artemis_delivering_persistent_size
给定队列当前给消费者的消息具有持久性大小。
artemis_durable_message_count
当前给定队列中的持久消息数量。这包括调度的、paged 和 in-delivery 消息。
artemis_durable_persistent_size
当前给定队列中的持久消息大小。这包括调度的、paged 和 in-delivery 消息。
artemis_messages_acknowledged
在创建队列后,从给定队列中确认的消息数量。
artemis_messages_added
在创建队列后,添加到给定队列中的消息数量。
artemis_message_count
当前在给定队列中的消息数量。这包括调度的、paged 和 in-delivery 消息。
artemis_messages_killed
在创建队列后,从给定队列中删除的消息数量。当消息超过配置的发送尝试数时,代理会终止一条消息。
artemis_messages_expired
自该队列创建以来,从给定队列中过期的消息数量。
artemis_persistent_size
当前给定队列中的所有消息(持久和不可中断)的持久性大小。这包括调度的、paged 和 in-delivery 消息。
artemis_scheduled_durable_message_count
给定队列中已调度的消息数量。
artemis_scheduled_durable_persistent_size
在给定队列中具有持久性的持久性、可调度的消息的大小。
artemis_scheduled_message_count
给定队列中调度的消息数量。
artemis_scheduled_persistent_size
在给定队列中调度的消息具有持久性大小。

对于以上未列出的高级代理指标,您可以通过聚合较低级别的指标来计算这些指标。例如,若要计算总消息数,您可以聚合来自代理部署中所有队列的 artemis_message_count 指标。

对于 AMQ Broker 的内部部署,托管代理的 Java 虚拟机(JVM)的指标也会导出到 Prometheus 格式。这不适用于在 OpenShift Container Platform 上部署 AMQ Broker。

10.2.2. 为正在运行的代理部署启用 Prometheus 插件

此流程演示了如何为给定部署中为代理 Pod 启用 Prometheus 插件。

先决条件

  • 您可以为使用应用程序模板创建的代理 Pod 或 AMQ Broker Operator 启用 Prometheus 插件。但是,部署的代理必须使用 AMQ Broker 7.5 或更高版本的代理容器镜像。有关确保代理部署使用最新的代理容器镜像的更多信息,请参阅 第 9 章 升级基于模板的代理部署

步骤

  1. 使用包含代理部署的项目的管理员特权登录到 OpenShift Container Platform Web 控制台。
  2. 在 web 控制台中,点击 HomeProjects (OpenShift Container Platform 4.5 或更高版本)或左上角的下拉列表(OpenShift Container Platform 3.11)。选择包含代理部署的项目。
  3. 要查看项目中的 StatefulSets 或 DeploymentConfig,请点击:

    1. 工作负载StatefulSetsWorkloadsDeploymentConfig (OpenShift Container Platform 4.5 或更高版本)。
    2. 应用程序StatefulSetApplicationsDeployments (OpenShift Container Platform 3.11)。
  4. 点与代理部署对应的 StatefulSet 或 DeploymentConfig。
  5. 要访问代理部署的环境变量,请点击 Environment 选项卡。
  6. 添加新环境变量 AMQ_ENABLE_METRICS_PLUGIN。将 变量的值设为 true

    设置 AMQ_ENABLE_METRICS_PLUGIN 环境变量时,OpenShift 会在 StatefulSet 或 DeploymentConfig 中重启每个代理 Pod。当部署中有多个 Pod 时,OpenShift 会依次重启每个 Pod。当每个代理 Pod 重启时,该代理的 Prometheus 插件会启动来收集代理运行时指标。

注意

AMQ_ENABLE_METRICS_PLUGIN 环境变量默认包含在 AMQ Broker 7.5 或更高版本的应用程序模板中。要在基于模板的 新部署 中为每个代理启用插件,请确保在部署应用程序模板时将 AMQ_ENABLE_METRICS_PLUGIN 的值设置为 true

其他资源

10.2.3. 访问正在运行的代理 Pod 的 Prometheus 指标

此流程演示了如何访问正在运行的代理 Pod 的 Prometheus 指标。

先决条件

步骤

  1. 对于您要访问指标的代理 Pod,您需要识别之前创建的路由以将 Pod 连接到 AMQ Broker 管理控制台。Route 名称表单访问指标所需的 URL 部分。

    1. 点击 NetworkingRoutes (OpenShift Container Platform 4.5 或更高版本)或 ApplicationsRoutes (OpenShift Container Platform 3.11)。
    2. 对于您选择的代理 Pod,识别为将 Pod 连接到 AMQ Broker 管理控制台而创建的 Route。在 主机名 下,记下显示的完整 URL。例如:

      http://rte-console-access-pod1.openshiftdomain
  2. 要访问 Prometheus 指标,请在 Web 浏览器中输入之前记录的 Route 名称并附加 "/metrics"。例如:

    http://rte-console-access-pod1.openshiftdomain/metrics
注意

如果您的控制台配置没有使用 SSL,请在 URL 中指定 http。在本例中,主机名的 DNS 解析将流量定向到 OpenShift 路由器的端口 80。如果您的控制台配置使用 SSL,请在 URL 中指定 https。在本例中,您的浏览器默认为 OpenShift 路由器的端口 443。如果 OpenShift 路由器也使用端口 443 进行 SSL 流量,这启用了与控制台成功连接。

10.3. 使用 JMX 监控代理运行时数据

本例演示了如何使用 Jolokia REST 接口进行 JMX。

先决条件

步骤

  1. 获取正在运行的 pod 列表:

    $ oc get pods
    
    NAME                 READY     STATUS    RESTARTS   AGE
    broker-amq-1-ftqmk   1/1       Running   0          14d
  2. 运行 oc logs 命令:

    $ oc logs -f broker-amq-1-ftqmk
    
    Running /amq-broker-71-openshift image, version 1.3-5
    INFO: Loading '/opt/amq/bin/env'
    INFO: Using java '/usr/lib/jvm/java-1.8.0/bin/java'
    INFO: Starting in foreground, this is just for debugging purposes (stop process by pressing CTRL+C)
    ...
    INFO | Listening for connections at: tcp://broker-amq-1-ftqmk:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600
    INFO | Connector openwire started
    INFO | Starting OpenShift discovery agent for service broker-amq-tcp transport type tcp
    INFO | Network Connector DiscoveryNetworkConnector:NC:BrokerService[broker-amq-1-ftqmk] started
    INFO | Apache ActiveMQ 5.11.0.redhat-621084 (broker-amq-1-ftqmk, ID:broker-amq-1-ftqmk-41433-1491445582960-0:1) started
    INFO | For help or more information please see: http://activemq.apache.org
    WARN | Store limit is 102400 mb (current store usage is 0 mb). The data directory: /opt/amq/data/kahadb only has 9684 mb of usable space - resetting to maximum available disk space: 9684 mb
    WARN | Temporary Store limit is 51200 mb, whilst the temporary data directory: /opt/amq/data/broker-amq-1-ftqmk/tmp_storage only has 9684 mb of usable space - resetting to maximum available 9684 mb.
  3. 运行查询来监控 MaxConsumers 的代理:

    $ curl -k -u admin:admin http://console-broker.amq-demo.apps.example.com/console/jolokia/read/org.apache.activemq.artemis:broker=%22broker%22,component=addresses,address=%22TESTQUEUE%22,subcomponent=queues,routing-type=%22anycast%22,queue=%22TESTQUEUE%22/MaxConsumers
    
    {"request":{"mbean":"org.apache.activemq.artemis:address=\"TESTQUEUE\",broker=\"broker\",component=addresses,queue=\"TESTQUEUE\",routing-type=\"anycast\",subcomponent=queues","attribute":"MaxConsumers","type":"read"},"value":-1,"timestamp":1528297825,"status":200}

第 11 章 参考

11.1. 自定义资源配置参考

自定义资源定义(CRD)是 Operator 部署的自定义 OpenShift 对象的配置项模式。通过部署对应的自定义资源(CR)实例,您可以为 CRD 中显示的配置项指定值。

以下子部分详细介绍了可基于主代理和寻址 CRD 在自定义资源实例中设置的配置项目。

11.1.1. 代理自定义资源配置参考

基于主代理 CRD 的 CR 实例允许您配置 OpenShift 项目中部署的代理。下表描述了您可以在 CR 实例中配置的项目。

重要

任何您部署的对应自定义资源(CR)中都需要使用星号(*)标记的配置项目。如果没有为非必要项目显式指定值,则配置将使用默认值。

条目子条目描述和使用

adminUser*

 

连接到代理和管理控制台所需的管理员用户名。

如果没有指定值,则会自动生成并存储在 secret 中。默认 secret 名称的格式是 <custom_resource_name>-credentials-secret。例如: my-broker-deployment-credentials-secret

类型: string

示例 :my-user

默认值 :自动生成的随机值

adminPassword*

 

连接到代理和管理控制台所需的管理员密码。

如果没有指定值,则会自动生成并存储在 secret 中。默认 secret 名称的格式是 <custom_resource_name>-credentials-secret。例如: my-broker-deployment-credentials-secret

类型: string

示例 :my-password

默认值 :自动生成的随机值

deploymentPlan*

 

代理部署配置

 

image*

用于部署中每个代理的代理容器镜像的完整路径。

您不需要为 CR 中的镜像 显式指定值。占位符 的默认值表示 Operator 尚未决定要使用的适当镜像。

要了解 Operator 如何选择要使用的代理容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”

类型: string

示例 :registry.redhat.io/amq7/amq-broker@sha256:4d60775cd384067147ab105f41855b5a7af855c4d9cbef1d4dea566cbe214558

默认值: 占位符

 

size*

要在部署中创建的代理 Pod 数量。

如果您指定了 2 或更高的值,您的代理部署默认为集群。默认情况下,集群用户名和密码会自动生成并存储在与 adminUseradminPassword 相同的 secret 中。

键入: int

示例 :1

默认值 :2

 

requireLogin

指定是否需要登录凭证才能连接到代理。

键入 :布尔值

示例 :false

默认值为: true

 

persistenceEnabled

指定是否为部署中的每个代理 Pod 使用 journal 存储。如果设置为 true,则每个代理 Pod 都需要一个可用的持久性卷(PV),Operator 可使用持久性卷声明(PVC)声明它。

键入 :布尔值

示例 :false

默认值为: true

 

initImage

用于配置代理的 init 容器镜像。

您不需要在 CR 中明确指定 initImage 值,除非您要提供自定义镜像。

要了解 Operator 如何选择要使用的内置初始容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”

要了解如何 指定自定义 初始容器镜像,请参阅 第 4.5 节 “指定自定义初始容器镜像”

类型: string

示例 :registry.redhat.io/amq7/amq-broker-init-rhel7@sha256:f7482d07ecaa78d34c37981447536e6f73d4013ec0c64ff787161a75e4ca3567

默认值 :未指定

 

journalType

指定是否使用异步 I/O(AIO)或非阻塞 I/O(NIO)。

类型: string

示例 :aio

默认值: nio

 

messageMigration

当代理 Pod 因为失败或意图部署而关闭时,指定是否将消息迁移到代理集群中运行的另一代理 Pod。

键入 :布尔值

示例 :false

默认值为: true

 

resources.limits.cpu

部署中 pod 中运行的每个代理容器可以消耗的最大主机节点 CPU 数(以 millicore 为单位)。

类型: string

示例 :"500m"

默认值 :使用与 OpenShift Container Platform 版本相同的默认值。查阅集群管理员。

 

resources.limits.memory

主机节点内存的最大数量(以字节为单位),用于部署中的各个代理容器都可以消耗。支持字节表示法(例如:K、M、G)或二进制等同数(Ki, Mi, Gi)。

类型: string

示例 :"1024M"

默认值 :使用与 OpenShift Container Platform 版本相同的默认值。查阅集群管理员。

 

resources.requests.cpu

在部署显式请求中运行的每个代理容器,主机节点 CPU 的数量(以 millicore 为单位)。

类型: string

示例 :"250m"

默认值 :使用与 OpenShift Container Platform 版本相同的默认值。查阅集群管理员。

 

resources.requests.memory

主机节点内存量(以字节为单位),每个代理容器在部署中明确请求中运行的 Pod。支持字节表示法(例如:K、M、G)或二进制等同数(Ki, Mi, Gi)。

类型: string

示例 :"512M"

默认值 :使用与 OpenShift Container Platform 版本相同的默认值。查阅集群管理员。

 

storage.size

部署中的每个代理所需的持久性卷声明(PVC)大小(以字节为单位)。只有在将 persistenceEnabled 设置为 true 时,才会应用此属性。您指定的值 必须包含一个 单元。支持字节表示法(例如:K、M、G)或二进制等同数(Ki, Mi, Gi)。

类型: string

示例 :4Gi

默认值 :2Gi

 

jolokiaAgentEnabled

指定是否为部署中的代理启用 Jolokia JVM Agent。如果此属性的值设置为 true,Fuse Console 可以发现并显示代理运行时数据。

键入 :布尔值

示例: true

默认值为: false

 

managementRBACEnabled

指定是否为部署中的代理启用了基于角色的访问控制(RBAC)。要使用 Fuse 控制台,您必须 将值设为 false,因为 Fuse 控制台使用自己的基于角色的访问控制。

键入 :布尔值

示例 :false

默认值为: true

控制台(Console)

 

配置代理管理控制台.

 

expose

指定是否公开部署中每个代理的管理控制台端口。

键入 :布尔值

示例: true

默认值为: false

 

sslEnabled

指定是否在管理控制台端口上使用 SSL。

键入 :布尔值

示例: true

默认值为: false

 

sslSecret

存储 broker 键存储、信任存储和对应的密码的 secret(所有 Base64 编码)。如果您没有为 sslSecret 指定值,控制台会使用默认 secret 名称。默认 secret 名称是 <custom_resource_name>-console-secret 的形式。

类型: string

示例 :my-broker-deployment-console-secret

默认值 :未指定

 

useClientAuth

指定管理控制台是否需要客户端授权。

键入 :布尔值

示例: true

默认值为: false

acceptors.acceptor

 

单个接受或配置实例。

 

name*

接受人的名称。

类型: string

示例 :my-acceptor

默认值 :Not applicable

 

端口

要用于接收器实例的端口号。

键入: int

示例 :5672

默认值 :61626 为您定义的第一个接受者。然后,对于您定义的每个后续接受者,默认值是 10。

 

协议

在接受或实例上要启用的消息传递协议。

类型: string

示例 :amqp,core

默认值: all

 

sslEnabled

指定是否在接收器端口上启用 SSL。如果设置为 true,请查看在 sslSecret 中指定的 TLS/SSL 所需的凭证的 secret 名称。

键入 :布尔值

示例: true

默认值为: false

 

sslSecret

存储 broker 键存储、信任存储和对应的密码的 secret(所有 Base64 编码)。

如果您没有为 sslSecret 指定自定义 secret 名称,接受者会假定默认 secret 名称。默认 secret 名称的格式是 <custom_resource_name>-<acceptor_name>-secret

即使接受者假定默认名称,您也必须自行创建此 secret。

类型: string

示例 :my-broker-deployment-my-acceptor-secret

默认值:<custom_resource_name>-<acceptor_name>-secret

 

enabledCipherSuites

用于 TLS/SSL 通信的以逗号分隔的密码套件列表。

指定客户端应用程序所支持的最安全密码套件。如果您使用以逗号分隔的列表来指定代理和客户端通用的一组密码套件,或者您没有指定任何密码套件,代理和客户端会相互协商要使用的密码套件。如果您不知道需要指定的密码套件,建议您首先与以 debug 模式运行的客户端建立 broker-client 连接,以验证对代理和客户端通用的密码套件。然后,在代理上配置 enabledCipherSuites

类型: string

默认值 :未指定

 

enabledProtocols

用于 TLS/SSL 通信的以逗号分隔的协议列表。

类型: string

示例 :TLSv1,TLSv1.1,TLSv1.2

默认值 :未指定

 

needClientAuth

指定代理是否告知客户端在接受者需要双向 TLS。此属性覆盖 wantClientAuth

键入 :布尔值

示例: true

默认值 :未指定

 

wantClientAuth

指定代理是否告知客户端在接受者上 请求 双向 TLS,但不强制要求。此属性由 needClientAuth 覆盖。

键入 :布尔值

示例: true

默认值 :未指定

 

verifyHost

指定是否将客户端证书的通用名称(CN)与主机名进行比较,以验证它们是否匹配。这个选项只适用于双向 TLS。

键入 :布尔值

示例: true

默认值 :未指定

 

sslProvider

指定 SSL 提供程序是 JDK 还是 OPENSSL。

类型: string

示例 :OPENSSL

默认值 :JDK

 

sniHost

与传入连接上的 server_name 扩展匹配的正则表达式。如果名称不匹配,则拒绝与接受者的连接。

类型: string

示例 : some_regular_expression

默认值 :未指定

 

expose

指定是否向 OpenShift Container Platform 外部的客户端公开接受者。

当您向 OpenShift 外部的客户端公开接受器时,Operator 会自动为部署中的每个代理 Pod 创建专用的服务和路由。

键入 :布尔值

示例: true

默认值为: false

 

anycastPrefix

客户端用来指定应使用任何广播 路由 类型的前缀。

类型: string

示例: jms.queue

默认值 :未指定

 

multicastPrefix

客户端使用前缀来指定应该使用 多播路由 类型。

类型: string

示例 :/topic/

默认值 :未指定

 

connectionsAllowed

接受者允许的连接数。达到此限制时,会在日志中发出 DEBUG 消息,并且连接被拒绝。使用中的客户端类型决定了连接被拒绝时会发生什么。

类型: integer

示例 :2

默认值 :0(无限连接)

 

amqpMinLargeMessageSize

代理将 AMQP 消息作为大消息处理所需的最小消息大小(以字节为单位)。如果 AMQP 消息的大小相等或大于这个值,代理会将消息存储在大型消息目录(/opt/<custom_resource_name>/data/large-messages )中,默认情况下,代理用来进行消息代理。将值设为 -1 可禁用对 AMQP 消息的大型消息处理。

类型: integer

示例 :204800

默认值 :102400 (100 KB)

connectors.connector

 

单一连接器配置实例。

 

name*

连接器的名称。

类型: string

示例 :my-connector

默认值 :Not applicable

 

type

要创建的连接器类型,tcp vm

类型: string

示例 :vm

默认值为: tcp

 

host*

要连接的主机名或 IP 地址。

类型: string

示例 :192.168.0.58

默认值 :未指定

 

端口*

用于连接器实例的端口号。

键入: int

示例 :22222

默认值 :未指定

 

sslEnabled

指定是否在连接器端口上启用 SSL。如果设置为 true,请查看在 sslSecret 中指定的 TLS/SSL 所需的凭证的 secret 名称。

键入 :布尔值

示例: true

默认值为: false

 

sslSecret

存储 broker 键存储、信任存储和对应的密码的 secret(所有 Base64 编码)。

如果您没有为 sslSecret 指定自定义 secret 名称,连接器会假定默认 secret 名称。默认 secret 名称的格式是 <custom_resource_name>-<connector_name>-secret

您必须始终创建此 secret,即使连接器假设默认名称。

类型: string

示例 :my-broker-deployment-my-connector-secret

默认值:<custom_resource_name>-<connector_name>-secret

 

enabledCipherSuites

用于 TLS/SSL 通信的以逗号分隔的密码套件列表。

类型: string

注意 :对于连接器,建议您不要 指定密码套件列表。

默认值 :未指定

 

enabledProtocols

用于 TLS/SSL 通信的以逗号分隔的协议列表。

类型: string

示例 :TLSv1,TLSv1.1,TLSv1.2

默认值 :未指定

 

needClientAuth

指定代理是否告知客户端在连接器需要双向 TLS。此属性覆盖 wantClientAuth

键入 :布尔值

示例: true

默认值 :未指定

 

wantClientAuth

指定代理是否告知客户端在连接器上 请求 双向 TLS,但不是必需的。此属性由 needClientAuth 覆盖。

键入 :布尔值

示例: true

默认值 :未指定

 

verifyHost

指定是否将客户端证书的通用名称(CN)与主机名进行比较,以验证它们是否匹配。这个选项只适用于双向 TLS。

键入 :布尔值

示例: true

默认值 :未指定

 

sslProvider

指定 SSL 提供程序是 JDK 还是 OPENSSL

类型: string

示例 :OPENSSL

默认值 :JDK

 

sniHost

与传出连接上的 server_name 扩展匹配的正则表达式。如果名称不匹配,连接器连接将被拒绝。

类型: string

示例 : some_regular_expression

默认值 :未指定

 

expose

指定要将连接器公开给 OpenShift Container Platform 外部的客户端。

键入 :布尔值

示例: true

默认值为: false

addressSettings.applyRule

 

指定 Operator 如何应用您添加到 CR 中的配置,用于每个匹配的地址或一组地址。

您可以指定的值有:

merge_all

对于 CR 中指定的地址设置,以及 与同一地址集合匹配的默认配置:

  • 将默认配置中指定的任何属性值替换为 CR 中指定的任何属性值。
  • 保留在 CR 默认配置中唯一标识的任何属性值。在最后的合并配置中包含以上每个内容。

对于在 CR 中指定的地址设置,或者 唯一与特定地址集合匹配的默认配置,请在最终合并的配置中包含它们。

merge_replace

对于 CR 中指定的地址设置 与同一地址集合匹配的默认配置,请在最终合并的配置中包含 CR 中指定的设置。不要 包含默认配置中指定的任何属性,即使这些属性没有在 CR 中指定。

对于在 CR 中指定的地址设置,或者 唯一与特定地址集合匹配的默认配置,请在最终合并的配置中包含它们。

replace_all
将默认配置 中指定的所有 地址设置替换为 CR 中指定的所有地址设置。最后,megred 配置与 CR 中指定的配置完全匹配。

类型: string

示例 : replace_all

默认值: merge_all

addressSettings.addressSetting

 

匹配地址 或一组 地址的地址设置。

 

addressFullPolicy

指定在通过 maxSizeBytes 配置的地址变得满时会发生什么。可用的策略有:

页面
发送到完整地址的消息将传给磁盘。
DROP
发送到完整地址的消息将被静默丢弃。
FAIL
发送到完整地址的消息将被丢弃,消息制作者收到异常。
BLOCK

当消息制作者尝试发送任何进一步的消息时,将阻止消息制作者。

BLOCK 策略仅适用于 AMQP、OpenWire 和 Core Protocol,因为这些协议支持流控制。

类型: string

示例 :DROP

默认值 :页面

 

autoCreateAddresses

指定代理在客户端向发送消息时是否自动创建地址,或者试图使用绑定到不存在的地址的队列。

键入 :布尔值

示例 :false

默认值为: true

 

autoCreateDeadLetterResources

指定代理是否自动创建死信地址和队列来接收未发送的消息。

如果 参数设置为 true,代理会自动创建一个死信地址和一个关联的死信队列。自动创建的地址的名称与您为 deadLetterAddress 指定的值匹配。

键入 :布尔值

示例: true

默认值为: false

 

autoCreateExpiryResources

指定代理是否自动创建地址和队列来接收过期的信息。

如果参数设置为 true,代理会自动创建一个到期地址和一个关联的到期队列。自动创建的地址的名称与您为 expiryAddress 指定的值匹配。

键入 :布尔值

示例: true

默认值为: false

 

autoCreateJmsQueues

此属性已弃用。使用 autoCreateQueues 替代。

 

autoCreateJmsTopics

此属性已弃用。使用 autoCreateQueues 替代。

 

autoCreateQueues

指定代理是否在客户端发送消息时自动创建队列,或者试图使用来自 的消息(尚不存在的队列)。

键入 :布尔值

示例 :false

默认值为: true

 

autoDeleteAddresses

指定代理不再有队列时,代理是否自动删除自动创建的地址。

键入 :布尔值

示例 :false

默认值为: true

 

autoDeleteAddressDelay

当地址没有队列时,代理会在自动删除自动创建的地址前等待。

类型: integer

示例 :100

默认值 :0

 

autoDeleteJmsQueues

此属性已弃用。改为使用 autoDeleteQueues

 

autoDeleteJmsTopics

此属性已弃用。改为使用 autoDeleteQueues

 

autoDeleteQueues

指定代理是否在队列没有消费者且没有消息时自动删除自动创建的队列。

键入 :布尔值

示例 :false

默认值为: true

 

autoDeleteCreatedQueues

指定代理是否在队列没有消费者且没有消息时手动删除手动创建的队列。

键入 :布尔值

示例: true

默认值为: false

 

autoDeleteQueuesDelay

当队列没有消费者时,代理会在自动删除自动创建队列前等待。

类型: integer

示例 :10

默认值 :0

 

autoDeleteQueuesMessageCount

代理评估是否自动删除前可以处于队列中的最大消息数。

类型: integer

示例 :5

默认值 :0

 

configDeleteAddresses

当重新加载配置文件时,这个参数指定如何处理从配置文件中删除的地址(及其队列)。您可以指定以下值:

OFF
重新加载配置文件时,代理不会删除地址。
FORCE
代理会在重新加载配置文件时删除地址及其队列。如果队列中有任何消息,它们也会被删除。

类型: string

示例 :FORCE

默认值 :OFF

 

configDeleteQueues

当重新载入配置文件时,此设置指定代理如何处理已从配置文件中删除的队列。您可以指定以下值:

OFF
重新加载配置文件时,代理不会删除队列。
FORCE
代理会在重新载入配置文件时删除队列。如果队列中有任何消息,它们也会被删除。

类型: string

示例 :FORCE

默认值 :OFF

 

deadLetterAddress

代理向发送死(即 发送)消息的地址。

类型: string

示例 :DLA

默认值 :无

 

deadLetterQueuePrefix

代理应用到自动创建的死信队列的名称的前缀。

类型: string

示例 :myDLQ。

默认值 :DLQ:

 

deadLetterQueueSuffix

代理应用到自动创建的死信队列的后缀。

类型: string

示例 : .DLQ

默认值 :无

 

defaultAddressRoutingType

自动创建的地址中使用的路由类型。

类型: string

示例 :ANYCAST

默认值 :多播

 

defaultConsumersBeforeDispatch

在消息分配前需要的用户数量可以开始地址上的队列。

类型: integer

示例 :5

默认值 :0

 

defaultConsumerWindowSize

面向消费者的默认窗口大小(以字节为单位)。

类型: integer

示例 :300000

默认值 :1048576 (1024*1024)

 

defaultDelayBeforeDispatch

默认时间(毫秒),如果没有为 defaultConsumersBeforeDispatch 指定的值,代理会在分配消息前等待。

类型: integer

示例 :5

默认值: -1(无延迟)

 

defaultExclusiveQueue

指定地址上的所有队列默认为独占队列。

键入 :布尔值

示例: true

默认值为: false

 

defaultGroupBuckets

用于消息分组的存储桶数量。

类型: integer

示例 :0(禁用消息分组)

默认值 : -1(无限制)

 

defaultGroupFirstKey

用于向消费者表明首先在某一组中的消息。

类型: string

示例 :firstMessageKey

默认值 :无

 

defaultGroupRebalance

指定在新消费者连接到代理时是否重新平衡组。

键入 :布尔值

示例: true

默认值为: false

 

defaultGroupRebalancePauseDispatch

指定在代理进行重新平衡组时是否分配消息。

键入 :布尔值

示例: true

默认值为: false

 

defaultLastValueQueue

指定地址上所有队列是否为最后一个值队列。

键入 :布尔值

示例: true

默认值为: false

 

defaultLastValueKey

用于最后一个值队列的默认密钥。

类型: string

示例 : stock_ticker

默认值 :无

 

defaultMaxConsumers

在任意时间点上允许的最大使用者数量。

类型: integer

示例 :100

默认值 : -1(无限制)

 

defaultNonDestructive

指定地址上的所有队列是否为非破坏性。

键入 :布尔值

示例: true

默认值为: false

 

defaultPurgeOnNoConsumers

指定代理在没有消费者后是否清除队列的内容。

键入 :布尔值

示例: true

默认值为: false

 

defaultQueueRoutingType

自动创建队列中使用的路由类型。默认值为 MULTICAST

类型: string

示例 :ANYCAST

默认值 :多播

 

defaultRingSize

显式设置 ring 的匹配队列的默认环大小。

类型: integer

示例 :3

默认值 : -1(无大小限制)

 

enableMetrics

指定配置的 metrics 插件(如 Prometheus 插件)是否为匹配的地址或一组地址收集指标。

键入 :布尔值

示例 :false

默认值为: true

 

expiryAddress

接收过期信息的地址。

类型: string

示例 :myExpiryAddress

默认值 :无

 

expiryDelay

过期时间(以毫秒为单位)应用于使用默认过期时间的信息。

类型: integer

示例 :100

默认值: -1(没有应用过期时间)

 

expiryQueuePrefix

代理应用到自动创建的到期队列的名称的前缀。

类型: string

示例 :myExp.

默认值 :加快.

 

expiryQueueSuffix

代理应用到自动创建的到期队列名称的后缀。

类型: string

示例 :.EXP

默认值 :无

 

lastValueQueue

指定队列是否只使用最后值。

键入 :布尔值

示例: true

默认值为: false

 

managementBrowsePageSize

指定管理资源可以浏览的消息数量。

类型: integer

示例 :100

默认值 :200

 

匹配*

与代理上配置的地址设置匹配的字符串。您可以指定准确的地址名,或者使用通配符表达式将地址设置 与一组 地址匹配。

如果您使用通配符表达式作为 match 属性的值,您必须将该值包括在单引号中,如 'myAddresses*'

类型: string

示例 :'myAddresses*'

默认值 :无

 

maxDeliveryAttempts

指定代理在向配置的死信地址发送消息前尝试发送消息的次数。

类型: integer

示例 :20

默认值 :10

 

maxExpiryDelay

过期时间(以毫秒为单位)应用于使用超过这个值的过期时间的信息。

类型: integer

示例 :20

默认值: -1(没有应用最长过期时间)

 

maxRedeliveryDelay

代理发出的消息重新传送尝试间最大值,以毫秒为单位。

类型: integer

示例 :100

默认值 :默认值为 redeliveryDelay 的值的十倍,默认值为 0。

 

maxSizeBytes

地址的最大内存大小,以字节为单位。当 addressFullPolicy 设置为 PAGINGBLOCKFAIL 时。也支持字节表示法,如 "K"、"Mb" 和 "GB"。

类型: string

示例 :10Mb

默认值 : -1(无限制)

 

maxSizeBytesRejectThreshold

代理开始拒绝消息前可以到达的最大大小(以字节为单位)。当 address-full-policy 设置为 BLOCK 时使用。配合使用用于 AMQP 协议的 maxSizeBytes

类型: integer

示例 :500

默认值 : -1(无最大大小)

 

messageCounterHistoryDayLimit

代理为地址保留消息计数器历史记录的天数。

类型: integer

示例 :5

默认值 :0

 

minExpiryDelay

过期时间(以毫秒为单位)应用于使用比这个值的过期时间较低的信息。

类型: integer

示例 :20

默认值 : -1(未应用最小过期时间)

 

pageMaxCacheSize

在分页导航期间,保留在内存中优化 I/O 的页面文件数目。

类型: integer

示例 :10

默认值 :5

 

pageSizeBytes

分页大小(以字节为单位)。也支持字节表示法,如 KMbGB

类型: string

示例 :20971520

默认值 :10485760(大约 10.5 MB)

 

redeliveryDelay

代理在重新发送已取消消息前等待的时间(以毫秒为单位)。

类型: integer

示例 :100

默认值 :0

 

redeliveryDelayMultiplier

将多个因素应用到 重新传送Delay 的值。

键入: number

示例 :5

默认值 :1

 

redeliveryCollisionAvoidanceFactor

将多个因素应用到 重新传送Delay 的值,以避免冲突。

键入: number

示例 :1.1

默认值 :0

 

redistributionDelay

在重新分发所有剩余的消息前,代理在最后一个消费者关闭前等待的时间(毫秒)。

类型: integer

示例 :100

默认值 : -1(未设置)

 

retroactiveMessageCount

对于在地址中创建的将来队列的消息数量。

类型: integer

示例 :100

默认值 :0

 

sendToDlaOnNoRoute

指定如果无法路由到任何队列,则消息是否会被发送到配置的死信地址。

键入 :布尔值

示例: true

默认值为: false

 

slowConsumerCheckPeriod

代理检查速度较慢的消费者的频率,以秒为单位

类型: integer

示例 :15

默认值 :5

 

slowConsumerPolicy

指定在识别缓慢的消费者时会发生什么情况。有效选项为 KILLNOTIFYKILL 会终止消费者的连接,这会影响使用同一连接的任何客户端线程。NOTIFY 发送 CONSUMER_SLOW 管理通知给客户端。

类型: string

示例 :KILL

默认值 :通知

 

slowConsumerThreshold

在消费者被视为缓慢前,消息每秒最少的消耗率。

类型: integer

示例 :100

默认值 : -1(未设置)

升级

  
 

enabled

当您更新 version 的值来指定 AMQ Broker 的新目标版本时,指定是否允许 Operator 自动将 deploymentPlan.image 值更新为与 AMQ Broker 版本对应的代理容器镜像。

键入 :布尔值

示例: true

默认值为: false

 

指定在将 版本 从 AMQ Broker 的值更新为另一个(例如,从 7.6.07.8.5)时,指定是否允许 Operator 自动更新 deploymentPlan.image 值。

键入 :布尔值

示例: true

默认值为: false

version

 

指定 AMQ Broker 的目标 次要版本,您希望 Operator 自动更新 CR 以使用对应的代理容器镜像。例如,如果您将 version 的值从 7.6.0 更改为 7.7.0 (以及 upgrade .enabled 和 upgrade. minor 都是 true),那么 Operator 将 deploymentPlan.image 更新为表单 registry.redhat.io/amq7/amq-broker:7.7-x 的代理镜像。

类型: string

示例 :7.7.0

默认值 :AMQ Broker 的当前版本

11.1.2. 地址自定义资源配置参考

基于地址 CRD 的 CR 实例允许您为部署中的代理定义地址和队列。下表详细列出了您可以配置的项目。

重要

任何您部署的对应自定义资源(CR)中都需要使用星号(*)标记的配置项目。如果没有为非必要项目显式指定值,则配置将使用默认值。

条目描述和使用

addressName*

在代理上创建的地址名称。

类型: string

示例 : address0

默认值 :未指定

queueName*

在 broker 上创建的队列名称。

类型: string

示例 : queue0

默认值 :未指定

removeFromBrokerOnDelete*

指定在删除该部署的地址 CR 实例时,Operator 是否删除部署中所有代理的现有地址。默认值为 false,这意味着在删除 CR 时 Operator 不会删除现有地址。

键入 :布尔值

示例: true

默认值为: false

routingType*

要使用的路由类型;任何 多播多播

类型: string

示例 :任何广播

默认值 :未指定

11.2. 应用程序模板参数

在 OpenShift Container Platform 镜像上配置 AMQ Broker,通过指定应用程序模板参数的值来执行。您可以配置以下参数:

表 11.1. 应用程序模板参数
参数描述

AMQ_ADDRESSES

在其启动时,以逗号分隔列表中指定默认可用的地址。

AMQ_ANYCAST_PREFIX

指定应用到多路协议端口 61616 和 61617 的广播前缀。

AMQ_CLUSTERED

启用集群。

AMQ_CLUSTER_PASSWORD

指定用于集群的密码。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。

AMQ_CLUSTER_USER

指定用于集群的集群用户。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。

AMQ_CREDENTIAL_SECRET

指定存储中敏感凭证的 secret,如代理用户名/密码、集群用户名/密码和密钥存储密码。

AMQ_DATA_DIR

指定数据的目录。StatefulSets 中使用的。

AMQ_DATA_DIR_LOGGING

指定数据目录日志记录的目录。

AMQ_EXTRA_ARGS

指定要传递给 artemis create 的其他参数。

AMQ_GLOBAL_MAX_SIZE

指定消息数据可消耗的最大内存量。如果没有指定值,则会分配一半系统内存。

AMQ_KEYSTORE

指定 SSL 密钥存储文件名。如果没有指定值,将生成随机密码,但不会配置 SSL。

AMQ_KEYSTORE_PASSWORD

(可选)指定用于解密 SSL 密钥存储的密码。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。

AMQ_KEYSTORE_TRUSTSTORE_DIR

指定挂载 secret 的目录。默认值为 /etc/amq-secret-volume

AMQ_MAX_CONNECTIONS

仅用于 SSL,指定接受者将接受的最大连接数。

AMQ_MULTICAST_PREFIX

指定应用到多路协议端口 61616 和 61617 的多播前缀。

AMQ_NAME

指定代理实例的名称。默认值为 amq-broker

AMQ_PASSWORD

指定用于向代理进行身份验证的密码。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。

AMQ_PROTOCOL

在以逗号分隔的列表中指定代理使用的消息传递协议。可用选项包括 amqpmqttOpenwirestomphornetq。如果没有指定,则所有协议都可用。请注意,若要将映像与红帽 JBoss 企业应用平台集成,必须指定 OpenWire 协议,而且也可以选择指定其他协议。

AMQ_QUEUES

以逗号分隔列表指定在启动时代理中默认可用的队列。

AMQ_REQUIRE_LOGIN

如果设置为 true,则需要登录。如果未指定,或设置为 false,则允许匿名访问。默认情况下不指定此参数的值。

AMQ_ROLE

指定创建的角色的名称。默认值为 amq

AMQ_TRUSTSTORE

指定 SSL 信任存储文件名。如果没有指定值,将生成随机密码,但不会配置 SSL。

AMQ_TRUSTSTORE_PASSWORD

(可选)指定用于解密 SSL 信任存储的密码。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。

AMQ_USER

指定用于代理身份验证的用户名。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。

APPLICATION_NAME

指定 OpenShift 内部使用的应用程序的名称。它用于应用中的服务、Pod 和其他对象的名称。

IMAGE

指定镜像。在 持久性持久和有状态 set -clustered 模板中使用。

IMAGE_STREAM_NAMESPACE

指定镜像流命名空间。在 ssl基本 模板中使用。

OPENSHIFT_DNS_PING_SERVICE_PORT

指定 OpenShift DNS ping 服务的端口号。

PING_SVC_NAME

指定 OpenShift DNS ping 服务的名称。如果您指定了一个 APPLICATION _NAME 的值,则默认值为 $APPLICATION _NAME。否则,默认值是 ping。如果您为 PING_SVC_NAME 指定自定义值,则此值会覆盖默认值。如果要使用模板在同一个 OpenShift 项目命名空间中部署多个代理集群,您必须确保 PING_SVC_NAME 每个部署都有一个唯一值。

VOLUME_CAPACITY

指定数据库卷的持久性存储大小。

注意

如果您将 broker.xml 用于自定义配置,则该文件中指定的任何值将覆盖应用程序模板中相同参数值。

  • AMQ_NAME
  • AMQ_ROLE
  • AMQ_CLUSTER_USER
  • AMQ_CLUSTER_PASSWORD

11.3. 日志

除了查看 OpenShift 日志外,您还可以通过查看输出到容器控制台的 AMQ 日志来对在 OpenShift Container Platform 镜像上运行的 AMQ 代理进行故障排除。

步骤

  • 在命令行中运行以下命令:
$ oc logs -f <pass:quotes[<pod-name>]> <pass:quotes[<container-name>]>

在 2022-08-27 22:32:44 +1000 上修订

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.