3.4. 创建基于 Operator 的代理部署
3.4.1. 部署基本代理实例 复制链接链接已复制到粘贴板!
以下流程演示了如何使用自定义资源(CR)实例创建基本代理部署。
虽然您可以通过部署多个自定义资源(CR)实例在给定 OpenShift 项目中创建多个代理部署,但通常会在项目中创建单个代理部署,然后为地址部署多个 CR 实例。
红帽建议您在单独的项目中创建代理部署。
在 AMQ Broker 7.10 中,如果要配置以下项目,您必须在第一次部署 CR 前将 适当的配置添加到主代理 CR 实例中。
先决条件
您必须已安装了 AMQ Broker Operator。
- 要使用 OpenShift 命令行界面(CLI)安装 AMQ Broker Operator,请参阅 第 3.2 节 “使用 CLI 安装 Operator”。
- 要使用 OperatorHub 图形界面安装 AMQ Broker Operator,请参阅 第 3.3 节 “使用 OperatorHub 安装 Operator”。
- 您应该了解如何选择用于代理部署的代理容器镜像。更多信息请参阅 第 2.4 节 “Operator 如何选择容器镜像”。
- 从 AMQ Broker 7.3 开始,您可以使用红帽生态系统目录的新版本访问容器镜像。这个 registry 的新版本需要您成为经过身份验证的用户,然后才能访问镜像。在按照本节中的步骤操作前,您必须首先完成 Red Hat Container Registry 身份验证 中描述的步骤。
流程
当您成功安装 Operator 时,Operator 会运行并侦听与 CR 相关的更改。本例的步骤演示了如何使用 CR 实例在项目中部署基本代理。
开始为代理部署配置自定义资源(CR)实例。
使用 OpenShift 命令行界面:
以有权在用于创建部署的项目中部署 CR 的用户身份登录 OpenShift。
oc login -u <user> -p <password> --server=<host:port>
oc login -u <user> -p <password> --server=<host:port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开名为
broker_activemqartemis_cr.yaml
的示例 CR 文件,该文件包含在您下载和提取的 Operator 安装存档的deploy/crs
目录中。
使用 OpenShift Container Platform Web 控制台:
- 以有权在用于创建部署的项目中部署 CR 的用户登录到控制台。
-
根据主代理 CRD 启动一个新的 CR 实例。在左侧窗格中,单击
。 - 单击 ActiveMQArtemis CRD。
- 点 实例 选项卡。
单击 Create ActiveMQArtemis。
在控制台中,会打开 YAML 编辑器,供您配置 CR 实例。
对于基本的代理部署,配置可能类似以下示例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 观察到
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-0
、ex-aao-s-1
等等。CR 中的应用程序名称作为 StatefulSet 上的标签出现在部署中。例如,您可以在 Pod 选择器中使用该标签。-
size
属性指定要部署的代理数量。指定为2
个或更多个集群代理部署。但是,要部署单个代理实例,请确保该值设置为1
。 部署 CR 实例。
使用 OpenShift 命令行界面:
- 保存 CR 文件。
切换到您要在其中创建代理部署的项目。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 CR 实例。
oc create -f <path/to/custom_resource_instance>.yaml
$ oc create -f <path/to/custom_resource_instance>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 OpenShift Web 控制台:
- 配置完 CR 后,点 Create。
在 OpenShift Container Platform web 控制台中,点击
。您会看到一个名为 ex-aao-ss
的新 StatefulSet。- 点 ex-aao-s StatefulSet。您会看到一个 Pod,对应于您在 CR 中定义的单个代理。
- 在 StatefulSet 中,点 Pods 选项卡。点 ex-aao-ss Pod。在运行 Pod 的 Events 选项卡中,您会看到 broker 容器已启动。Logs 选项卡显示代理本身正在运行。
要测试代理是否正常运行,请访问代理 Pod 中的 shell 来发送一些测试消息。
使用 OpenShift Container Platform Web 控制台:
-
单击
。 - 点 ex-aao-ss Pod。
- 点击 Terminal 选项卡。
-
单击
使用 OpenShift 命令行界面:
获取项目的 Pod 名称和内部 IP 地址。
oc get pods -o wide
$ 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 Copied! Toggle word wrap Toggle overflow 访问代理 Pod 的 shell。
oc rsh ex-aao-ss-0
$ oc rsh ex-aao-ss-0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 shell 中,使用
artemis
命令发送一些测试消息。在 URL 中指定代理 Pod 的内部 IP 地址。例如:./amq-broker/bin/artemis producer --url tcp://10.129.2.15:61616 --destination queue://demoQueue
sh-4.2$ ./amq-broker/bin/artemis producer --url tcp://10.129.2.15:61616 --destination queue://demoQueue
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以上命令会在代理上自动创建一个名为
demoQueue
的队列,并将默认数量 1000 个消息发送到队列。您应该看到类似如下的输出:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
- 有关主代理自定义资源(CR)的完整配置引用,请参阅 第 8.1 节 “自定义资源配置参考”。
- 要了解如何将正在运行的代理连接到 AMQ 管理控制台,请参阅 第 5 章 连接到基于 Operator 的代理部署的 AMQ Management Console。
3.4.2. 部署集群代理 复制链接链接已复制到粘贴板!
如果项目中正在运行两个或多个代理 Pod,Pod 会自动组成代理集群。集群配置可让代理互相连接并根据需要重新分发信息,以进行负载平衡。
以下流程演示了如何部署集群代理。默认情况下,本部署中的代理 需要需要 负载平衡,这意味着代理仅将信息转发给具有匹配消费者的其他代理。
先决条件
- 已部署了基本的代理实例。请参阅 第 3.4.1 节 “部署基本代理实例”。
流程
- 打开用于基本代理部署的 CR 文件。
对于集群的部署,请确保
deploymentPlan.size
的值为2
或更高。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在
metadata
部分中,您需要包含namespace
属性,只有在 使用 OpenShift Container Platform Web 控制台来创建 CR 实例时才指定一个值。您应该指定的值是代理部署的 OpenShift 项目的名称。- 保存修改后的 CR 文件。
以有权在项目中创建基本代理部署的项目中部署 CR 的用户身份登录 OpenShift。
oc login -u <user> -p <password> --server=<host:port>
$ oc login -u <user> -p <password> --server=<host:port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 切换到您之前在其中创建基本代理部署的项目。
oc project <project_name>
$ oc project <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命令行中应用更改:
oc apply -f <path/to/custom_resource_instance>.yaml
$ oc apply -f <path/to/custom_resource_instance>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift Container Platform Web 控制台中,根据 CR 中指定的数量,其他代理 Pod 会在您的项目中启动。默认情况下,在项目中运行的代理会被集群。
打开每个 Pod 的 Logs 选项卡。日志显示 OpenShift 在每个代理上建立了一个集群连接桥接。具体来说,日志输出包括如下一行:
targetConnector=ServerLocatorImpl (identity=(Cluster-connection-bridge::ClusterConnectionBridge@6f13fb88
targetConnector=ServerLocatorImpl (identity=(Cluster-connection-bridge::ClusterConnectionBridge@6f13fb88
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
属性的值用于接收器、连接器或控制台 - 会导致现有代理重启。如果您的部署中有多个代理,则一次只会重启一个代理。