在 OpenShift 中部署 AMQ Broker
用于与 AMQ Broker 7.8 一起使用
摘要
第 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 没有为基于模板的部署提供消息迁移功能,因此不建议在生产环境中使用模板。
其他资源
- 了解如何使用 AMQ Broker Operator 创建代理部署,请参阅 第 3 章 使用 AMQ Broker Operator 在 OpenShift Container Platform 上部署 AMQ Broker。
- 有关使用 Operator 迁移消息的更多信息,请参阅 第 4.8 节 “高可用性和消息迁移”。
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 安装方法)
-
Operator 安装存档(OpenShift CLI 安装方法)的
- address CRD
您根据此 CRD 部署 CR 实例,以便为代理部署创建地址和队列。
根据您安装 Operator 的方式,此 CRD 是:
-
Operator 安装存档(OpenShift CLI 安装方法)的
crds
目录中的broker_activemqartemisaddress_crd
文件。 -
OpenShift Container Platform Web 控制台的
Custom Resource Definitions
部分中的ActiveMQArtemisAddresss
CRD(OperatorHub 安装方法)
-
Operator 安装存档(OpenShift CLI 安装方法)的
- scaleDown CRD
当实例化用于消息迁移的扩展控制器时,Operator 会自动基于此 CRD 创建 CR 实例。
根据您安装 Operator 的方式,此 CRD 是:
-
Operator 安装存档(OpenShift CLI 安装方法)的
crds
目录中的broker_activemqartemisscaledown_crd
文件。 -
OpenShift Container Platform Web 控制台的
Custom Resource Definitions
部分中的ActiveMQArtemisScaledown
CRD(OperatorHub 安装方法)。
-
Operator 安装存档(OpenShift CLI 安装方法)的
其他资源
了解如何使用以下内容安装 AMQ Broker Operator(以及所有包含 CRD):
- OpenShift CLI 请查看 第 3.2 节 “使用 CLI 安装 Operator”
- Operator Lifecycle Manager 和 OperatorHub 图形界面,请参阅 第 3.3 节 “使用 OperatorHub 安装 Operator”。
有关基于主代理和地址 CRD 创建 CR 实例时使用的完整配置引用,请参阅:
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 文件 中不包含
属性(指定 Init 容器镜像)。如果您没有在 CR 中明确包含 spec.deploymentPlan.
initImagespec.deploymentPlan.initImage
属性并指定值,Operator 会选择要在部署 CR 时使用的适当内置初始容器镜像。
本节介绍了 Operator 如何选择这些镜像。
要选择 broker 和 Init Container 镜像,Operator 首先决定镜像应对应的 AMQ Broker 版本。Operator 会根据以下方法决定版本:
-
如果主 CR 中的
spec.upgrades.enabled
属性已设置为true
,spec.version
属性指定7.7.0
、78.0
、7.8.1
或7.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.1
和 7.8.2
是 spec.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 |
|
IBM Z 上的 OpenShift Container Platform |
|
IBM Power 系统上的 OpenShift Container Platform |
|
每个环境变量的值指定红帽提供的代理容器镜像。例如:
- 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 |
|
IBM Z 上的 OpenShift Container Platform |
|
IBM Power 系统上的 OpenShift Container Platform |
|
每个环境变量的值指定红帽提供的初始容器镜像。例如:
- 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 是最新的微版本)。
其他资源
- 了解如何使用 AMQ Broker Operator 创建代理部署,请参阅 第 3 章 使用 AMQ Broker Operator 在 OpenShift Container Platform 上部署 AMQ Broker。
- 如需有关 Operator 如何使用初始容器生成代理配置的更多信息,请参阅 第 4.1 节 “Operator 如何生成代理配置”。
- 要了解如何构建和 指定自定义 初始容器镜像,请参阅 第 4.5 节 “指定自定义初始容器镜像”。
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. 先决条件
- 在安装 Operator 并使用它创建代理部署前,您应该查阅 第 2.5 节 “Operator 部署备注” 中的 Operator 部署备注。
3.2. 使用 CLI 安装 Operator
每个 Operator 版本都需要您下载最新的 AMQ Broker 7.8.5 .3 Operator 安装和示例文件,如下所述。
本节中的步骤演示了如何使用 OpenShift 命令行界面(CLI)在给定的 OpenShift 项目中安装和部署用于 AMQ Broker 7.8 的 Operator 的最新版本。在后续流程中,您可以使用此 Operator 部署一些代理实例。
- 有关安装使用 OperatorHub 图形界面的 AMQ Broker Operator 的替代方法,请参阅 第 3.3 节 “使用 OperatorHub 安装 Operator”。
- 要了解有关升级现有 Operator 的代理部署的信息,请参阅 第 6 章 升级基于 Operator 的代理部署。
3.2.1. 获取 Operator 代码
此流程演示了如何访问并准备为 AMQ Broker 7.8 安装最新版本的 Operator 的代码。
步骤
- 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
-
确保将 Version 下拉列表的值设置为
7.8.5
,并且选择了 Patches 选项卡。 在 AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download。
下载
amq-broker-operator-7.8.5-ocp-install-examples.zip
压缩存档会自动开始。下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为
~/broker/operator
的目录。$ mkdir ~/broker/operator $ mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
在您选择的安装目录中,提取存档的内容。例如:
$ cd ~/broker/operator $ unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
切换至提取存档时创建的目录。例如:
$ cd amq-broker-operator-7.8.5-ocp-install-examples
以集群管理员身份登录 OpenShift Container Platform。例如:
$ oc login -u system:admin
指定要安装 Operator 的项目。您可以创建新项目或切换到现有项目。
创建一个新项目
$ oc new-project <project-name>
或者,切换到现有项目:
$ oc project <project-name>
指定要与 Operator 搭配使用的服务帐户。
-
在您提取的 Operator 归档的部署目录中,打开
service_account.yaml
文件。 -
确保
kind
元素设置为ServiceAccount
。 -
在
metadata
部分中,为服务帐户分配一个自定义名称,或者使用默认名称。默认名称为amq-broker-operator
。 在项目中创建服务帐户。
$ oc create -f deploy/service_account.yaml
-
在您提取的 Operator 归档的部署目录中,打开
为 Operator 指定角色名称。
-
打开
role.yaml
文件。此文件指定 Operator 可以使用和修改的资源。 -
确保
kind
元素已设置为Role
。 -
在
metadata
部分中,为角色分配一个自定义名称,或者使用默认名称。默认名称为amq-broker-operator
。 在您的项目中创建角色。
$ oc create -f deploy/role.yaml
-
打开
为 Operator 指定角色绑定。角色绑定会根据您指定的名称将之前创建的服务帐户绑定到 Operator 角色。
打开
role_binding.yaml
文件。确保ServiceAccount
和Role
的名称
与service_account.yaml
和role.yaml
文件中指定的值匹配。例如:metadata: name: amq-broker-operator subjects: kind: ServiceAccount name: amq-broker-operator roleRef: kind: Role name: amq-broker-operator
在项目中创建角色绑定。
$ 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 时,任何现有数据都会丢失。有关置备持久性存储的更多信息,请参阅:
步骤
在 OpenShift 命令行界面(CLI)中,以集群管理员身份登录 OpenShift。例如:
$ oc login -u system:admin
切换到您之前为 Operator 部署准备的项目。例如:
$ oc project <project_name>
切换到之前在之前提取 Operator 安装存档时创建的目录。例如:
$ cd ~/broker/operator/amq-broker-operator-7.8.5-ocp-install-examples
部署 Operator 中包含的 CRD。在部署和启动 Operator 之前,您必须在 OpenShift 集群中安装 CRD。
部署主代理 CRD。
$ oc create -f deploy/crds/broker_activemqartemis_crd.yaml
部署地址 CRD。
$ oc create -f deploy/crds/broker_activemqartemisaddress_crd.yaml
部署 scaledown controller CRD。
$ oc create -f deploy/crds/broker_activemqartemisscaledown_crd.yaml
将与红帽生态系统目录中用于身份验证的帐户关联的 pull secret 与 OpenShift 项目
的默认
、deployer
和builder
服务帐户链接。$ oc secrets link --for=pull default <secret_name> $ oc secrets link --for=pull deployer <secret_name> $ oc secrets link --for=pull builder <secret_name>
在您下载并提取的 Operator 归档的部署目录中,打开
operator.yaml
文件。注意在
operator.yaml
文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#
)符号开头,表示 SHA 值对应于特定的容器镜像标签。部署 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。
其他资源
- 有关安装使用 OperatorHub 图形界面的 AMQ Broker Operator 的替代方法,请参阅 第 3.3 节 “使用 OperatorHub 安装 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。
步骤
- 在网页浏览器中,导航到 AMQ Broker 7.8.5 的 Software Downloads 页面。
-
确保将 Version 下拉列表的值设置为
7.8.5
,并且选择了 Releases 选项卡。 在 AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download。
下载
amq-broker-operator-7.8.5-ocp-install-examples.zip
压缩存档会自动开始。下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为
~/broker/operator
的目录。mkdir ~/broker/operator mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
在您选择的安装目录中,提取存档的内容。例如:
cd ~/broker/operator unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
切换到您提取的 Operator 存档的目录。例如:
cd amq-broker-operator-7.8.5-ocp-install-examples
以集群管理员身份登录 OpenShift Container Platform。例如:
$ oc login -u system:admin
在 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 需要集群管理员特权。
先决条件
-
Red Hat Integration - AMQ Broker
Operator 必须在 OperatorHub 中提供。如果没有自动查看 Operator 可用,请参阅 第 3.3.2 节 “在 OperatorHub 中安装 Operator” 来获得在 OperatorHub 中手动安装 Operator 的说明。
步骤
- 以集群管理员身份登录 OpenShift Container Platform Web 控制台。
- 在左侧导航菜单中点 → 。
- 在 OperatorHub 页面顶部的 Project 下拉菜单中,选择您要在其中部署 Operator 的项目。
在 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。
-
点
Red Hat Integration - AMQ Broker
Operator。在出现的对话框中,单击 Install。 在 Install Operator 页面中:
在 Update Channel 下,通过选择以下单选按钮之一来指定用于跟踪和接收 Operator 的频道:
-
7.x
- 当有可用时,此频道将更新至7.9
。 -
7.8.x
- 这是 Long Term Support(LTS)频道。
-
- 在 Installation Mode 下,确保选择 具有特定命名空间 的单选按钮。
- 在 Installed Namespace 下拉菜单中选择您要安装 Operator 的项目。
-
在 Approval Strategy 下,确保选中了有权限
Automatic
的单选按钮。这个选项指定 Operator 的更新不需要手动批准安装。 - 点 Install。
当 Operator 安装完成后,Installed Operators 页将打开。您应该会看到 Red Hat Integration - AMQ Broker
Operator 已安装到您指定的项目命名空间中。
其他资源
- 要了解如何在安装了 AMQ Broker 的 Operator 的项目中创建代理部署,请参阅 第 3.4.1 节 “部署基本代理实例”。
3.4. 创建基于 Operator 的代理部署
3.4.1. 部署基本代理实例
以下流程演示了如何使用自定义资源(CR)实例来创建基本代理部署。
- 您无法通过部署多个自定义资源(CR)实例在给定的 OpenShift 项目中创建多个代理部署。但是,当您在项目中创建代理部署时,您可以为 地址部署多个 CR 实例。
在 AMQ Broker 7.8 中,如果要配置以下项目,您必须在第一次部署 CR 前将 适当的配置添加到主代理 CR 实例中。
先决条件
您必须已安装了 AMQ Broker Operator。
- 要使用 OpenShift 命令行界面(CLI)安装 AMQ Broker Operator,请参阅 第 3.2 节 “使用 CLI 安装 Operator”。
- 要使用 OperatorHub 图形界面安装 AMQ Broker Operator,请参阅 第 3.3 节 “使用 OperatorHub 安装 Operator”。
- 您应该了解 Operator 如何选择代理容器镜像以用于代理部署。如需更多信息,请参阅 第 2.4 节 “Operator 如何选择容器镜像”。
- 从 AMQ Broker 7.3 开始,您可以使用新版本的红帽生态系统目录访问容器镜像。此新版本的 registry 要求您成为经过身份验证的用户,然后才能访问镜像。在按照本节中的步骤进行操作前,您必须首先完成 Red Hat Container Registry 身份验证 中描述的步骤。
步骤
当您成功安装 Operator 时,Operator 会运行并侦听与 CR 相关的更改。本例演示了如何使用 CR 实例在项目中部署基本代理。
开始为代理部署配置自定义资源(CR)实例。
使用 OpenShift 命令行界面:
以具有部署部署权限的项目中部署 CR 的用户身份登录 OpenShift。
oc login -u <user> -p <password> --server=<host:port>
-
打开名为
broker_activemqartemis_cr.yaml
的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有部署部署 CR 的项目中部署 CR 权限的用户身份登录控制台。
- 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 → 。
- 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
单击 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-0
、ex-aao-ss-1
等等。CR 中的应用程序名称出现在部署中,作为 StatefulSet 上的标签。您可以在 Pod 选择器中使用该标签,例如:-
size
属性指定要部署的代理数量。值2
或更高指定集群代理部署。但是,要部署单个代理实例,请确保将值设置为1
。 部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到您要在其中创建代理部署的项目。
$ oc project <project_name>
创建 CR 实例。
$ oc create -f <path/to/custom_resource_instance>.yaml
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
在 OpenShift Container Platform web 控制台中,点击
→ (OpenShift Container Platform 4.5 或更高版本)或 → (OpenShift Container Platform 3.11)。您会看到一个名为ex-aao-ss
的新 StatefulSet。- 点 ex-aao-ss StatefulSet。您会看到一个 Pod,对应于您在 CR 中定义的单个代理。
- 在 StatefulSet 中,点 Pods 选项卡。点 ex-aao-ss Pod。在正在运行的 Pod 的 Events 选项卡中,您会看到代理容器已启动。Logs 选项卡显示代理本身正在运行。
要测试代理是否正常运行,请访问代理 Pod 上的 shell 来发送一些测试信息。
使用 OpenShift Container Platform Web 控制台:
- 点 → (OpenShift Container Platform 4.5 或更高版本)或 → (OpenShift Container Platform 3.11)。
- 点 ex-aao-ss Pod。
- 点击 Terminal 选项卡。
使用 OpenShift 命令行界面:
获取项目的 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
访问 broker Pod 的 shell。
$ oc rsh ex-aao-ss-0
从 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
其他资源
- 有关主代理自定义资源(CR)的完整配置引用,请参阅 第 11.1 节 “自定义资源配置参考”。
- 要了解如何将正在运行的代理连接到 AMQ 管理控制台,请参阅 第 5 章 连接到基于 Operator 的代理部署的 AMQ 管理控制台。
3.4.2. 部署集群代理
如果您的项目中运行的两个或多个代理 Pod,Pod 会自动形成代理集群。集群配置可让代理根据需要连接到其他和重新分发消息,以进行负载平衡。
以下流程演示了如何部署集群代理。默认情况下,此部署中的代理 在需求 负载均衡时使用,这意味着代理仅将消息转发到具有匹配使用者的其他代理。
先决条件
- 已部署基本代理实例。请参阅 第 3.4.1 节 “部署基本代理实例”。
步骤
- 打开用于基本代理部署的 CR 文件。
对于集群部署,请确保
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 项目的名称。- 保存修改后的 CR 文件。
以具有部署之前创建基本代理部署的项目中部署 CR 权限的用户身份登录 OpenShift。
$ oc login -u <user> -p <password> --server=<host:port>
切换到您之前在其中创建基本代理部署的项目。
$ oc project <project_name>
在命令行中应用更改:
$ oc apply -f <path/to/custom_resource_instance>.yaml
在 OpenShift Container Platform Web 控制台中,其他代理 Pod 会根据 CR 中指定的数量在项目中启动。默认情况下,在项目中运行的代理是集群。
打开每个 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 会为每个代理生成地址设置配置,如下所述。
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>
- 如果您在自定义资源(CR)实例中也指定了地址设置配置,则配置的初始容器进程并将其转换为 XML。
-
根据 CR 中
applyRule
属性的值,Init 容器 合并,或将上面显示的默认地址设置配置替换为您在 CR 中指定的配置。这个合并或替换的结果是代理将使用的最终地址设置配置。 -
当初始容器生成代理配置(包括地址设置)后,代理应用程序容器将启动。启动时,代理容器从之前由 Init 容器使用的安装目录中复制其配置。您可以检查
broker.xml
配置文件中的地址设置配置。对于正在运行的代理,这个文件位于/home/jboss/amq-broker/etc
目录中。
其他资源
-
有关在 CR 中使用
applyRule
属性的示例,请参阅 第 4.2.3 节 “在基于 Operator 的代理部署中配置的地址设置匹配”。
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
环境变量的值。
默认情况下,安装目录有以下子目录:
子目录 | 内容 |
---|---|
| 运行代理所需的二进制文件和脚本。 |
| 配置文件。 |
| 代理日志。 |
| 运行代理所需的 JAR 和库。 |
| 代理日志文件。 |
| 临时 Web 应用文件. |
当 Init 容器生成代理配置后,代理应用程序容器会启动。启动时,代理容器从之前由 Init 容器使用的安装目录中复制其配置。当代理 Pod 初始化并运行时,代理配置位于代理的 /home/jboss/amq-broker
目录中。
其他资源
- 如需有关 Operator 为内置初始容器选择容器镜像的更多信息,请参阅 第 2.4 节 “Operator 如何选择容器镜像”。
- 要了解如何构建和指定自定义初始容器镜像,请参阅 第 4.5 节 “指定自定义初始容器镜像”。
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 控制台中的
ActiveMQAretmisAddress
CRD。 → 下的
-
如果您使用 OpenShift 命令行界面(CLI)安装 Operator,地址 CRD 是 proxy
要配置与特定地址匹配的地址和队列设置,您可以在用于创建代理部署的主自定义资源(CR)实例中包含配置。
-
如果您使用 OpenShift CLI 安装 Operator,主代理 CRD 是 proxy
_activemqartemis_crd.yaml
文件,该文件包含在您下载并提取的 Operator 安装存档的deploy/crds
中。 -
如果使用 OperatorHub 安装 Operator,则主代理 CRD 是 OpenShift Container Platform Web 控制台中的
ActiveMQAretmis
CRD。 → 下列出的
注意要为基于 Operator 的部署配置地址设置,您必须 至少为 AMQ Broker 7.7 使用最新版本的 Operator(即 0.17 版)。要了解如何将 Operator 升级到 AMQ Broker 7.8 的最新版本,请参阅 第 6 章 升级基于 Operator 的代理部署。
通常,您可以为 OpenShift Container Platform 中部署的代理部署的地址和队列设置 完全相当于 Linux 或 Windows 上的独立代理部署。但是,您应该了解 配置这些设置的方式。这些区别在以下子部分进行了描述。
-
如果您使用 OpenShift CLI 安装 Operator,主代理 CRD 是 proxy
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
其他资源
有关为 OpenShift Container Platform 代理部署创建地址和队列以及匹配设置的示例,请参阅:
- 要了解 OpenShift Container Platform 代理部署的地址、队列和地址设置的所有配置选项,请参阅 第 11.1 节 “自定义资源配置参考”。
- 有关为 独立 代理部署配置地址、队列和相关地址设置的更多信息,请参阅 配置 AMQ Broker 中的地址 、队列和主题。您可以使用这些信息为 OpenShift Container Platform 上的代理部署创建等同配置。
4.2.2. 为基于 Operator 的代理部署创建地址和队列
以下流程演示了如何使用自定义资源(CR)实例将地址和相关队列添加到基于 Operator 的代理部署中。
要在代理部署中创建多个地址和/或队列,您需要创建单独的 CR 文件并单独部署它们,为每个情况指定新地址和/或队列名称。另外,每个 CR 实例的 name
属性必须是唯一的。
先决条件
您必须已安装了 AMQ Broker Operator,包括在您的代理上创建地址和队列所需的专用自定义资源定义(CRD)。有关安装 Operator 的两种替代方法的信息,请参阅:
- 您应该熟悉如何使用 CR 实例创建基本代理部署。如需更多信息,请参阅 第 3.4.1 节 “部署基本代理实例”。
步骤
开始配置自定义资源(CR)实例,为代理部署定义地址和队列。
使用 OpenShift 命令行界面:
以具有部署代理部署的项目中部署 CR 权限的用户身份登录 OpenShift。
oc login -u <user> -p <password> --server=<host:port>
-
打开名为
broker_activemqartemisaddress_cr.yaml
的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有部署代理部署 CR 权限的用户身份登录控制台。
- 根据地址 CRD 启动新的 CR 实例。在左侧窗格中,单击 → 。
- 单击 ActiveMQArtemisAddresss CRD。
- 点 实例 选项卡。
单击 Create ActiveMQArtemisAddress。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
在 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 项目的名称。部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到代理部署的项目。
$ oc project <project_name>
创建 CR 实例。
$ oc create -f <path/to/address_custom_resource_instance>.yaml
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
(可选)要删除之前使用 CR 实例添加到部署中的地址和队列,请使用以下命令:
$ oc delete -f <path/to/address_custom_resource_instance>.yaml
4.2.3. 在基于 Operator 的代理部署中配置的地址设置匹配
如果向客户端发送消息失败,您可能不希望代理持续尝试传送消息。要防止交付无限尝试,您可以定义 死信地址 和关联的 死信队列。在指定数量的交付尝试后,代理会从原始队列中删除未发送的消息,并将消息发送到配置的死信地址。系统管理员以后可以使用无死信队列中的未发送消息来检查消息。
以下示例演示了如何为基于 Operator 的代理部署配置死信地址和队列。这个示例演示了如何:
-
使用主代理自定义资源(CR)实例的
addressSetting
部分来配置地址设置。 - 将这些地址设置与代理部署中的地址匹配。
先决条件
- 您必须对 AMQ Broker 7.8 使用最新版本的 Operator(即 7.8.5-opr-2 版本)。要了解如何将 Operator 升级到最新版本,请参阅 第 6 章 升级基于 Operator 的代理部署。
- 您应该熟悉如何使用 CR 实例创建基本代理部署。如需更多信息,请参阅 第 3.4.1 节 “部署基本代理实例”。
- 您应该熟悉 Operator 合并或替换 CR 实例中指定的配置 的默认 地址设置配置。如需更多信息,请参阅 第 4.1.1 节 “Operator 如何生成地址设置配置”。
步骤
开始配置 CR 实例,添加一个死信地址和队列,以接收部署中的每个代理的未发送消息。
使用 OpenShift 命令行界面:
以具有部署代理部署的项目中部署 CR 权限的用户身份登录 OpenShift。
oc login -u <user> -p <password> --server=<host:port>
-
打开名为
broker_activemqartemisaddress_cr.yaml
的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有部署代理部署 CR 权限的用户身份登录控制台。
- 根据地址 CRD 启动新的 CR 实例。在左侧窗格中,单击 → 。
- 单击 ActiveMQArtemisAddresss CRD。
- 点 实例 选项卡。
单击 Create ActiveMQArtemisAddress。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
在 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 项目的名称。部署地址 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到代理部署的项目。
$ oc project <project_name>
创建地址 CR。
$ oc create -f <path/to/address_custom_resource_instance>.yaml
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
开始为代理部署配置自定义资源(CR)实例。
通过示例 CR 文件:
-
打开名为
broker_activemqartemis_cr.yaml
的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的deploy/crs
目录中。
-
打开名为
使用 OpenShift Container Platform Web 控制台:
- 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 → 。
- 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
单击 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 项目的名称。在 CR 的
deploymentPlan
部分中,添加一个包含单个addressSetting
部分的新addressSettings
部分,如下所示。spec: version: 7.8.5 deploymentPlan: size: 1 image: placeholder requireLogin: false persistenceEnabled: true journalType: nio messageMigration: true addressSettings: addressSetting:
将
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
的单个地址对应。
添加与未发送消息相关的属性并指定值。例如:
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
。
(可选)应用类似的配置到另一个地址或一组地址。例如:
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*'
。在
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
。部署 broker CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
创建 CR 实例。
$ oc create -f <path/to/broker_custom_resource_instance>.yaml
使用 OpenShift Web 控制台:
- 配置完 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 中初始容器的更多信息,请参阅:
- 在部署 pod 之前使用初始容器来执行任务 (OpenShift Container Platform 4.1 及更新的版本)
- init 容器 (OpenShift Container Platform 3.11)
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 可用。
有关置备持久性存储的更多信息,请参阅:
步骤
开始为代理部署配置自定义资源(CR)实例。
使用 OpenShift 命令行界面:
以具有部署部署权限的项目中部署 CR 的用户身份登录 OpenShift。
oc login -u <user> -p <password> --server=<host:port>
-
打开名为
broker_activemqartemis_cr.yaml
的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有部署部署 CR 的项目中部署 CR 权限的用户身份登录控制台。
- 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 → 。
- 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
单击 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 项目的名称。要指定代理存储要求,在 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)。
部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到您要在其中创建代理部署的项目。
$ oc project <project_name>
创建 CR 实例。
$ oc create -f <path/to/custom_resource_instance>.yaml
使用 OpenShift Web 控制台:
- 配置完 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 实例添加限制和请求的配置。您不能将 配置添加到已在运行的代理部署中。
- 红帽无法推荐限制和请求的值,因为它们基于您的特定消息传递系统用例和您所实施的结果构架。但是 , 建议您在开发环境中测试并调整这些值,然后再为生产环境进行配置。
先决条件
- 您必须至少对 AMQ Broker 7.7 使用最新版本的 Operator(即 0.17 版本)。要了解如何将 Operator 升级到 AMQ Broker 7.8 的最新版本,请参阅 第 6 章 升级基于 Operator 的代理部署。
- 您应该熟悉如何使用 CR 实例创建基本代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”。
步骤
开始为代理部署配置自定义资源(CR)实例。
使用 OpenShift 命令行界面:
以具有部署部署权限的项目中部署 CR 的用户身份登录 OpenShift。
oc login -u <user> -p <password> --server=<host:port>
-
打开名为
broker_activemqartemis_cr.yaml
的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有部署部署 CR 的项目中部署 CR 权限的用户身份登录控制台。
- 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 → 。
- 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
单击 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 项目的名称。在 CR 的
deploymentPlan
部分中,添加resources
部分。添加限制和请求
cpu
和memory
属性并指定值。例如: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 中的每个代理容器都请求这个数量的主机内存。这个值是代理容器运行所需的 最小内存量。
部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到您要在其中创建代理部署的项目。
$ oc project <project_name>
创建 CR 实例。
$ oc create -f <path/to/custom_resource_instance>.yaml
使用 OpenShift Web 控制台:
- 配置完 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
脚本访问。
以下流程描述了如何指定自定义初始容器镜像。
先决条件
- 您必须至少 使用 Operator 的 7.8.5-opr-2 版本。要了解如何升级到最新的 Operator 版本,请参阅 第 6 章 升级基于 Operator 的代理部署。
- 您必须已构建了一个自定义的 Init 容器镜像,该镜像符合上述指南。有关为 ArtemisCloud Operator 构建和指定自定义 Init 容器镜像的完整示例,请参阅 基于 JDBC 的持久性的自定义 Init 容器镜像。
- 要为 AMQ Broker Operator 提供自定义 Init Container 镜像,您需要能够将镜像添加到容器 registry(如 Quay 容器 registry )中的存储库中。
- 您应该了解 Operator 如何使用初始容器生成代理配置。如需更多信息,请参阅 第 4.1 节 “Operator 如何生成代理配置”。
- 您应该熟悉如何使用 CR 创建代理部署。如需更多信息,请参阅 第 3.4 节 “创建基于 Operator 的代理部署”。
步骤
开始为代理部署配置自定义资源(CR)实例。
使用 OpenShift 命令行界面:
以具有部署部署权限的项目中部署 CR 的用户身份登录 OpenShift。
oc login -u <user> -p <password> --server=<host:port>
-
打开名为
broker_activemqartemis_cr.yaml
的示例 CR 文件,该文件包括在您下载并提取的 Operator 安装的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以具有部署部署 CR 的项目中部署 CR 权限的用户身份登录控制台。
- 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 → 。
- 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
单击 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 项目的名称。在 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
将
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 中的存储库中。
部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到您要在其中创建代理部署的项目。
$ oc project <project_name>
创建 CR 实例。
$ oc create -f <path/to/custom_resource_instance>.yaml
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
其他资源
- 有关为 ArtemisCloud Operator 构建和指定自定义 Init 容器镜像的完整示例,请参阅 基于 JDBC 的持久性的自定义 Init 容器镜像。
4.6. 为客户端连接配置基于 Operator 的代理部署
4.6.1. 配置接收器
要启用 OpenShift 部署中的代理 Pod 的客户端连接,您可以为部署定义 接收器。接收器定义代理 Pod 接受连接的方式。您可以在用于代理部署的主自定义资源(CR)中定义接收器。当您创建接受者时,您可以指定消息传递协议等信息,以便在接受者上启用,代理 Pod 上的端口用于这些协议。
以下流程演示了如何在 CR 中为代理部署定义新的接受者。
先决条件
- 要配置接收器,您的代理部署必须基于 0.9 或更高版本的 AMQ Broker Operator。有关安装最新版本的 Operator 的更多信息,请参阅 第 3.2 节 “使用 CLI 安装 Operator”。
- 本节中的信息仅适用于基于 AMQ Broker Operator 的代理部署。如果您使用应用程序模板创建代理部署,则无法定义特定于协议的接收器。有关为客户端连接配置这类部署的更多信息,请参阅 第 6 章"将外部客户端连接到基于模板的代理部署"。
步骤
-
在您在初始安装过程中下载并提取的 Operator 归档的
deploy/crs
目录中,打开broker_activemqartis_cr.yaml
自定义资源(CR)文件。 在接收器元素
中
,添加命名的接受者。添加协议和端口
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 管理控制台。
要在同一接受者上使用其他协议,请修改 protocol 参数。
指定以逗号分隔的协议列表。例如:
spec: ... acceptors: - name: my-acceptor protocols: amqp,openwire port: 5672 ...
现在,配置的接收器向 AMQP 和 OpenWire 客户端公开端口 5672。
要指定接受器允许的并发客户端连接数量,请添加
connectionAllowed
参数并设置值。例如:spec: ... acceptors: - name: my-acceptor protocols: amqp,openwire port: 5672 connectionsAllowed: 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
来指定此功能。
其他资源
- 要了解如何将 TLS 配置为安全代理客户端连接,包括生成 secret 来存储身份验证凭据,请参阅 第 4.6.2 节 “保护 broker-client 连接”。
- 有关完整的自定义资源配置参考,包括配置接收器和连接器,请参考 第 11.1 节 “自定义资源配置参考”。
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 中,只有代理提供证书。此证书供客户端用来验证代理。
先决条件
- 在客户端使用主机名验证时,您应该了解代理证书生成的要求。如需更多信息,请参阅 第 4.6.2.1 节 “为主机名验证配置代理证书”。
步骤
为代理密钥存储生成自签名证书。
$ keytool -genkey -alias broker -keyalg RSA -keystore ~/broker.ks
从代理密钥存储中导出证书,以便它可以与客户端共享。以 Base64 编码的
.pem
格式导出证书。例如:$ keytool -export -alias broker -keystore ~/broker.ks -file ~/broker_cert.pem
在客户端,创建导入代理证书的客户端信任存储。
$ keytool -import -alias broker -keystore ~/client.ts -file ~/broker_cert.pem
以管理员身份登录 OpenShift Container Platform。例如:
$ oc login -u system:admin
切换到包含代理部署的项目。例如:
$ oc project my-openshift-project
创建用于存储 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。将 secret 链接到安装 Operator 时创建的服务帐户。例如:
$ oc secrets link sa/amq-broker-operator secret/my-tls-secret
在安全接受或连接器的
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 中,代理和客户端都显示证书。代理和客户端使用这些证书在有时称为相互身份验证的过程中 相互验证。
先决条件
- 在客户端使用主机名验证时,您应该了解代理证书生成的要求。如需更多信息,请参阅 第 4.6.2.1 节 “为主机名验证配置代理证书”。
步骤
为代理密钥存储生成自签名证书。
$ keytool -genkey -alias broker -keyalg RSA -keystore ~/broker.ks
从代理密钥存储中导出证书,以便它可以与客户端共享。以 Base64 编码的
.pem
格式导出证书。例如:$ keytool -export -alias broker -keystore ~/broker.ks -file ~/broker_cert.pem
在客户端,创建导入代理证书的客户端信任存储。
$ keytool -import -alias broker -keystore ~/client.ts -file ~/broker_cert.pem
在客户端上,为客户端密钥存储生成自签名证书。
$ keytool -genkey -alias broker -keyalg RSA -keystore ~/client.ks
在客户端上,从客户端密钥存储中导出证书,以便它可以与代理共享。以 Base64 编码的
.pem
格式导出证书。例如:$ keytool -export -alias broker -keystore ~/client.ks -file ~/client_cert.pem
创建导入客户端证书的代理信任存储。
$ keytool -import -alias broker -keystore ~/broker.ts -file ~/client_cert.pem
以管理员身份登录 OpenShift Container Platform。例如:
$ oc login -u system:admin
切换到包含代理部署的项目。例如:
$ oc project my-openshift-project
创建用于存储 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
键指定的值实际上是 代理 信任存储文件。将 secret 链接到安装 Operator 时创建的服务帐户。例如:
$ oc secrets link sa/amq-broker-operator secret/my-tls-secret
在安全接受或连接器的
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。
其他资源
- 要使用无头服务从内部客户端连接到代理 Pod,请参阅 第 4.6.4.1 节 “从内部客户端连接到代理”。
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.3 节 “代理部署中的网络服务”。
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)与集群中运行的服务进行通信的更多信息,请参阅:
- 配置集群入口流量概述 (OpenShift Container Platform 4.1 及更新的版本)
- 将流量传入集群( OpenShift Container Platform 3.11)
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 消息作为大消息。
先决条件
- 您必须至少对 AMQ Broker 7.7 使用最新版本的 Operator(即 0.17 版本)。要了解如何将 Operator 升级到 AMQ Broker 7.8 的最新版本,请参阅 第 6 章 升级基于 Operator 的代理部署。
- 您应该熟悉如何为基于 Operator 的代理部署配置接收器。请参阅 第 4.6.1 节 “配置接收器”。
要将大型 AMQP 消息存储在专用的大型消息目录中,您的代理部署必须使用持久性存储(即,在用于创建部署的自定义资源(CR)实例中将
持久性
启用设置为true
)。有关配置持久性存储的更多信息,请参阅:
步骤
打开之前定义 AMQP 接受者的自定义资源(CR)实例。
使用 OpenShift 命令行界面:
$ oc edit -f <path/to/custom-resource-instance>.yaml
使用 OpenShift Container Platform Web 控制台:
- 在左侧导航菜单中点击 →
-
单击
ActiveMQArtemis
CRD。 -
点
实例
选项卡。 - 查找与项目命名空间对应的 CR 实例。
之前配置的 AMQP 接受器可能类似如下:
spec: ... acceptors: - name: my-acceptor protocols: amqp port: 5672 connectionsAllowed: 5 expose: true sslEnabled: true ...
指定代理作为大型消息的 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 仍然在运行。
当代理 Pod 关闭时,AMQ Broker Operator 会自动启动一个 扩展控制器,该控制器将执行消息迁移到仍在代理集群中运行的另一代理 Pod。此消息迁移过程也称为 Pod 排空操作。下面的部分描述了消息迁移。
4.8.2. 消息迁移
当集群部署中的代理因为部署失败或意图部署而关闭时,消息迁移是如何确保消息传递数据的完整性。也称为 Pod 排空功能,这个过程指的是从已关闭的代理 Pod 中删除和重新分配信息。
- 消息迁移 仅适用于 基于 AMQ Broker Operator 的部署。基于应用模板的部署 没有 消息迁移功能。
- 执行消息迁移的扩展控制器只能在单个 OpenShift 项目中运行。控制器无法在单独的项目中的代理之间迁移消息。
- 要使用消息迁移,您的部署中必须至少有两个代理。默认集群有两个或更多代理的代理。
对于基于 Operator 的代理部署,您可以在部署的主代理资源中将 messageMigration
设置为 true
来启用消息迁移。
消息迁移过程遵循以下步骤:
- 当因为部署中的代理 Pod 失败或意图缩减而关闭时,Operator 会自动启动一个缩减控制器来为消息迁移做准备。扩展控制器在与代理集群相同的 OpenShift 项目名称中运行。
- 缩减控制器自行注册并侦听与项目中的持久性卷声明(PVC)相关的 Kubernetes 事件。
要检查已孤立的持久性卷(PV),扩展控制器会查看卷声明中的孤立卷。控制器将卷声明中的 或dinal 与您项目中仍运行的代理 Pod(即代理集群)中的代理 Pod 进行比较。
如果卷声明中的 ordinal 高于代理集群中运行的任何代理 Pod 的 ordinal,则扩展控制器决定在那个或非插件关闭时代理 Pod,且消息传递数据必须迁移到另一个代理 Pod。
缩减控制器启动排空器 Pod。drainer Pod 运行代理并执行消息迁移。然后,drainer Pod 会标识一个替代的代理 Pod,可将孤立消息迁移到该 Pod。
注意部署中必须至少有一个代理 Pod 仍然在部署中运行,以便进行消息迁移。
下图显示了扩展控制器(也称为 drain控制器)如何将消息迁移到正在运行的代理 Pod。
当消息成功迁移到操作代理 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。
以下示例显示了扩展控制器的行为。
先决条件
- 您已有一个基本的代理部署。请参阅 第 3.4.1 节 “部署基本代理实例”。
- 您应该了解消息迁移如何工作。如需更多信息,请参阅 第 4.8.2 节 “消息迁移”。
步骤
-
在最初下载并提取的 Operator 存储库的
deploy/crs
目录中,打开主代理 CR,broker_activemqartemis_cr.yaml
。 在主代理 CR 中,将
messageMigration
和persistenceEnabled
设置为true
。这些设置意味着,当稍后缩减集群代理部署的大小时,Operator 会自动启动扩展控制器,并将信息迁移到仍在运行的代理 Pod 中。
在现有的代理部署中,验证哪些 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。
登录到每个 Pod,并将一些信息发送到每个代理。
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
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 个消息添加到每个队列。
将集群从两个代理缩减到一。
-
打开主代理 CR,
broker_activemqartemis_cr.yaml
。 -
在 CR 中,将
deploymentPlan.size
设置为1
。 在命令行中应用更改:
$ oc apply -f deploy/crs/broker_activemqartemis_cr.yaml
您会看到 Pod
ex-ao-ss-1
开始关闭。扩展控制器启动相同名称的新排空器 Pod。这个 drainer Pod 还会在将代理 Podex-ao-ss-1
的所有消息迁移到集群中的其他代理 Pod 后关闭,即ex-aao-ss-0
。
-
打开主代理 CR,
-
关闭 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 的控制台。
步骤
在 OpenShift Container Platform web 控制台中,点
→ (OpenShift Container Platform 4.5 或更高版本)或 → (OpenShift Container Platform 3.11)。在 Routes 页面中,识别给定代理 Pod 的
wconsj
Route。例如:my-broker-deployment-wconsj-0-svc-rte
。在 Location (OpenShift Container Platform 4.5 或更高版本) 或主机名 下(OpenShift Container Platform 3.11)下,点击与路由对应的链接。
在 Web 浏览器中打开一个新标签页。
点 Management Console 链接。
此时会打开 AMQ Management Console 登录页面。
要登录到控制台,请在用于创建代理部署的自定义资源(CR)实例中输入
adminUser
和adminPassword
属性指定的值。如果在 CR 中没有为
adminUser
和adminPassword
明确指定值,请按照 第 5.2 节 “访问 AMQ 管理控制台登录凭证” 中的说明检索登录到控制台所需的凭证。注意只有 将 CR 的
requireLogin
属性设置为true
,才需要adminUser
和adminPassword
的值来登录控制台。此属性指定是否需要登录到 代理和 控制台的登录凭证。如果requireLogin
设置为false
,则具有 OpenShift 项目的管理员特权的任何用户可以登录到控制台。
5.2. 访问 AMQ 管理控制台登录凭证
如果您没有在用于代理部署的自定义资源(CR)实例中指定 adminUser
和 adminPassword
的值,Operator 会自动生成这些凭证并将其存储在 secret 中。默认 secret 名称格式为 <custom-resource-name>-credentials-secret
,如 my-broker-deployment-credentials-secret
。
只有 将 CR 的 requireLogin
参数设置为 true
,才需要 adminUser
和 adminPassword
的值来登录管理控制台。如果 requireLogin
设置为 false
,则具有 OpenShift 项目的管理员特权的任何用户可以登录到控制台。
此步骤显示如何访问登录凭证。
步骤
请参阅 OpenShift 项目中机密的完整列表。
- 在 OpenShift Container Platform web 控制台中,点 → (OpenShift Container Platform 4.5 或更高版本)或 → (OpenShift Container Platform 3.11)。
在命令行中:
$ oc get secrets
打开适当的 secret,以显示 Base64 编码的控制台登录凭证。
- 在 OpenShift Container Platform web 控制台中,在其名称中点包含代理自定义资源实例的 secret。点 YAML 标签页(OpenShift Container Platform 4.5 或更高版本)或 → (OpenShift Container Platform 3.11)。
在命令行中:
$ oc edit secret <my-broker-deployment-credentials-secret>
要解码 secret 中的值,请使用以下命令:
$ echo 'dXNlcl9uYW1l' | base64 --decode console_admin
其他资源
- 如需了解更多有关使用 AMQ Management Console 查看和管理代理的信息,请参阅在 管理 AMQ Broker 中使用 AMQ Management Console 管理代理
第 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 控制台中的项目的 下会出现),则还应使用 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 控制台中的项目的 下会出现 Operator),则应使用 OperatorHub 来升级 Operator。要了解如何使用 OperatorHub 升级 Operator,请参阅 第 6.3 节 “使用 OperatorHub 升级 Operator”。
6.2.2. 升级 Operator 的 0.19 版本
此流程演示了如何使用 OpenShift 命令行界面(CLI)将 Operator 的 0.19 版本升级到 AMQ Broker 7.8 的最新版本。
步骤
- 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
-
确保将 Version 下拉列表的值设置为
7.8.5
,并且选择了 Patches 选项卡。 在 AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download。
下载
amq-broker-operator-7.8.5-ocp-install-examples.zip
压缩存档会自动开始。下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为
~/broker/operator
的目录。mkdir ~/broker/operator mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
在您选择的安装目录中,提取存档的内容。例如:
cd ~/broker/operator unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
以包含现有 Operator 部署的项目的管理员身份登录 OpenShift Container Platform。
$ oc login -u <user>
切换到您要升级 Operator 版本的 OpenShift 项目。
$ oc project <project-name>
在您下载并提取的最新 Operator 归档的部署目录中,打开
operator.yaml
文件。注意在
operator.yaml
文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#
)符号开头,表示 SHA 值对应于特定的容器镜像标签。-
为之前的 Operator 部署打开
operator.yaml
文件。检查您在之前配置中指定的任何非默认值是否已 在新的operator.yaml
配置文件中复制。 -
如果您对 新的
operator.yaml
文件进行了任何更新,请保存文件。 应用更新的 Operator 配置。
$ oc apply -f deploy/operator.yaml
OpenShift 会更新项目以使用最新的 Operator 版本。
-
要重新创建之前的代理部署,请创建一个新的 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 的最新版本。
步骤
- 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
-
确保将 Version 下拉列表的值设置为
7.8.5
,并且选择了 Patches 选项卡。 在 AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download。
下载
amq-broker-operator-7.8.5-ocp-install-examples.zip
压缩存档会自动开始。下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为
~/broker/operator
的目录。mkdir ~/broker/operator mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
在您选择的安装目录中,提取存档的内容。例如:
cd ~/broker/operator unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
以包含现有 Operator 部署的项目的管理员身份登录 OpenShift Container Platform。
$ oc login -u <user>
切换到您要升级 Operator 版本的 OpenShift 项目。
$ oc project <project-name>
在您下载并提取的最新 Operator 归档的部署目录中,打开
operator.yaml
文件。注意在
operator.yaml
文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#
)符号开头,表示 SHA 值对应于特定的容器镜像标签。为之前的 Operator 部署打开
operator.yaml
文件。检查您在之前配置中指定的任何非默认值是否已 在新的operator.yaml
配置文件中复制。注意Operator 的 0.18 版本的
operator.yaml
文件包括环境变量,其名称以BROKER_IMAGE
开头。不要在 新配置中复制这些环境变量。AMQ Broker 7.8 的 Operator 的最新版本不再使用这些环境变量。-
如果您对 新的
operator.yaml
文件进行了任何更新,请保存文件。 应用更新的 Operator 配置。
$ oc apply -f deploy/operator.yaml
OpenShift 会更新项目以使用最新的 Operator 版本。
-
要重新创建之前的代理部署,请创建一个新的 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 的最新版本。
步骤
- 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
-
确保将 Version 下拉列表的值设置为
7.8.5
,并且选择了 Patches 选项卡。 在 AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download。
下载
amq-broker-operator-7.8.5-ocp-install-examples.zip
压缩存档会自动开始。下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为
~/broker/operator
的目录。mkdir ~/broker/operator mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
在您选择的安装目录中,提取存档的内容。例如:
cd ~/broker/operator unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
以集群管理员身份登录 OpenShift Container Platform。例如:
$ oc login -u system:admin
切换到您要升级 Operator 版本的 OpenShift 项目。
$ oc project <project-name>
删除项目中的主代理自定义资源(CR)实例。这也会删除代理部署。例如:
$ oc delete -f deploy/crs/broker_activemqartemis_cr.yaml
将 OpenShift 集群中的主要代理自定义资源定义(CRD)更新至最新版本。
$ oc apply -f deploy/crds/broker_activemqartemis_crd.yaml
注意您不需要使用 最新版本的 CRD 来更新集群寻址或扩展控制器。这些 CRD 与之前 Operator 版本中包含的完全兼容。
在您下载并提取的最新 Operator 归档的部署目录中,打开
operator.yaml
文件。注意在
operator.yaml
文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#
)符号开头,表示 SHA 值对应于特定的容器镜像标签。为之前的 Operator 部署打开
operator.yaml
文件。检查您在之前配置中指定的任何非默认值是否已 在新的operator.yaml
配置文件中复制。注意Operator 的 0.17 版本的
operator.yaml
文件包括环境变量,其名称以BROKER_IMAGE
开头。不要在 新配置中复制这些环境变量。AMQ Broker 7.8 的 Operator 的最新版本不再使用这些环境变量。-
如果您对 新的
operator.yaml
文件进行了任何更新,请保存文件。 应用更新的 Operator 配置。
$ oc apply -f deploy/operator.yaml
OpenShift 会更新项目以使用最新的 Operator 版本。
-
要重新创建之前的代理部署,请创建一个新的 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 的最新版本。
步骤
- 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
-
确保将 Version 下拉列表的值设置为
7.8.5
,并且选择了 Patches 选项卡。 在 AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download。
下载
amq-broker-operator-7.8.5-ocp-install-examples.zip
压缩存档会自动开始。下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为
~/broker/operator
的目录。mkdir ~/broker/operator mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
在您选择的安装目录中,提取存档的内容。例如:
cd ~/broker/operator unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
以集群管理员身份登录 OpenShift Container Platform。例如:
$ oc login -u system:admin
切换到您要升级 Operator 版本的 OpenShift 项目。
$ oc project <project-name>
删除项目中的主代理自定义资源(CR)实例。这也会删除代理部署。例如:
$ oc delete -f deploy/crs/broker_activemqartemis_cr.yaml
将 OpenShift 集群中的主要代理自定义资源定义(CRD)更新至最新版本。
$ oc apply -f deploy/crds/broker_activemqartemis_crd.yaml
注意您不需要使用 最新版本的 CRD 来更新集群寻址或扩展控制器。这些 CRD 与之前 Operator 版本中包含的完全兼容。
在您下载并提取的最新 Operator 归档的部署目录中,打开
operator.yaml
文件。注意在
operator.yaml
文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#
)符号开头,表示 SHA 值对应于特定的容器镜像标签。为之前的 Operator 部署打开
operator.yaml
文件。检查您在之前配置中指定的任何非默认值是否已 在新的operator.yaml
配置文件中复制。注意Operator 的 0.15 版本的
operator.yaml
文件包括环境变量,其名称以BROKER_IMAGE
开头。不要在 新配置中复制这些环境变量。AMQ Broker 7.8 的 Operator 的最新版本不再使用这些环境变量。-
如果您对 新的
operator.yaml
文件进行了任何更新,请保存文件。 应用更新的 Operator 配置。
$ oc apply -f deploy/operator.yaml
OpenShift 会更新项目以使用最新的 Operator 版本。
-
要重新创建之前的代理部署,请创建一个新的 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 的最新版本。
步骤
- 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
-
确保将 Version 下拉列表的值设置为
7.8.5
,并且选择了 Patches 选项卡。 在 AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download。
下载
amq-broker-operator-7.8.5-ocp-install-examples.zip
压缩存档会自动开始。下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为
~/broker/operator
的目录。mkdir ~/broker/operator mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
在您选择的安装目录中,提取存档的内容。例如:
cd ~/broker/operator unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
以集群管理员身份登录 OpenShift Container Platform。例如:
$ oc login -u system:admin
切换到您要升级 Operator 版本的 OpenShift 项目。
$ oc project <project-name>
删除项目中的主代理自定义资源(CR)实例。这也会删除代理部署。例如:
$ oc delete -f deploy/crs/broker_activemqartemis_cr.yaml
将 OpenShift 集群中的主要代理自定义资源定义(CRD)更新至最新版本。
$ oc apply -f deploy/crds/broker_activemqartemis_crd.yaml
将 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 一起完全兼容。
在您下载并提取的最新 Operator 归档的部署目录中,打开
operator.yaml
文件。注意在
operator.yaml
文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#
)符号开头,表示 SHA 值对应于特定的容器镜像标签。-
为之前的 Operator 部署打开
operator.yaml
文件。检查您在之前配置中指定的任何非默认值是否已 在新的operator.yaml
配置文件中复制。 -
如果您对 新的
operator.yaml
文件进行了任何更新,请保存文件。 应用更新的 Operator 配置。
$ oc apply -f deploy/operator.yaml
OpenShift 会更新项目以使用最新的 Operator 版本。
6.2.7. 升级 Operator 的 0.9 版本
以下流程演示了如何使用 OpenShift 命令行界面(CLI)将 Operator 的 0.9 版本升级为 AMQ Broker 7.8 的最新版本。
步骤
- 在网页浏览器中,导航到 AMQ Broker 7.8.5 补丁的 Software Downloads 页面。
-
确保将 Version 下拉列表的值设置为
7.8.5
,并且选择了 Patches 选项卡。 在 AMQ Broker 7.8.5 .3 Operator 安装和示例文件旁边,点 Download。
下载
amq-broker-operator-7.8.5-ocp-install-examples.zip
压缩存档会自动开始。下载完成后,将归档移至您选择的安装目录。以下示例将存档移到名为
~/broker/operator
的目录。mkdir ~/broker/operator mv amq-broker-operator-7.8.5-ocp-install-examples.zip ~/broker/operator
在您选择的安装目录中,提取存档的内容。例如:
cd ~/broker/operator unzip amq-broker-operator-7.8.5-ocp-install-examples.zip
以集群管理员身份登录 OpenShift Container Platform。例如:
$ oc login -u system:admin
切换到您要升级 Operator 版本的 OpenShift 项目。
$ oc project <project-name>
删除项目中的主代理自定义资源(CR)实例。这也会删除代理部署。例如:
$ oc delete -f deploy/crs/broker_v2alpha1_activemqartemis_cr.yaml
将 OpenShift 集群中的主代理自定义资源定义(CRD)更新至 AMQ Broker 7.8 中包含的最新版本。
$ oc apply -f deploy/crds/broker_activemqartemis_crd.yaml
将 OpenShift 集群中的地址 CRD 更新至 AMQ Broker 7.8 中包含的最新版本。
$ oc apply -f deploy/crds/broker_activemqartemisaddress_crd.yaml
注意您不需要 使用扩展控制器的 CRD 的最新版本更新集群。在 AMQ Broker 7.8 中,此 CRD 与之前 Operator 版本中包含的完全兼容。
在您下载并提取的最新 Operator 归档的部署目录中,打开
operator.yaml
文件。注意在
operator.yaml
文件中,Operator 使用一个由 安全 Hash Algorithm (SHA)值表示的镜像。注释行以数字符号(#
)符号开头,表示 SHA 值对应于特定的容器镜像标签。-
为之前的 Operator 部署打开
operator.yaml
文件。检查您在之前配置中指定的任何非默认值是否已 在新的operator.yaml
配置文件中复制。 -
如果您对 新的
operator.yaml
文件进行了任何更新,请保存文件。 应用更新的 Operator 配置。
$ oc apply -f deploy/operator.yaml
OpenShift 会更新项目以使用最新的 Operator 版本。
-
要重新创建之前的代理部署,请创建一个新的 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 控制台的项目的 → 下)。相反,如果您最初使用 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 实例。
步骤
- 以集群管理员身份登录 OpenShift Container Platform Web 控制台。
删除项目中代理部署的主要自定义资源(CR)实例。此操作会删除代理部署。
- 在左侧导航菜单中,点 → 。
- 在 Custom Resource Definitions 页面上,单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
- 查找与项目命名空间对应的 CR 实例。
- 对于 CR 实例,在右侧点击 More Options 图标(three vertical dots)。选择 Delete ActiveMQArtemis。
从项目中卸载现有的 AMQ Broker Operator。
- 在左侧导航菜单中,点 → 。
- 在页面顶部的 Project 下拉菜单中选择您要卸载 Operator 的项目。
- 找到您要卸载的 Red Hat Integration - AMQ Broker 实例。
- 对于 Operator 实例,点击右侧的 More Options 图标(three vertical dots)。点击 Uninstall Operator。
- 在确认对话框中点 Uninstall。
- 使用 OperatorHub 为 AMQ Broker 7.8 安装最新版本的 Operator。如需更多信息,请参阅 第 3.3.3 节 “从 OperatorHub 部署 Operator”。
-
要重新创建之前的代理部署,请创建一个新的 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
属性已设置为 true
,spec.version
属性指定 7.7.0
或 7.8.0
。要升级 代理容器镜像,您需要手动指定一个新的 AMQ Broker 版本(如 7.8.5
)。当您指定 AMQ Broker 的新版本时,Operator 会自动选择与此版本对应的代理容器镜像。
先决条件
您必须使用最新版本的 7.8.5。要了解如何将 Operator 升级到最新版本,请参阅:
- 如 第 2.4 节 “Operator 如何选择容器镜像” 所述,如果部署 CR 且没有明确指定代理容器镜像,Operator 会自动选择要使用的适当容器镜像。要使用本节中描述的升级过程,您必须使用 这个默认行为。如果在 CR 中直接指定代理容器镜像来覆盖默认行为,Operator 将无法 自动升级代理容器镜像以与 AMQ Broker 版本对应。
步骤
编辑代理部署的主代理 CR 实例。
使用 OpenShift 命令行界面:
以具有编辑和部署 CR 的用户身份登录到 OpenShift,以供代理部署。
$ oc login -u <user> -p <password> --server=<host:port>
-
在文本编辑器中,打开用于代理部署的 CR 文件。例如,这可能是您之前下载并提取的 Operator 安装的
deploy/crs
目录中包含的broker_activemqartemis_cr.yaml
文件。
使用 OpenShift Container Platform Web 控制台:
- 以有权编辑和部署项目中 CR 的用户身份登录控制台,以进行代理部署。
- 在左侧窗格中,单击 → 。
- 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
- 查找与项目命名空间对应的 CR 实例。
对于 CR 实例,在右侧点击 More Options 图标(three vertical dots)。选择 Edit ActiveMQArtemis。
在控制台中,会打开 YAML 编辑器,供您编辑 CR 实例。
要指定将代理容器镜像升级到的 AMQ Broker 版本,请为 CR 的
spec.version
属性设置一个值。例如:spec: version: 7.8.5 ...
在 CR 的
spec
部分,找到upgrade
部分。如果这个部分还没有包含在 CR 中,请添加它。spec: version: 7.8.5 ... upgrades:
确保 upgrade
部分包含
enabled
和minor
属性。spec: version: 7.8.5 ... upgrades: enabled: minor:
要启用基于指定版本的 AMQ Broker 的代理容器镜像升级,请将
enabled
属性的值设置为true
。spec: version: 7.8.5 ... upgrades: enabled: true minor:
要定义代理的升级行为,请为
minor
属性设置一个值。要允许在 次要 AMQ Broker 版本间升级,请将
minor
的值设置为true
。spec: version: 7.8.5 ... upgrades: enabled: true minor: true
例如,假设当前代理容器镜像对应于
7.7.0
,以及一个与为spec.version
指定的7.8.5
版本对应的新镜像。在这种情况下,Operator 决定在7.7
和7.8
次版本间有可用的升级。根据前面的设置,允许次版本间的升级,Operator 会升级代理容器镜像。相反,假设当前代理容器镜像对应于
7.8.0
和新镜像,对应于为spec.version
指定的7.8.5
版本。在这种情况下,Operator 决定在7.8.0
和7.8.5
微版本之间有可用的升级。根据前面的设置,这只允许在次版本间升级,Operator 不会 升级代理容器镜像。要允许在 微 AMQ Broker 版本间升级,请将
minor
的值设为false
。spec: version: 7.8.5 ... upgrades: enabled: true minor: false
例如,假设当前代理容器镜像对应于
7.7.0
,以及一个与为spec.version
指定的7.8.5
版本对应的新镜像。在这种情况下,Operator 决定在7.7
和7.8
次版本间有可用的升级。根据前面的设置,这不允许在次版本之间升级(这只在微版本之间升级),Operator 不会 升级代理容器镜像。相反,假设当前代理容器镜像对应于
7.8.0
和新镜像,对应于为spec.version
指定的7.8.5
版本。在这种情况下,Operator 决定在7.8.0
和7.8.5
微版本之间有可用的升级。根据允许在微版本之间升级的设置,Operator 会升级代理容器镜像。
将更改应用到 CR。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到代理部署的项目。
$ oc project <project_name>
应用 CR。
$ oc apply -f <path/to/broker_custom_resource_instance>.yaml
使用 OpenShift Web 控制台:
- 编辑完 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 会关闭并重启。
其他资源
- 要了解 Operator 如何使用环境变量来选择代理容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”。
第 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. 先决条件
- 您应该已读取在 OpenShift Container Platform 上部署 AMQ Broker 的方法比较。对于新部署,红帽建议使用 AMQ Broker Operator。如需更多信息,请参阅 第 2 章 规划在 OpenShift Container Platform 上部署 AMQ Broker。
7.2. 安装镜像流和应用程序模板
OpenShift Container Platform 镜像流和应用程序模板上的 AMQ Broker 默认在 OpenShift Container Platform 中不可用。您必须使用本节中的步骤手动安装它们。完成手动安装后,您可以实例化模板,以便您可以在 OpenShift 集群上部署所选代理配置。有关以这种方式创建各种代理配置的示例,请参阅使用应用程序模板和 基于模板的代理部署示例 在 OpenShift Container Platform 上部署 AMQ Broker。
步骤
在命令行中,以集群管理员登录 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 原生资源,它们 只能 消耗来自模板要实例化的同一项目命名空间中的镜像流。在命令行中,运行以下命令将代理镜像流导入到项目命名空间中。将
--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
运行以下命令以更新 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
。
步骤
使用命令提示符创建新项目:
$ oc new-project amq-demo
创建用于 AMQ Broker 部署的服务帐户:
$ echo '{"kind": "ServiceAccount", "apiVersion": "v1", "metadata": {"name": "amq-service-account"}}' | oc create -f -
将 view 角色添加到服务帐户。view 角色可让服务帐户查看 amq-demo 命名空间中的所有资源,在使用 OpenShift dns-ping 协议发现代理集群时,这是管理集群所必需的。
$ oc policy add-role-to-user view system:serviceaccount:amq-demo:amq-service-account
AMQ Broker 需要代理密钥存储、客户端密钥存储,以及包含代理密钥存储的客户端信任存储。这个示例使用 Java Keytool 是 Java Development Kit 中包含的软件包来生成 dummy 凭证,用于 AMQ Broker 安装。
为代理密钥存储生成自签名证书:
$ keytool -genkey -alias broker -keyalg RSA -keystore broker.ks
导出证书以便可以与客户端共享:
$ keytool -export -alias broker -keystore broker.ks -file broker_cert
为客户端密钥存储生成自签名证书:
$ keytool -genkey -alias client -keyalg RSA -keystore client.ks
创建导入代理证书的客户端信任存储:
$ keytool -import -alias broker -keystore client.ts -file broker_cert
使用代理密钥存储文件创建 AMQ Broker secret:
$ oc create secret generic amq-app-secret --from-file=broker.ks
将 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. 创建代理应用程序
步骤
登录到
amq-demo
项目空间或要在其中部署代理的现有项目。$ oc login -u <USER_NAME> $ oc project <PROJECT_NAME>
根据基本代理的模板创建新代理应用程序。此模板创建的代理是临时的,不支持 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 以便代理运行。
步骤
- 在 OpenShift Container Platform Web 控制台中,单击 Deployments。
- 点 broker-amq 应用程序。
单击 Deploy。
注意如果应用程序没有部署,您可以点击 Events 选项卡来检查配置。如果错误不正确,请单击 Actions 按钮来编辑部署配置。
部署代理应用程序后,检查代理 Pod 的当前状态。
- 点 DeploymentConfig。
点 broker-amq Pod,然后点 Logs 选项卡验证代理的状态。您应该会看到之前通过应用程序模板创建的队列。
如果日志显示:
- 代理正在运行,跳至此步骤的第 9 步。
-
代理日志没有加载,Pod 状态会显示
ErrImagePull
或ImagePullBackOff
,您的部署配置无法直接从红帽容器注册表中提取指定的代理镜像。在这种情况下,请继续这个过程的第 5 步。
要准备 Pod 用于安装代理容器镜像,请将正在运行的代理数量扩展为
0。
- 点 → 。
- 点 → 。
-
在部署配置
.yaml
文件中,将replicas
属性的值设置为0。
-
点击
Save
。 - pod 重启,零代理实例正在运行。
安装最新的代理容器镜像。
- 在 Web 浏览器中,导航到 Red Hat Container Catalog。
-
在搜索框中输入
AMQ Broker
。点 Search。 根据下表中的信息,选择镜像存储库。
平台(存档) 容器镜像名称 仓库名称 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 选项卡,然后选择另一个版本标签。- 点 Get this Image 选项卡。
在通过 注册表令牌进行身份验证 后,请查看 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}
- 点击 Save。
将最新的代理镜像版本导入到项目命名空间中。例如:
$ oc import-image amq7/amq-broker:7.8 --from=registry.redhat.io/amq7/amq-broker --confirm
按照前面所述,再次编辑
broker-amq
部署配置。将replicas
属性的值重新设置为其原始值。代理 Pod 重启,所有正在运行的代理都引用新的代理镜像。
点击 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 部署基本代理。
步骤
为代理密钥存储生成自签名证书:
$ keytool -genkey -alias broker -keyalg RSA -keystore broker.ks
导出证书以便可以与客户端共享:
$ keytool -export -alias broker -keystore broker.ks -file broker_cert
为客户端密钥存储生成自签名证书:
$ keytool -genkey -alias client -keyalg RSA -keystore client.ks
创建导入代理证书的客户端信任存储:
$ keytool -import -alias broker -keystore client.ts -file broker_cert
从密钥存储导出客户端的证书:
$ keytool -export -alias client -keystore client.ks -file client_cert
将客户端的导出证书导入到代理 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
模板参数在以逗号分隔的列表中指定代理使用的消息传递协议。可用选项包括 amqp
、mqtt
、Openwire
、stomp
和 hornetq
。如果没有指定任何协议,则所有协议都可用。
对于代理使用的每个消息传递协议,OpenShift 会在代理 Pod 上公开专用端口。另外,OpenShift 会自动创建 多个协议端口。OpenShift 外部的客户端应用程序始终使用多个,所有协议端口都连接到代理,无论它们正在使用的支持的协议是什么。
与所有协议端口的连接都是通过 OpenShift 自动创建的服务,以及您创建的 SSL 路由。代理 Pod 中的无头服务提供了对其他协议特定端口的访问,该端口没有他们自己的服务和路由,供客户端直接访问。
OpenShift 为各种 AMQ Broker 传输协议公开的端口显示在下表中。代理侦听 OpenShift 集群中流量的非 SSL 端口。如果您使用基于 SSL 的(即 *-ssl.yaml
)模板创建部署,代理会侦听来自 OpenShift 之外的客户端流量的 SSL 启用端口。
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"); ...
其他资源
- 有关部署支持 SSL 和创建 SSL 路由以启用外部客户端访问的代理的完整示例,请参阅使用 SSL 部署基本代理。
- 有关为集群代理创建路由示例,以连接到其 AMQ Broker 管理控制台的实例,请参阅为 AMQ Broker 管理控制台创建路由。
第 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. 部署镜像和模板
先决条件
- 本教程的内容基于 准备基于模板的代理部署而构建。
- 建议 完成部署基本代理 教程。
步骤
- 导航到 OpenShift Web 控制台并登录。
-
选择
amq-demo
项目空间。 - 点 Add to Project > Browse Catalog 来列出所有默认镜像流和模板。
-
使用 Filter 搜索栏,将列表限制为与
amq
匹配的列表。您可能需要点击 See all 来显示所需的应用程序模板。 -
选择标记为
Red Hat AMQ Broker 7.8(使用 SSL)
的amq-broker-78-ssl
模板。 在配置中设置以下值,并点 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 并启动代理。
步骤
- 在 OpenShift Container Platform Web 控制台中,单击 Deployments。
- 点 broker-amq 部署。
- 单击 Deploy 以部署应用。
点代理 Pod,然后点 Logs 选项卡验证代理的状态。
如果代理日志没有加载,Pod 状态显示
ErrImagePull
或ImagePullBackOff
,您的部署配置无法直接从红帽容器注册表中提取指定的代理镜像。在这种情况下,编辑部署配置以引用与 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 路由。
步骤
- 单击 → 。
- 点击 → 。
- 要显示 TLS 参数,请选择 Secure route 复选框。
- 在 TLS 终止 下拉菜单中选择 Passthrough。此选择将所有通信转发到 AMQ Broker,无需 OpenShift 路由器解密并重新发送它。
要查看路由,请点击 Routes。例如:
https://broker-amq-tcp-amq-demo.router.default.svc.cluster.local
外部客户端将使用此主机名通过 SNI 使用 SSL 连接代理。
其他资源
- 有关创建 SSL 路由的更多信息,请参阅创建 SSL 路由。
- 如需有关 OpenShift Container Platform 中的路由的更多信息,请参阅路由。https://docs.openshift.com/container-platform/3.4/architecture/core_concepts/routes.html
8.2. 使用持久性和 SSL 部署基本代理
部署支持 SSL 的持久代理。当代理需要持久性时,代理被部署为 StatefulSet,并通过持久性卷声明将消息传递数据存储在与代理 Pod 关联的持久性卷中。创建代理 Pod 时,它会在关闭 Pod 时保留存储,或者 Pod 意外关闭。此配置意味着消息不会丢失,因为它们使用标准部署。
先决条件
- 本教程的内容基于 准备基于模板的代理部署而构建。
- 建议 完成部署基本代理 教程。
- 您必须有足够的持久性存储来通过持久性卷声明与您的代理 Pod 关联。如需更多信息,请参阅了解持久性存储 (OpenShift Container Platform 4.5)
8.2.1. 部署镜像和模板
步骤
- 导航到 OpenShift Web 控制台并登录。
-
选择
amq-demo
项目空间。 - 点击 → ,以列出所有默认镜像流和模板。
-
使用 Filter 搜索栏,将列表限制为与
amq
匹配的列表。您可能需要点击 See all 来显示所需的应用程序模板。 -
选择
amq-broker-78-persistence-ssl
模板,该模板已被标记Red Hat AMQ Broker 7.8(Persistence),使用 SSL
。 在配置中设置以下值,然后单击 创建。
表 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 并启动代理。
步骤
- 在 OpenShift Container Platform web 控制台中点 StatefulSets。
- 点 broker-amq 部署。
- 单击 Deploy 以部署应用。
点代理 Pod,然后点 Logs 选项卡验证代理的状态。您应该会看到通过模板创建的队列。
如果代理日志没有加载,Pod 状态会显示
ErrImagePull
或ImagePullBackOff
,您的配置无法直接从红帽容器注册表中提取指定的代理镜像。在这种情况下,编辑部署配置以引用与 Red Hat Container Registry 中用于身份验证的帐户关联的正确代理镜像名称和镜像 pull secret 名称。然后,您可以导入代理镜像并启动代理。为此,请完成与部署和启动 代理应用程序 类似的步骤。点 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>
现在使用 oc 命令缩减代理。
$ oc scale statefulset broker-amq --replicas=0 statefulset "broker-amq" scaled
您可以使用控制台检查 Pod 计数是否为 0
现在,将代理备份为
1
。$ oc scale statefulset broker-amq --replicas=1 statefulset "broker-amq" scaled
使用终端再次消耗消息。例如:
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 路由。
步骤
- 单击 → 。
- 点击 → 。
- 要显示 TLS 参数,请选择 Secure route 复选框。
- 在 TLS 终止 下拉菜单中选择 Passthrough。此选择将所有通信转发到 AMQ Broker,无需 OpenShift 路由器解密并重新发送它。
要查看路由,请点击 Routes。例如:
https://broker-amq-tcp-amq-demo.router.default.svc.cluster.local
外部客户端将使用此主机名通过 SNI 使用 SSL 连接代理。
其他资源
- 如需有关 OpenShift Container Platform 中的路由的更多信息,请参阅路由。https://docs.openshift.com/container-platform/3.4/architecture/core_concepts/routes.html
8.3. 部署一组集群代理
部署一组集群代理,每个代理在其自己的 Pod 中运行。
8.3.1. 分发消息
消息分发配置为使用 ON_DEMAND。这意味着,当消息到达集群代理时,消息会以轮循方式分发给具有使用者的任何代理。
此消息分发策略可以保护在特定代理上卡住的消息,而使用者则通过 OpenShift 路由器直接或通过 OpenShift 路由器连接到不同的代理。
默认情况下,重新发布延迟为零。如果消息位于没有消费者的队列中,它将重新分发到另一个代理。
启用重新分发后,消息可以按顺序发送。
8.3.2. 部署镜像和模板
先决条件
- 此流程在 准备基于模板的代理部署后构建。
- 建议 完成部署基本代理 教程。
步骤
- 导航到 OpenShift Web 控制台并登录。
-
选择
amq-demo
项目空间。 - 点击 Add to Project > Browse catalog,以列出所有默认镜像流和模板
-
使用 Filter 搜索栏,将列表限制为与
amq
匹配的列表。点 See all 显示所需的应用程序模板。 -
选择
amq-broker-78-persistence-clustered
模板,该模板标记为Red Hat AMQ Broker 7.8(无 SSL,集群)。
在配置中设置以下值,然后单击 创建。
表 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 并启动代理。
步骤
- 在 OpenShift Container Platform web 控制台中点 StatefulSets。
- 点 broker-amq 部署。
单击 Deploy 以部署应用。
注意集群模板的默认副本数为 0。您应该不会看到任何 Pod。
将 Pod 扩展至三个,以创建代理集群。
$ oc scale statefulset broker-amq --replicas=3 statefulset "broker-amq" scaled
检查是否有三个 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
-
如果 Pod 状态显示
ErrImagePull
或ImagePullBackOff
,您的部署无法直接从 Red Hat Container Registry 中拉取指定的代理镜像。在这种情况下,编辑 StatefulSet 来引用与 Red Hat Container Registry 中用于身份验证的帐户关联的正确代理镜像名称和镜像 pull secret 名称。然后,您可以导入代理镜像并启动代理。为此,请完成与部署和启动 代理应用程序 类似的步骤。 通过检查日志,验证代理是否已通过新 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 组合。
先决条件
- 您已部署了一组集群代理,每个代理在自己的 Pod 中运行。请参阅 部署一组集群代理。
步骤
使用 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 名称。
为每个代理 Pod 创建一个路由,以便 AMQ Broker 管理控制台可以连接到 Pod。
单击
→ 。这会打开 Edit Route 页面。
-
在 Services 下拉菜单中,选择之前创建的代理服务,将其与 Route 关联,例如
amq2-amq-console-0
。 -
将 Target Port 设为
8161
,为 AMQ Broker 管理控制台启用访问权限。 要显示 TLS 参数,请选择 Secure route 复选框。
在 TLS 终止 下拉菜单中选择 Passthrough。
此选择将所有通信转发到 AMQ Broker,无需 OpenShift 路由器解密并重新发送它。
点 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
-
在 Services 下拉菜单中,选择之前创建的代理服务,将其与 Route 关联,例如
- 要访问特定代理实例的管理控制台,请将上方显示 的主机 URL 复制到 Web 浏览器。
其他资源
- 有关代理集群的更多信息,请参阅配置消息重新分发。
8.4. 部署一组集群 SSL 代理
部署一组集群代理,其中每个代理在自有 Pod 中运行,并将代理配置为使用 SSL 接受连接。
8.4.1. 分发消息
消息分发配置为使用 ON_DEMAND。这意味着,当消息到达集群代理时,消息会以轮循方式分发给具有使用者的任何代理。
此消息分发策略可以保护在特定代理上卡住的消息,而使用者则通过 OpenShift 路由器直接或通过 OpenShift 路由器连接到不同的代理。
默认情况下,重新发布延迟为非零。如果消息位于没有消费者的队列中,它将重新分发到另一个代理。
启用重新分发后,消息可以按顺序发送。
8.4.2. 部署镜像和模板
先决条件
- 此流程在 准备基于模板的代理部署后构建。
- 建议 完成部署基本代理 示例。
步骤
- 导航到 OpenShift Web 控制台并登录。
-
选择
amq-demo
项目空间。 - 点 Add to Project > Browse catalog,以列出所有默认镜像流和模板。
-
使用 Filter 搜索栏,将列表限制为与
amq
匹配的列表。点 See all 显示所需的应用程序模板。 -
选择
amq-broker-78-persistence-clustered-ssl
模板,该模板标记为Red Hat AMQ Broker 7.8(SSL,集群)。
在配置中设置以下值,然后单击 创建。
表 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 并启动代理。
步骤
- 在 OpenShift Container Platform web 控制台中点 StatefulSets。
- 点 broker-amq 部署。
单击 Deploy 以部署应用。
注意集群模板的默认副本数为
0,
因此您不会看到任何 Pod。将 Pod 扩展至三个,以创建代理集群。
$ oc scale statefulset broker-amq --replicas=3 statefulset "broker-amq" scaled
检查是否有三个 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
-
如果 Pod 状态显示
ErrImagePull
或ImagePullBackOff
,您的部署无法直接从 Red Hat Container Registry 中拉取指定的代理镜像。在这种情况下,编辑 StatefulSet 来引用与 Red Hat Container Registry 中用于身份验证的帐户关联的正确代理镜像名称和镜像 pull secret 名称。然后,您可以导入代理镜像并启动代理。为此,请完成与 Deploy 中相似的步骤,并启动代理应用程序。 通过检查日志,验证新 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
其他资源
- 要了解如何在集群中配置每个代理以连接到自己的管理控制台实例,请参阅为 AMQ Broker 管理控制台创建路由。
- 有关代理集群中消息传递的更多信息,请参阅启用消息重新分发。
8.5. 使用自定义配置部署代理
使用自定义配置部署代理。虽然可以使用模板来获取功能,但在需要时可以自定义代理配置。
先决条件
- 本教程的内容基于 准备基于模板的代理部署而构建。
- 建议 完成部署基本代理 教程。
8.5.1. 部署镜像和模板
步骤
- 导航到 OpenShift Web 控制台并登录。
-
选择
amq-demo
项目空间。 - 点 Add to Project > Browse catalog,以列出所有默认镜像流和模板。
-
使用 Filter 搜索栏,将结果限制为与
amq
匹配的结果。点 See all 显示所需的应用程序模板。 -
选择标记为
Red Hat AMQ Broker 7.8(Ephemeral, no SSL)
的amq-broker-78-custom
模板。 在配置中,使用您要使用的自定义配置更新
broker.xml
。点 Create。注意使用文本编辑器创建代理的 XML 配置。然后,在
broker.xml
字段中剪切和粘贴详情。注意OpenShift Container Platform 不使用
ConfigMap
对象来存储您在broker.xml
字段中指定的自定义配置,因为此平台上部署的许多应用程序都很常见。相反,OpenShift 会在代理容器启动时将配置传送到独立文件前,将指定的配置临时存储在环境变量中。
8.5.2. 部署应用程序
创建应用程序后,需要部署它。部署应用程序会创建一个 Pod 并启动代理。
步骤
- 在 OpenShift Container Platform Web 控制台中,单击 Deployments。
- 点 broker-amq 部署
- 单击 Deploy 以部署应用。
8.6. 基本 SSL 客户端示例
实施一个客户端,它将利用 Qpid JMS 客户端,从配置为使用 SSL 的代理发送和接收消息。
先决条件
- 本教程的内容基于 准备基于模板的代理部署而构建。
- 建议使用 SSL 教程完成部署基本代理。
- AMQ JMS 示例
8.6.1. 配置客户端
创建一个示例客户端,可以进行更新以连接到 SSL 代理。以下流程基于 AMQ JMS 示例 构建。
步骤
在您的 /etc/hosts 文件中添加一个条目,将路由名称映射到 OpenShift 集群的 IP 地址:
10.0.0.1 broker-amq-tcp-amq-demo.router.default.svc.cluster.local
更新 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
更新 jndi.properties 配置文件,以使用之前创建的队列。
queue.myDestinationLookup = demoQueue
- 执行发送者客户端以发送文本信息。
执行接收器客户端接收文本信息。您应该看到:
Received message: Message Text!
8.7. 使用子域示例的外部客户端
通过节点端口公开一组集群代理,并使用核心 JMS 客户端与其连接。这可让客户端连接到使用 amq-broker-78-persistence-clustered-ssl
模板配置的一组代理。
8.7.1. 公开代理
配置代理,以便代理集群外部可用,并可直接连接到直接连接,绕过 OpenShift 路由器。这可以通过创建一个使用其自己的主机名公开每个 pod 的路由。
先决条件
步骤
- 从 Add to Project 下拉菜单中选择 导入 YAML/JSON
输入以下内容并点击 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 示例 构建的步骤。
步骤
在 /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
更新 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
更新 jndi.properties 配置文件,以使用之前创建的队列。
queue.myDestinationLookup = demoQueue
- 执行发送者客户端代码,以发送文本信息。
执行接收器客户端代码来接收文本信息。您应该看到:
Received message: Message Text!
其他资源
- 有关使用 AMQ JMS 客户端的更多信息,请参阅 AMQ JMS 示例。
8.8. 使用端口绑定示例的外部客户端
通过 NodePort 公开一组集群代理,并使用核心 JMS 客户端与其连接。这可启用不支持 SNI 或 SSL 的客户端。它可用于使用 amq-broker-78-persistence-clustered
模板配置的集群。
8.8.1. 公开代理
配置代理,以便代理集群外部可用,并可直接连接到直接连接,绕过 OpenShift 路由器。这可以通过创建一个使用 NodePort 在集群间负载均衡的服务来实现。
先决条件
步骤
- 从 Add to Project 下拉菜单中选择 导入 YAML/JSON。
输入以下内容并点击 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 创建集群中代理的循环消费者。
步骤
在终端中,创建一个使用者,并将它附加到运行 OpenShift 的 IP 地址。
artemis consumer --url tcp://<IP_ADDRESS>:30001 --message-count 100 --destination queue://demoQueue
重复步骤 1 两次,以启动两个消费者。
注意现在,您应该有三个使用者在三个代理之间进行平衡。
创建制作者来发送消息。
artemis producer --url tcp://<IP_ADDRESS>:30001 --message-count 300 --destination queue://demoQueue
验证各个消费者接收消息。
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
-zimagePullPolicy
属性被设置为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 身份验证 中描述的步骤。
步骤
- 导航到 OpenShift Container Platform Web 控制台并登录。
- 点您要升级非持久性代理部署的项目。
选择与代理部署对应的 DeploymentConfig(DC)。
- 在 OpenShift Container Platform 4.5 或更高版本中,点击 → DeploymentConfig。
- 在 OpenShift Container Platform 3.11 中,点 Configuration 选项卡。 → 。在您的代理部署中,点
在 Actions 菜单中,点 Edit DeploymentConfig (OpenShift Container Platform 4.5 或更高版本)或 Edit YAML (OpenShift Container Platform 3.11)。
DeploymentConfig 的 YAML 标签会打开,在可编辑模式下带有
.yaml
文件。-
编辑
image
属性,以指定最新的 AMQ Broker 7.8 容器镜像registry.redhat.io/amq7/amq-broker:7.8
。 添加
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 会自动识别最新可用镜像(即带有最高最终数字的镜像标签),并使用此镜像来升级代理部署。点击 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 身份验证 中描述的步骤。
步骤
- 导航到 OpenShift Container Platform Web 控制台并登录。
- 点您要升级持久代理部署的项目。
选择与代理部署对应的 StatefulSet(SS)。
- 在 OpenShift Container Platform 4.5 或更高版本中,点 → 。
- 在 OpenShift Container Platform 3.11 中,点 → 。
在 Actions 菜单中,点 Edit StatefulSet (OpenShift Container Platform 4.5 或更高版本)或 Edit YAML (OpenShift Container Platform 3.11)。
StatefulSet 的 YAML 选项卡会打开,在可编辑模式下带有
.yaml
文件。要准备您的代理部署进行升级,将部署缩减到零代理。
-
如果
replicas
属性目前设置为1
或更高,则将其设置为0。
- 点击 Save。
-
如果
-
当所有代理 Pod 都已关闭后,再次编辑 StatefulSet
.yaml
文件。编辑image
属性,以指定最新的 AMQ Broker 7.8 容器镜像registry.redhat.io/amq7/amq-broker:7.8
。 添加
imagePullSecrets
属性,以指定与 Red Hat Container Registry 中用于身份验证的帐户关联的镜像 pull secret。基于前两个步骤的更改在以下示例中显示:
... spec: containers: image: 'registry.redhat.io/amq7/amq-broker:7.8' .. imagePullSecrets: - name: {PULL-SECRET-NAME}
-
将
replicas
属性设置回原始值。 点击 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 节 “部署基本代理实例”。
步骤
打开用于代理部署的 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 ...
在
deploymentPlan
部分中,添加jolokiaAgentEnabled
和managementRBACEnabled
属性,并指定值,如下所示。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
,因为这可能会将代理中的所有管理操作公开到未经授权的使用。
- 保存 CR 实例。
切换到您之前在其中创建代理部署的项目。
$ oc project <project-name>
在命令行中应用更改。
$ oc apply -f <path/to/custom-resource-instance>.yaml
- 在 Fuse Console 中,若要查看 Fuse 应用程序,请单击 Online 选项卡。若要查看正在运行的代理,请在左侧导航菜单中,单击 Artemis。
其他资源
- 如需有关为 OpenShift 使用 Fuse 控制台的更多信息,请参阅 OpenShift 上的监控和管理红帽 Fuse 应用程序。
- 要了解使用 AMQ 管理控制台查看和管理代理的方式在 Fuse 控制台中,请参阅使用 AMQ 管理控制台管理代理。
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 章 升级基于模板的代理部署。
步骤
- 使用包含代理部署的项目的管理员特权登录到 OpenShift Container Platform Web 控制台。
- 在 web 控制台中,点击 → (OpenShift Container Platform 4.5 或更高版本)或左上角的下拉列表(OpenShift Container Platform 3.11)。选择包含代理部署的项目。
要查看项目中的 StatefulSets 或 DeploymentConfig,请点击:
- → 或 → (OpenShift Container Platform 4.5 或更高版本)。
- → 或 → (OpenShift Container Platform 3.11)。
- 点与代理部署对应的 StatefulSet 或 DeploymentConfig。
- 要访问代理部署的环境变量,请点击 Environment 选项卡。
添加新环境变量
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
。
其他资源
- 有关安装最新应用程序模板的详情,请参考 第 7.2 节 “安装镜像流和应用程序模板”
10.2.3. 访问正在运行的代理 Pod 的 Prometheus 指标
此流程演示了如何访问正在运行的代理 Pod 的 Prometheus 指标。
先决条件
- 您必须为代理 Pod 启用 Prometheus 插件。请参阅 第 10.2.2 节 “为正在运行的代理部署启用 Prometheus 插件”。
步骤
对于您要访问指标的代理 Pod,您需要识别之前创建的路由以将 Pod 连接到 AMQ Broker 管理控制台。Route 名称表单访问指标所需的 URL 部分。
- 点击 → (OpenShift Container Platform 4.5 或更高版本)或 → (OpenShift Container Platform 3.11)。
对于您选择的代理 Pod,识别为将 Pod 连接到 AMQ Broker 管理控制台而创建的 Route。在 主机名 下,记下显示的完整 URL。例如:
http://rte-console-access-pod1.openshiftdomain
要访问 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。
先决条件
- 这个示例基于 准备基于模板的代理部署。
- 建议使用 部署基本代理。
步骤
获取正在运行的 pod 列表:
$ oc get pods NAME READY STATUS RESTARTS AGE broker-amq-1-ftqmk 1/1 Running 0 14d
运行
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.
运行查询来监控
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)中都需要使用星号(*)标记的配置项目。如果没有为非必要项目显式指定值,则配置将使用默认值。
条目 | 子条目 | 描述和使用 |
---|---|---|
| 连接到代理和管理控制台所需的管理员用户名。
如果没有指定值,则会自动生成并存储在 secret 中。默认 secret 名称的格式是 类型: string 示例 :my-user 默认值 :自动生成的随机值 | |
| 连接到代理和管理控制台所需的管理员密码。
如果没有指定值,则会自动生成并存储在 secret 中。默认 secret 名称的格式是 类型: string 示例 :my-password 默认值 :自动生成的随机值 | |
| 代理部署配置 | |
| 用于部署中每个代理的代理容器镜像的完整路径。
您不需要为 CR 要了解 Operator 如何选择要使用的代理容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”。 类型: string 示例 :registry.redhat.io/amq7/amq-broker@sha256:4d60775cd384067147ab105f41855b5a7af855c4d9cbef1d4dea566cbe214558 默认值: 占位符 | |
| 要在部署中创建的代理 Pod 数量。
如果您指定了 2 或更高的值,您的代理部署默认为集群。默认情况下,集群用户名和密码会自动生成并存储在与 键入: int 示例 :1 默认值 :2 | |
| 指定是否需要登录凭证才能连接到代理。 键入 :布尔值 示例 :false 默认值为: true | |
|
指定是否为部署中的每个代理 Pod 使用 journal 存储。如果设置为 键入 :布尔值 示例 :false 默认值为: true | |
| 用于配置代理的 init 容器镜像。
您不需要在 CR 中明确指定 要了解 Operator 如何选择要使用的内置初始容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”。 要了解如何 指定自定义 初始容器镜像,请参阅 第 4.5 节 “指定自定义初始容器镜像”。 类型: string 示例 :registry.redhat.io/amq7/amq-broker-init-rhel7@sha256:f7482d07ecaa78d34c37981447536e6f73d4013ec0c64ff787161a75e4ca3567 默认值 :未指定 | |
| 指定是否使用异步 I/O(AIO)或非阻塞 I/O(NIO)。 类型: string 示例 :aio 默认值: nio | |
| 当代理 Pod 因为失败或意图部署而关闭时,指定是否将消息迁移到代理集群中运行的另一代理 Pod。 键入 :布尔值 示例 :false 默认值为: true | |
| 部署中 pod 中运行的每个代理容器可以消耗的最大主机节点 CPU 数(以 millicore 为单位)。 类型: string 示例 :"500m" 默认值 :使用与 OpenShift Container Platform 版本相同的默认值。查阅集群管理员。 | |
| 主机节点内存的最大数量(以字节为单位),用于部署中的各个代理容器都可以消耗。支持字节表示法(例如:K、M、G)或二进制等同数(Ki, Mi, Gi)。 类型: string 示例 :"1024M" 默认值 :使用与 OpenShift Container Platform 版本相同的默认值。查阅集群管理员。 | |
| 在部署显式请求中运行的每个代理容器,主机节点 CPU 的数量(以 millicore 为单位)。 类型: string 示例 :"250m" 默认值 :使用与 OpenShift Container Platform 版本相同的默认值。查阅集群管理员。 | |
| 主机节点内存量(以字节为单位),每个代理容器在部署中明确请求中运行的 Pod。支持字节表示法(例如:K、M、G)或二进制等同数(Ki, Mi, Gi)。 类型: string 示例 :"512M" 默认值 :使用与 OpenShift Container Platform 版本相同的默认值。查阅集群管理员。 | |
|
部署中的每个代理所需的持久性卷声明(PVC)大小(以字节为单位)。只有在将 类型: string 示例 :4Gi 默认值 :2Gi | |
|
指定是否为部署中的代理启用 Jolokia JVM Agent。如果此属性的值设置为 键入 :布尔值 示例: true 默认值为: false | |
|
指定是否为部署中的代理启用了基于角色的访问控制(RBAC)。要使用 Fuse 控制台,您必须 将值设为 键入 :布尔值 示例 :false 默认值为: true | |
| 配置代理管理控制台. | |
| 指定是否公开部署中每个代理的管理控制台端口。 键入 :布尔值 示例: true 默认值为: false | |
| 指定是否在管理控制台端口上使用 SSL。 键入 :布尔值 示例: true 默认值为: false | |
|
存储 broker 键存储、信任存储和对应的密码的 secret(所有 Base64 编码)。如果您没有为 类型: string 示例 :my-broker-deployment-console-secret 默认值 :未指定 | |
| 指定管理控制台是否需要客户端授权。 键入 :布尔值 示例: true 默认值为: false | |
| 单个接受或配置实例。 | |
| 接受人的名称。 类型: string 示例 :my-acceptor 默认值 :Not applicable | |
| 要用于接收器实例的端口号。 键入: int 示例 :5672 默认值 :61626 为您定义的第一个接受者。然后,对于您定义的每个后续接受者,默认值是 10。 | |
| 在接受或实例上要启用的消息传递协议。 类型: string 示例 :amqp,core 默认值: all | |
|
指定是否在接收器端口上启用 SSL。如果设置为 键入 :布尔值 示例: true 默认值为: false | |
| 存储 broker 键存储、信任存储和对应的密码的 secret(所有 Base64 编码)。
如果您没有为 即使接受者假定默认名称,您也必须自行创建此 secret。 类型: string 示例 :my-broker-deployment-my-acceptor-secret 默认值:<custom_resource_name>-<acceptor_name>-secret | |
| 用于 TLS/SSL 通信的以逗号分隔的密码套件列表。
指定客户端应用程序所支持的最安全密码套件。如果您使用以逗号分隔的列表来指定代理和客户端通用的一组密码套件,或者您没有指定任何密码套件,代理和客户端会相互协商要使用的密码套件。如果您不知道需要指定的密码套件,建议您首先与以 debug 模式运行的客户端建立 broker-client 连接,以验证对代理和客户端通用的密码套件。然后,在代理上配置 类型: string 默认值 :未指定 | |
| 用于 TLS/SSL 通信的以逗号分隔的协议列表。 类型: string 示例 :TLSv1,TLSv1.1,TLSv1.2 默认值 :未指定 | |
|
指定代理是否告知客户端在接受者需要双向 TLS。此属性覆盖 键入 :布尔值 示例: true 默认值 :未指定 | |
|
指定代理是否告知客户端在接受者上 请求 双向 TLS,但不强制要求。此属性由 键入 :布尔值 示例: true 默认值 :未指定 | |
| 指定是否将客户端证书的通用名称(CN)与主机名进行比较,以验证它们是否匹配。这个选项只适用于双向 TLS。 键入 :布尔值 示例: true 默认值 :未指定 | |
| 指定 SSL 提供程序是 JDK 还是 OPENSSL。 类型: string 示例 :OPENSSL 默认值 :JDK | |
|
与传入连接上的 类型: string 示例 : some_regular_expression 默认值 :未指定 | |
| 指定是否向 OpenShift Container Platform 外部的客户端公开接受者。 当您向 OpenShift 外部的客户端公开接受器时,Operator 会自动为部署中的每个代理 Pod 创建专用的服务和路由。 键入 :布尔值 示例: true 默认值为: false | |
|
客户端用来指定应使用任何广播 类型: string 示例: jms.queue 默认值 :未指定 | |
|
客户端使用前缀来指定应该使用 类型: string 示例 :/topic/ 默认值 :未指定 | |
| 接受者允许的连接数。达到此限制时,会在日志中发出 DEBUG 消息,并且连接被拒绝。使用中的客户端类型决定了连接被拒绝时会发生什么。 类型: integer 示例 :2 默认值 :0(无限连接) | |
|
代理将 AMQP 消息作为大消息处理所需的最小消息大小(以字节为单位)。如果 AMQP 消息的大小相等或大于这个值,代理会将消息存储在大型消息目录( 类型: integer 示例 :204800 默认值 :102400 (100 KB) | |
| 单一连接器配置实例。 | |
| 连接器的名称。 类型: string 示例 :my-connector 默认值 :Not applicable | |
|
要创建的连接器类型,tcp 类型: string 示例 :vm 默认值为: tcp | |
| 要连接的主机名或 IP 地址。 类型: string 示例 :192.168.0.58 默认值 :未指定 | |
| 用于连接器实例的端口号。 键入: int 示例 :22222 默认值 :未指定 | |
|
指定是否在连接器端口上启用 SSL。如果设置为 键入 :布尔值 示例: true 默认值为: false | |
| 存储 broker 键存储、信任存储和对应的密码的 secret(所有 Base64 编码)。
如果您没有为 您必须始终创建此 secret,即使连接器假设默认名称。 类型: string 示例 :my-broker-deployment-my-connector-secret 默认值:<custom_resource_name>-<connector_name>-secret | |
| 用于 TLS/SSL 通信的以逗号分隔的密码套件列表。 类型: string 注意 :对于连接器,建议您不要 指定密码套件列表。 默认值 :未指定 | |
| 用于 TLS/SSL 通信的以逗号分隔的协议列表。 类型: string 示例 :TLSv1,TLSv1.1,TLSv1.2 默认值 :未指定 | |
|
指定代理是否告知客户端在连接器需要双向 TLS。此属性覆盖 键入 :布尔值 示例: true 默认值 :未指定 | |
|
指定代理是否告知客户端在连接器上 请求 双向 TLS,但不是必需的。此属性由 键入 :布尔值 示例: true 默认值 :未指定 | |
| 指定是否将客户端证书的通用名称(CN)与主机名进行比较,以验证它们是否匹配。这个选项只适用于双向 TLS。 键入 :布尔值 示例: true 默认值 :未指定 | |
|
指定 SSL 提供程序是 类型: string 示例 :OPENSSL 默认值 :JDK | |
|
与传出连接上的 类型: string 示例 : some_regular_expression 默认值 :未指定 | |
| 指定要将连接器公开给 OpenShift Container Platform 外部的客户端。 键入 :布尔值 示例: true 默认值为: false | |
| 指定 Operator 如何应用您添加到 CR 中的配置,用于每个匹配的地址或一组地址。 您可以指定的值有:
类型: string 示例 : replace_all 默认值: merge_all | |
| 匹配地址 或一组 地址的地址设置。 | |
|
指定在通过
类型: string 示例 :DROP 默认值 :页面 | |
| 指定代理在客户端向发送消息时是否自动创建地址,或者试图使用绑定到不存在的地址的队列。 键入 :布尔值 示例 :false 默认值为: true | |
| 指定代理是否自动创建死信地址和队列来接收未发送的消息。
如果 参数设置为 键入 :布尔值 示例: true 默认值为: false | |
| 指定代理是否自动创建地址和队列来接收过期的信息。
如果参数设置为 键入 :布尔值 示例: true 默认值为: false | |
|
此属性已弃用。使用 | |
|
此属性已弃用。使用 | |
| 指定代理是否在客户端发送消息时自动创建队列,或者试图使用来自 的消息(尚不存在的队列)。 键入 :布尔值 示例 :false 默认值为: true | |
| 指定代理不再有队列时,代理是否自动删除自动创建的地址。 键入 :布尔值 示例 :false 默认值为: true | |
| 当地址没有队列时,代理会在自动删除自动创建的地址前等待。 类型: integer 示例 :100 默认值 :0 | |
|
此属性已弃用。改为使用 | |
|
此属性已弃用。改为使用 | |
| 指定代理是否在队列没有消费者且没有消息时自动删除自动创建的队列。 键入 :布尔值 示例 :false 默认值为: true | |
| 指定代理是否在队列没有消费者且没有消息时手动删除手动创建的队列。 键入 :布尔值 示例: true 默认值为: false | |
| 当队列没有消费者时,代理会在自动删除自动创建队列前等待。 类型: integer 示例 :10 默认值 :0 | |
| 代理评估是否自动删除前可以处于队列中的最大消息数。 类型: integer 示例 :5 默认值 :0 | |
| 当重新加载配置文件时,这个参数指定如何处理从配置文件中删除的地址(及其队列)。您可以指定以下值:
类型: string 示例 :FORCE 默认值 :OFF | |
| 当重新载入配置文件时,此设置指定代理如何处理已从配置文件中删除的队列。您可以指定以下值:
类型: string 示例 :FORCE 默认值 :OFF | |
| 代理向发送死(即 未发送)消息的地址。 类型: string 示例 :DLA 默认值 :无 | |
| 代理应用到自动创建的死信队列的名称的前缀。 类型: string 示例 :myDLQ。 默认值 :DLQ: | |
| 代理应用到自动创建的死信队列的后缀。 类型: string 示例 : .DLQ 默认值 :无 | |
| 自动创建的地址中使用的路由类型。 类型: string 示例 :ANYCAST 默认值 :多播 | |
| 在消息分配前需要的用户数量可以开始地址上的队列。 类型: integer 示例 :5 默认值 :0 | |
| 面向消费者的默认窗口大小(以字节为单位)。 类型: integer 示例 :300000 默认值 :1048576 (1024*1024) | |
|
默认时间(毫秒),如果没有为 类型: integer 示例 :5 默认值: -1(无延迟) | |
| 指定地址上的所有队列默认为独占队列。 键入 :布尔值 示例: true 默认值为: false | |
| 用于消息分组的存储桶数量。 类型: integer 示例 :0(禁用消息分组) 默认值 : -1(无限制) | |
| 用于向消费者表明首先在某一组中的消息。 类型: string 示例 :firstMessageKey 默认值 :无 | |
| 指定在新消费者连接到代理时是否重新平衡组。 键入 :布尔值 示例: true 默认值为: false | |
| 指定在代理进行重新平衡组时是否分配消息。 键入 :布尔值 示例: true 默认值为: false | |
| 指定地址上所有队列是否为最后一个值队列。 键入 :布尔值 示例: true 默认值为: false | |
| 用于最后一个值队列的默认密钥。 类型: string 示例 : stock_ticker 默认值 :无 | |
| 在任意时间点上允许的最大使用者数量。 类型: integer 示例 :100 默认值 : -1(无限制) | |
| 指定地址上的所有队列是否为非破坏性。 键入 :布尔值 示例: true 默认值为: false | |
| 指定代理在没有消费者后是否清除队列的内容。 键入 :布尔值 示例: true 默认值为: false | |
|
自动创建队列中使用的路由类型。默认值为 类型: string 示例 :ANYCAST 默认值 :多播 | |
| 显式设置 ring 的匹配队列的默认环大小。 类型: integer 示例 :3 默认值 : -1(无大小限制) | |
| 指定配置的 metrics 插件(如 Prometheus 插件)是否为匹配的地址或一组地址收集指标。 键入 :布尔值 示例 :false 默认值为: true | |
| 接收过期信息的地址。 类型: string 示例 :myExpiryAddress 默认值 :无 | |
| 过期时间(以毫秒为单位)应用于使用默认过期时间的信息。 类型: integer 示例 :100 默认值: -1(没有应用过期时间) | |
| 代理应用到自动创建的到期队列的名称的前缀。 类型: string 示例 :myExp. 默认值 :加快. | |
| 代理应用到自动创建的到期队列名称的后缀。 类型: string 示例 :.EXP 默认值 :无 | |
| 指定队列是否只使用最后值。 键入 :布尔值 示例: true 默认值为: false | |
| 指定管理资源可以浏览的消息数量。 类型: integer 示例 :100 默认值 :200 | |
| 与代理上配置的地址设置匹配的字符串。您可以指定准确的地址名,或者使用通配符表达式将地址设置 与一组 地址匹配。
如果您使用通配符表达式作为 类型: string 示例 :'myAddresses*' 默认值 :无 | |
| 指定代理在向配置的死信地址发送消息前尝试发送消息的次数。 类型: integer 示例 :20 默认值 :10 | |
| 过期时间(以毫秒为单位)应用于使用超过这个值的过期时间的信息。 类型: integer 示例 :20 默认值: -1(没有应用最长过期时间) | |
| 代理发出的消息重新传送尝试间最大值,以毫秒为单位。 类型: integer 示例 :100
默认值 :默认值为 | |
|
地址的最大内存大小,以字节为单位。当 类型: string 示例 :10Mb 默认值 : -1(无限制) | |
|
代理开始拒绝消息前可以到达的最大大小(以字节为单位)。当 类型: integer 示例 :500 默认值 : -1(无最大大小) | |
| 代理为地址保留消息计数器历史记录的天数。 类型: integer 示例 :5 默认值 :0 | |
| 过期时间(以毫秒为单位)应用于使用比这个值的过期时间较低的信息。 类型: integer 示例 :20 默认值 : -1(未应用最小过期时间) | |
| 在分页导航期间,保留在内存中优化 I/O 的页面文件数目。 类型: integer 示例 :10 默认值 :5 | |
|
分页大小(以字节为单位)。也支持字节表示法,如 类型: string 示例 :20971520 默认值 :10485760(大约 10.5 MB) | |
| 代理在重新发送已取消消息前等待的时间(以毫秒为单位)。 类型: integer 示例 :100 默认值 :0 | |
|
将多个因素应用到 键入: number 示例 :5 默认值 :1 | |
|
将多个因素应用到 键入: number 示例 :1.1 默认值 :0 | |
| 在重新分发所有剩余的消息前,代理在最后一个消费者关闭前等待的时间(毫秒)。 类型: integer 示例 :100 默认值 : -1(未设置) | |
| 对于在地址中创建的将来队列的消息数量。 类型: integer 示例 :100 默认值 :0 | |
| 指定如果无法路由到任何队列,则消息是否会被发送到配置的死信地址。 键入 :布尔值 示例: true 默认值为: false | |
| 代理检查速度较慢的消费者的频率,以秒为单位。 类型: integer 示例 :15 默认值 :5 | |
|
指定在识别缓慢的消费者时会发生什么情况。有效选项为 类型: string 示例 :KILL 默认值 :通知 | |
| 在消费者被视为缓慢前,消息每秒最少的消耗率。 类型: integer 示例 :100 默认值 : -1(未设置) | |
| ||
|
当您更新 键入 :布尔值 示例: true 默认值为: false | |
|
指定在将 键入 :布尔值 示例: true 默认值为: false | |
|
指定 AMQ Broker 的目标 次要版本,您希望 Operator 自动更新 CR 以使用对应的代理容器镜像。例如,如果您将 类型: string 示例 :7.7.0 默认值 :AMQ Broker 的当前版本 |
11.1.2. 地址自定义资源配置参考
基于地址 CRD 的 CR 实例允许您为部署中的代理定义地址和队列。下表详细列出了您可以配置的项目。
任何您部署的对应自定义资源(CR)中都需要使用星号(*)标记的配置项目。如果没有为非必要项目显式指定值,则配置将使用默认值。
条目 | 描述和使用 |
---|---|
| 在代理上创建的地址名称。 类型: string 示例 : address0 默认值 :未指定 |
| 在 broker 上创建的队列名称。 类型: string 示例 : queue0 默认值 :未指定 |
|
指定在删除该部署的地址 CR 实例时,Operator 是否删除部署中所有代理的现有地址。默认值为 键入 :布尔值 示例: true 默认值为: false |
|
要使用的路由类型;任何 类型: string 示例 :任何广播 默认值 :未指定 |
11.2. 应用程序模板参数
在 OpenShift Container Platform 镜像上配置 AMQ Broker,通过指定应用程序模板参数的值来执行。您可以配置以下参数:
参数 | 描述 |
---|---|
| 在其启动时,以逗号分隔列表中指定默认可用的地址。 |
| 指定应用到多路协议端口 61616 和 61617 的广播前缀。 |
| 启用集群。 |
| 指定用于集群的密码。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。 |
| 指定用于集群的集群用户。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。 |
| 指定存储中敏感凭证的 secret,如代理用户名/密码、集群用户名/密码和密钥存储密码。 |
| 指定数据的目录。StatefulSets 中使用的。 |
| 指定数据目录日志记录的目录。 |
|
指定要传递给 |
| 指定消息数据可消耗的最大内存量。如果没有指定值,则会分配一半系统内存。 |
| 指定 SSL 密钥存储文件名。如果没有指定值,将生成随机密码,但不会配置 SSL。 |
| (可选)指定用于解密 SSL 密钥存储的密码。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。 |
|
指定挂载 secret 的目录。默认值为 |
| 仅用于 SSL,指定接受者将接受的最大连接数。 |
| 指定应用到多路协议端口 61616 和 61617 的多播前缀。 |
|
指定代理实例的名称。默认值为 |
| 指定用于向代理进行身份验证的密码。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。 |
|
在以逗号分隔的列表中指定代理使用的消息传递协议。可用选项包括 |
| 以逗号分隔列表指定在启动时代理中默认可用的队列。 |
|
如果设置为 |
|
指定创建的角色的名称。默认值为 |
| 指定 SSL 信任存储文件名。如果没有指定值,将生成随机密码,但不会配置 SSL。 |
| (可选)指定用于解密 SSL 信任存储的密码。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。 |
| 指定用于代理身份验证的用户名。AMQ Broker 应用程序模板使用存储在 AMQ_CREDENTIAL_SECRET 的 secret 中此参数的值。 |
| 指定 OpenShift 内部使用的应用程序的名称。它用于应用中的服务、Pod 和其他对象的名称。 |
|
指定镜像。在 |
|
指定镜像流命名空间。在 |
| 指定 OpenShift DNS ping 服务的端口号。 |
|
指定 OpenShift DNS ping 服务的名称。如果您指定了一个 |
| 指定数据库卷的持久性存储大小。 |
如果您将 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 上修订