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

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

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

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

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

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

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

先决条件

流程

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

    1. 使用 OpenShift 命令行界面:

      1. 以具有特权的用户身份登录 OpenShift,以在您要创建部署的项目中部署 CR。

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

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

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

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

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

    请注意,在 broker_activemqartemis_cr.yaml 示例 CR 文件中,image 属性 被设置为默认值 占位符。此值表示 image 属性默认不指定用于部署的代理容器镜像。要了解 Operator 如何决定要使用的适当代理容器镜像,请参阅 第 2.4 节 “Operator 如何选择容器镜像”

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

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

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

    1. 使用 OpenShift 命令行界面:

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

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

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

      1. 配置完 CR 后,点 Create

其它资源