第 4 章 配置基于 Operator 的代理部署
4.1. Operator 如何生成代理配置
在使用自定义资源(CR)实例来配置代理部署前,您应该了解 Operator 如何生成代理配置。
在创建基于 Operator 的代理部署时,每个代理的 Pod 在 OpenShift 项目中的 StatefulSet 中运行。代理的应用程序容器在每个 Pod 中运行。
在初始化每个 Pod 时,Operator 会运行一种名为 Init Container 的容器类型。在 OpenShift Container Platform 中,Init 容器是在应用程序容器之前运行的专用容器。初始容器可以包含应用程序镜像中不存在的实用程序或设置脚本。
默认情况下,AMQ Broker Operator 使用内置初始容器。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)实例中指定了地址设置配置,则 Init 容器会处理配置并将其转换为 XML。
-
根据 CR 中
applyRule
属性的值,Init Container 会合并 或将上方显示 的默认地址设置配置替换为 您在 CR 中指定的配置。这个合并或替换的结果是代理将使用的最终地址设置配置。 -
当初始容器完成生成代理配置(包括地址设置)后,代理应用程序容器会启动。启动时,broker 容器会从之前由初始容器使用的安装目录中复制其配置。您可以在
broker.xml
配置文件中检查地址设置配置。对于正在运行的代理,此文件位于/home/jboss/amq-broker/etc
目录中。
其它资源
-
有关在 CR 中使用
applyRule
属性的示例,请参阅 第 4.2.3 节 “在基于 Operator 的代理部署中将地址与配置的地址匹配”。
4.1.2. 代理 Pod 的目录结构
在创建基于 Operator 的代理部署时,每个代理的 Pod 在 OpenShift 项目中的 StatefulSet 中运行。代理的应用程序容器在每个 Pod 中运行。
在初始化每个 Pod 时,Operator 会运行一种名为 Init Container 的容器类型。在 OpenShift Container Platform 中,Init 容器是在应用程序容器之前运行的专用容器。初始容器可以包含应用程序镜像中不存在的实用程序或设置脚本。
在为代理实例生成配置时,Init 容器使用默认安装目录中包含的文件。此安装目录位于 Operator 挂载到代理 Pod 的卷中,以及 Init Container 和代理容器共享的卷。Init 容器用于挂载共享卷的路径在名为 CONFIG_INSTANCE_DIR
的环境变量中定义。CONFIG_INSTANCE_DIR
的默认值为 /amq/init/config
。在文档中,此目录被称为 <install_dir>
。
您无法更改 CONFIG_INSTANCE_DIR
环境变量的值。
默认情况下,安装目录有以下子目录:
子目录 | 内容 |
---|---|
| 运行代理所需的二进制文件和脚本. |
| 配置文件. |
| 代理日志. |
| 运行代理所需的 jars 和库。 |
| 代理日志文件. |
| 临时 Web 应用文件. |
当初始容器完成生成代理配置时,代理应用程序容器会启动。启动时,broker 容器会从之前由初始容器使用的安装目录中复制其配置。代理 Pod 初始化并运行时,代理配置位于代理的 /home/jboss/amq-broker
目录(及子目录)。
其它资源
- 有关 Operator 如何为内置初始容器选择容器镜像的更多信息,请参阅 第 2.4 节 “Operator 如何选择容器镜像”。
- 要了解如何构建和指定自定义初始容器镜像,请参阅 第 4.6 节 “指定自定义初始容器镜像”。