搜索

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

download PDF

第 4.1 节 “Operator 如何生成代理配置” 所述,AMQ Broker Operator 使用默认的内置初始容器来生成代理配置。要生成配置,Init 容器使用主自定义资源(CR)实例进行部署。在某些情况下,您可能需要使用自定义初始容器。例如,如果您要在代理安装目录中包含额外的运行时依赖项 .jar 文件。

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

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

    FROM registry.redhat.io/amq7/amq-broker-init-rhel8:7.12
  • 自定义镜像必须包含一个名为 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 脚本访问。

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

先决条件

流程

  1. 编辑代理部署的 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 以具有特权的用户身份登录 OpenShift Container Platform,以便在代理部署的项目中部署 CR。
      2. 编辑部署的 CR。

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以具有特权的用户身份登录 OpenShift Container Platform,以便在代理部署的项目中部署 CR。
      2. 在左侧窗格中,单击 Administration Custom Resource Definitions
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 点代理部署的实例。
      6. YAML 标签。

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

  2. 在 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: true
    initImage

    指定自定义 Init 容器镜像的完整 URL,该镜像必须可从容器 registry 获得。

    重要

    如果 CR 在 spec.deploymentPlan.initImage 属性中指定自定义 init 容器镜像,红帽建议您在 spec.deploymentPlan.image 属性中指定相应代理容器镜像的 URL,以防止自动升级代理镜像。如果您没有在 spec.deploymentPlan.image 属性中指定特定代理容器镜像的 URL,则会自动升级代理镜像。升级代理镜像后,代理和自定义 init 容器镜像的版本不同,这可能会阻止代理运行。

    如果您有一个具有自定义 init 容器的工作部署,您可以防止进一步升级代理容器镜像,以消除较新的代理镜像无法使用自定义 init 容器镜像的风险。有关防止升级到代理镜像的更多信息,请参阅 第 6.4.2 节 “使用镜像 URL 限制镜像自动升级”

  3. 保存 CR。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.