3.4. 创建基于 Operator 的代理部署


3.4.1. 部署基本代理实例

以下流程演示了如何使用自定义资源(CR)实例创建基本代理部署。

注意

先决条件

流程

当您成功安装 Operator 时,Operator 会运行并侦听与 CR 相关的更改。本例的步骤演示了如何使用 CR 实例在项目中部署基本代理。

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

    1. 使用 OpenShift 命令行界面:

      1. 以有权在用于创建部署的项目中部署 CR 的用户身份登录 OpenShift。

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

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

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

    对于基本的代理部署,配置可能类似以下示例。

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
      deploymentPlan:
        size: 1
        image: placeholder
        requireLogin: false
        persistenceEnabled: true
        journalType: nio
        messageMigration: true
    Copy to Clipboard Toggle word wrap

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

    注意

    broker_activemqartemis_cr.yaml 示例 CR 使用 ex-aao 的命名约定。这个命名惯例表示 CR 是 AMQ Broker Operator 的示例 资源。AMQ Broker 基于 ActiveMQ Artemis 项目。部署此示例 CR 时,生成的 StatefulSet 会使用名称 ex-aao-s。另外,部署中的代理 Pod 直接基于 StatefulSet 名称,如 ex-aao-s-0ex-aao-s-1 等等。CR 中的应用程序名称作为 StatefulSet 上的标签出现在部署中。例如,您可以在 Pod 选择器中使用该标签。

  2. size 属性指定要部署的代理数量。指定为 2 个或更多个集群代理部署。但是,要部署单个代理实例,请确保该值设置为 1
  3. 部署 CR 实例。

    1. 使用 OpenShift 命令行界面:

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

        $ oc project <project_name>
        Copy to Clipboard Toggle word wrap
      3. 创建 CR 实例。

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

      1. 配置完 CR 后,点 Create
  4. 在 OpenShift Container Platform web 控制台中,点击 Workloads StatefulSets。您会看到一个名为 ex-aao-ss 的新 StatefulSet。

    1. ex-aao-s StatefulSet。您会看到一个 Pod,对应于您在 CR 中定义的单个代理。
    2. 在 StatefulSet 中,点 Pods 选项卡。点 ex-aao-ss Pod。在运行 Pod 的 Events 选项卡中,您会看到 broker 容器已启动。Logs 选项卡显示代理本身正在运行。
  5. 要测试代理是否正常运行,请访问代理 Pod 中的 shell 来发送一些测试消息。

    1. 使用 OpenShift Container Platform Web 控制台:

      1. 单击 Workloads Pods
      2. ex-aao-ss Pod。
      3. 点击 Terminal 选项卡。
    2. 使用 OpenShift 命令行界面:

      1. 获取项目的 Pod 名称和内部 IP 地址。

        $ oc get pods -o wide
        
        NAME                          STATUS   IP
        amq-broker-operator-54d996c   Running  10.129.2.14
        ex-aao-ss-0                   Running  10.129.2.15
        Copy to Clipboard Toggle word wrap
      2. 访问代理 Pod 的 shell。

        $ oc rsh ex-aao-ss-0
        Copy to Clipboard Toggle word wrap
  6. 在 shell 中,使用 artemis 命令发送一些测试消息。在 URL 中指定代理 Pod 的内部 IP 地址。例如:

    sh-4.2$ ./amq-broker/bin/artemis producer --url tcp://10.129.2.15:61616 --destination queue://demoQueue
    Copy to Clipboard Toggle word wrap

    以上命令会在代理上自动创建一个名为 demoQueue 的队列,并将默认数量 1000 个消息发送到队列。

    您应该看到类似如下的输出:

    Connection brokerURL = tcp://10.129.2.15:61616
    Producer ActiveMQQueue[demoQueue], thread=0 Started to calculate elapsed time ...
    
    Producer ActiveMQQueue[demoQueue], thread=0 Produced: 1000 messages
    Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in second : 3 s
    Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in milli second : 3492 milli seconds
    Copy to Clipboard Toggle word wrap

其他资源

3.4.2. 部署集群代理

如果项目中正在运行两个或多个代理 Pod,Pod 会自动组成代理集群。集群配置可让代理互相连接并根据需要重新分发信息,以进行负载平衡。

