4.9. 指定自定义初始容器镜像
如 第 4.1 节 “Operator 如何生成代理配置” 所述,AMQ Broker Operator 使用默认内置初始容器来生成代理配置。要生成配置,Init Container 会将主自定义资源(CR)实例用于部署。在某些情况下,您可能需要使用自定义初始容器。例如,如果您要在代理安装目录中包含额外的运行时依赖项 .jar 文件。
构建自定义初始容器镜像时,您必须遵循以下重要准则:
在您为自定义镜像创建的构建脚本(例如,Docker Dockerfile 或 Podman Containerfile)中,
FROM指令必须指定 AMQ Broker Operator 内置 Init Container 的最新版本作为基础镜像。在脚本中包括以下行:FROM registry.redhat.io/amq7/amq-broker-init-rhel8:7.11-
自定义镜像必须包含一个名为
post-config.sh的脚本,它包含在名为/amq/scripts的目录中。post-config.sh脚本是您可以修改或添加到 Operator 生成的初始配置。当您指定自定义 Init Container 时,Operator 在使用 CR 实例生成配置后,但在启动代理应用程序容器前运行post-config.sh脚本。 -
如 第 4.1.2 节 “代理 Pod 的目录结构” 所述,初始容器使用的安装目录的路径在名为
CONFIG_INSTANCE_DIR的环境变量中定义。post-config.sh脚本应在引用安装目录时使用该环境变量名称(例如:${CONFIG_INSTANCE_DIR}/lib),而不是 此变量的实际值(例如/amq/init/config/lib)。 -
如果要在自定义代理配置中包含其他资源(如
.xml或.jar文件),您必须确保将它们包含在自定义镜像中,并可以被post-config.sh脚本访问。
以下流程描述了如何指定自定义初始容器镜像。
先决条件
- 您必须已构建符合上述指南的自定义初始容器镜像。有关为 ArtemisCloud Operator 构建和指定自定义初始容器镜像的完整示例,请参阅 基于 JDBC 的持久性的自定义初始容器镜像。
- 要为 AMQ Broker Operator 提供自定义初始容器镜像,您需要能够将镜像添加到容器 registry 中的存储库中,如 Quay 容器 registry。
- 您应该了解 Operator 如何使用初始容器来生成代理配置。更多信息请参阅 第 4.1 节 “Operator 如何生成代理配置”。
- 您应该熟悉如何使用 CR 创建代理部署。更多信息请参阅 第 3.4 节 “创建基于 Operator 的代理部署”。
流程
编辑代理部署的 CR 实例。
使用 OpenShift 命令行界面:
- 以具有特权在项目中为代理部署 CR 的用户身份登录 OpenShift Container Platform。
编辑部署的 CR。
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
使用 OpenShift Container Platform Web 控制台:
- 以具有特权在项目中为代理部署 CR 的用户身份登录 OpenShift Container Platform。
-
在左侧窗格中,点
。 - 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
- 点代理部署的实例。
点 YAML 标签。
在控制台中,会打开 YAML 编辑器,供您编辑 CR 实例。
在 CR 的
deploymentPlan部分中,添加一个initImage属性,并将值设置为自定义 Init 容器镜像的 URL。apiVersion: broker.amq.io/v1beta1 kind: ActiveMQArtemis metadata: name: ex-aao spec: deploymentPlan: size: 1 image: placeholder initImage: <custom_init_container_image_url> requireLogin: false persistenceEnabled: true journalType: nio messageMigration: trueinitImage指定自定义 Init 容器镜像的完整 URL,该镜像必须可从容器 registry 获得。
重要如果 CR 在
spec.deploymentPlan.initImage属性中指定自定义 init 容器镜像,红帽建议您在spec.deploymentPlan.image属性中指定相应代理容器镜像的 URL,以防止自动升级代理镜像。如果您没有在spec.deploymentPlan.image属性中指定特定代理容器镜像的 URL,则会自动升级代理镜像。升级代理镜像后,代理和自定义 init 容器镜像的版本不同,这可能会阻止代理运行。如果您有一个具有自定义 init 容器的工作部署,您可以防止进一步升级代理容器镜像,以消除较新的代理镜像无法使用自定义 init 容器镜像的风险。有关防止升级到代理镜像的更多信息,请参阅 第 6.4.2 节 “使用镜像 URL 限制镜像自动升级”。
- 保存 CR。
其他资源
- 有关为 ArtemisCloud Operator 构建和指定自定义初始容器镜像的完整示例,请参阅 基于 JDBC 的持久性的自定义初始容器镜像。