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 脚本访问。

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

先决条件

步骤

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

    1. 使用 OpenShift 命令行界面:

      1. 以具有部署部署权限的项目中部署 CR 的用户身份登录 OpenShift。

        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 的项目中部署 CR 权限的用户身份登录控制台。
      2. 根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击 Administration Custom 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.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 项目的名称。

  2. 在 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
  3. 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 中的存储库中。
  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

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.