以下流程演示了如何部署集群代理。默认情况下,本部署中的代理 需要需要 负载平衡,这意味着代理仅将信息转发给具有匹配消费者的其他代理。

先决条件

流程

  1. 打开用于基本代理部署的 CR 文件。
  2. 对于集群的部署,请确保 deploymentPlan.size 的值为 2 或更高。例如:

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
      application: ex-aao-app
    spec:
      deploymentPlan:
        size: 4
        image: placeholder
        ...
    Copy to Clipboard Toggle word wrap
    注意

    metadata 部分中,您需要包含 namespace 属性,只有在 使用 OpenShift Container Platform Web 控制台来创建 CR 实例时才指定一个值。您应该指定的值是代理部署的 OpenShift 项目的名称。

  3. 保存修改后的 CR 文件。
  4. 以有权在项目中创建基本代理部署的项目中部署 CR 的用户身份登录 OpenShift。

    $ oc login -u <user> -p <password> --server=<host:port>
    Copy to Clipboard Toggle word wrap
  5. 切换到您之前在其中创建基本代理部署的项目。

    $ oc project <project_name>
    Copy to Clipboard Toggle word wrap
  6. 在命令行中应用更改:

    $ oc apply -f <path/to/custom_resource_instance>.yaml
    Copy to Clipboard Toggle word wrap

    在 OpenShift Container Platform Web 控制台中,根据 CR 中指定的数量,其他代理 Pod 会在您的项目中启动。默认情况下,在项目中运行的代理会被集群。

  7. 打开每个 Pod 的 Logs 选项卡。日志显示 OpenShift 在每个代理上建立了一个集群连接桥接。具体来说,日志输出包括如下一行:

    targetConnector=ServerLocatorImpl (identity=(Cluster-connection-bridge::ClusterConnectionBridge@6f13fb88
    Copy to Clipboard Toggle word wrap

3.4.3. 对运行代理部署应用自定义资源更改

以下是对运行代理部署应用自定义资源(CR)更改的一些重要事项:

  • 您不能动态更新 CR 中的 persistenceEnabled 属性。要更改此属性,将集群缩减为零的代理。删除现有的 CR。然后,使用您的更改重新创建和重新部署 CR,同时指定部署大小。
  • CR 中的 deploymentPlan.size 属性的值会覆盖您通过 oc scale 命令进行代理部署的大小。例如,假设您使用 oc scale 将部署的大小从三个代理更改为两个,但 CR 中的 deploymentPlan.size 的值仍是 3。在这种情况下,OpenShift 最初会将部署缩减到两个代理。但是,当 scaledown 操作完成后,Operator 会将部署恢复到三个代理(如 CR 中指定的)。
  • 第 3.2.2 节 “使用 CLI 部署 Operator” 所述,如果您使用持久性存储(即,在 CR 中设置 persistenceEnabled=true )创建代理部署,您可能需要为 AMQ Broker Operator 置备持久性卷(PV)来声明代理 Pod。如果您缩减代理部署的大小,Operator 会释放之前声明用于关闭的代理 Pod 的 PV。但是,如果您通过删除 CR 来删除代理部署,AMQ Broker Operator 不会为在删除时仍在部署中的代理 Pod 释放 PVC。另外,这些未发布的 PV 在任何新部署中都不可用。在这种情况下,您需要手动释放卷。如需更多信息,请参阅 OpenShift 文档中的 发布持久性卷
  • 在 AMQ Broker 7.10 中,如果要配置以下项目,您必须在第一次部署 CR 之前,将适当的配置添加到主 CR 实例中。

  • 在活跃的扩展事件中,您应用的任何进一步更改都由 Operator 排队,仅在扩展完成后执行。例如,假设您将部署的大小从四个代理缩减为一。然后,当进行缩减时,您也会更改代理管理员用户名和密码的值。在这种情况下,Operator 会将用户名和密码更改排队,直到部署在一个活跃的代理下运行。
  • 所有 CR 更改 - 除更改部署的大小外,或更改 expose 属性的值用于接收器、连接器或控制台 - 会导致现有代理重启。如果您的部署中有多个代理,则一次只会重启一个代理。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat