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 容器镜像。