3.5. 为 KIE 服务器和智能路由器创建自定义镜像
您可以创建自定义镜像,将文件添加到 KIE 服务器和智能路由器部署中。您必须将镜像推送到您自己的容器 registry。在部署 Red Hat Process Automation Manager 时,您可以将 Operator 配置为使用自定义镜像。
如果使用自定义镜像,则必须禁用自动版本更新。安装新版本时,请使用与 before 和新版本标签相同的名称构建镜像,并将镜像推送到 registry。然后,您可以更改版本,Operator 会自动拉取新镜像。有关更改 Operator 中产品版本的步骤,请参阅 第 3.3 节 “修改使用 Operator 部署的环境”。
特别是,您可以创建以下类型的自定义镜像:
- 包含额外 RPM 软件包的 KIE 服务器的自定义镜像
- 包含额外 JAR 类库的 KIE 服务器的自定义镜像
- 智能路由器的自定义镜像,其中包含额外的 JAR 类库来实现自定义路由
3.5.1. 使用额外的 RPM 软件包创建自定义 KIE 服务器镜像
您可以创建安装额外 RPM 软件包的自定义 KIE 服务器镜像。您可以将此镜像推送到自定义 registry 中,然后使用它部署 KIE 服务器。
您可以从 Red Hat Enterprise Linux 8 软件仓库安装任何软件包。本例安装 procps-ng
软件包,该软件包提供 ps
实用程序,但您可以修改该软件包来安装其他软件包。
流程
-
使用
podman login
命令向registry.redhat.io
registry 进行身份验证。有关向 registry 进行身份验证的说明,请参阅 Red Hat Container Registry 身份验证。 要下载支持的 KIE Server 基础镜像,请输入以下命令:
podman pull registry.redhat.io/rhpam-7/rhpam-kieserver-rhel8:7.11.0
创建基于基础镜像定义自定义镜像的
Dockerfile
。该文件必须将当前用户更改为root
,使用yum
命令安装 RPM 软件包,然后恢复到USER 185
(Red Hat JBoss EAP 用户)。以下示例显示了Dockerfile
文件的内容:FROM registry.redhat.io/rhpam-7/rhpam-kieserver-rhel8:7.11.0 USER root RUN yum -y install procps-ng USER 185
根据需要替换 RPM 文件的名称。
yum
命令从 Red Hat Enterprise Linux 8 软件仓库自动安装所有依赖项。在这种情况下,您可能需要安装几个 RPM 文件,请使用几个RUN
命令。使用
Dockerfile
构建自定义镜像。为镜像提供完全限定名称,包括 registry 名称。您必须使用与基础镜像版本相同的 version 标签。要构建镜像,请输入以下命令:podman build . --tag registry_address/image_name:7.11.0
例如:
podman build . --tag registry.example.com/custom/rhpam-kieserver-rhel8:7.11.0
构建完成后,运行镜像,登录该镜像,并验证自定义是否成功。使用以下命令:
podman run -it --rm registry_address/image_name:7.11.0 /bin/bash
例如:
podman run -it --rm registry.example.com/custom/rhpam-kieserver-rhel8:7.11.0 /bin/bash
在镜像的 shell 提示符中,输入 命令来测试 RPM 是否已安装,然后输入
exit
。例如,对于procps-ng
,请运行ps
命令:[jboss@c2fab36b778e ~]$ ps PID TTY TIME CMD 1 pts/0 00:00:00 bash 13 pts/0 00:00:00 ps [jboss@c2fab36b778e ~]$ exit
要将自定义镜像推送到 registry 中,请输入以下命令:
podman push registry_address/image_name:7.11.0 docker://registry_address/image_name:7.11.0
例如:
podman push registry.example.com/custom/rhpam-kieserver-rhel8:7.11.0 docker://registry.example.com/custom/rhpam-kieserver-rhel8:7.11.0
后续步骤
在部署 KIE 服务器时,设置镜像名称和命名空间,以指定 registry 中的自定义镜像。点 Set KIE Server image,将 Kind 值改为 DockerImage,然后提供包括 registry 名称的镜像名称,但没有 version 标签,例如:
registry.example.com/custom/rhpam-kieserver-rhel8
有关使用 Operator 部署 KIE 服务器的步骤,请参考 第 3.2.5 节 “设置环境的自定义 KIE 服务器配置”。
3.5.2. 使用额外的 JAR 文件创建自定义 KIE 服务器镜像
您可以创建一个自定义 KIE 服务器镜像,其中安装了额外的 JAR 文件(或几个 JAR 文件)来扩展服务器的功能。您可以将此镜像推送到自定义 registry 中,然后使用它部署 KIE 服务器。
例如,您可以创建一个自定义类 JAR 在 KIE 服务器中提供自定义 Prometheus 指标。有关创建自定义类的说明,请参阅 管理和监控 KIE Server 中的使用自定义指标在 KIE 服务器中扩展 Prometheus 指标监控 。
流程
开发与 KIE 服务器一起使用的自定义库。您可以使用以下文档和示例来开发库:
- 管理和监控 KIE 服务器 中的 KIE 服务器功能和扩展。
- Red Hat Process Automation Manager 和 Decision Manager 的特定于域的 Prometheus 指标
- 使用额外传输扩展 KIE 服务器
-
使用 Maven 构建库,以便 JAR 文件放置到
目标目录中
。本例使用custom-kieserver-ext-1.0.0.Final.jar
文件名。 -
使用
podman login
命令向registry.redhat.io
registry 进行身份验证。有关向 registry 进行身份验证的说明,请参阅 Red Hat Container Registry 身份验证。 要下载支持的 KIE Server 基础镜像,请输入以下命令:
podman pull registry.redhat.io/rhpam-7/rhpam-kieserver-rhel8:7.11.0
创建基于基础镜像定义自定义镜像的
Dockerfile
。该文件必须将 JAR 文件复制到/opt/eap/standalone/deployments/ROOT.war/WEB-INF/lib/
目录中。以下示例显示了Dockerfile
文件的内容:FROM registry.redhat.io/rhpam-7/rhpam-kieserver-rhel8:7.11.0 COPY target/custom-kieserver-ext-1.0.0.Final.jar /opt/eap/standalone/deployments/ROOT.war/WEB-INF/lib/
使用
Dockerfile
构建自定义镜像。为镜像提供完全限定名称,包括 registry 名称。您必须使用与基础镜像版本相同的 version 标签。要构建镜像,请输入以下命令:podman build . --tag registry_address/image_name:7.11.0
例如:
podman build . --tag registry.example.com/custom/rhpam-kieserver-rhel8:7.11.0
要将自定义镜像推送到 registry 中,请输入以下命令:
podman push registry_address/image_name:7.11.0 docker://registry_address/image_name:7.11.0
例如:
podman push registry.example.com/custom/rhpam-kieserver-rhel8:7.11.0 docker://registry.example.com/custom/rhpam-kieserver-rhel8:7.11.0
后续步骤
在部署 KIE 服务器时,设置镜像名称和命名空间,以指定 registry 中的自定义镜像。点 Set KIE Server image,将 Kind 值改为 DockerImage,然后提供包括 registry 名称的镜像名称,但没有 version 标签,例如:
registry.example.com/custom/rhpam-kieserver-rhel8
有关使用 Operator 部署 KIE 服务器的步骤,请参考 第 3.2.5 节 “设置环境的自定义 KIE 服务器配置”。
3.5.3. 使用额外的 JAR 文件创建自定义智能路由器镜像,以实施自定义路由
默认情况下,智能路由器根据容器别名路由请求。如果多个 KIE 服务器为服务提供相同的容器别名,则智能路由器会在它们之间平衡负载。
在某些情况下,需要自定义路由功能。您可以创建自定义类来实现自定义路由,然后使用类创建自定义智能路由器镜像。您可以将此镜像推送到自定义 registry 中,然后使用它部署智能路由器。
先决条件
- 已安装 JDK 和 Apache Maven。
- 用于部署 Red Hat Process Automation Manager 的项目在 Red Hat OpenShift Container Platform 环境中创建
- 您知道 Red Hat OpenShift Container Platform 镜像 registry 的路由,并有权将镜像推送到 registry 中。有关配置 registry 的说明,请参阅 Red Hat OpenShift Container Platform 产品文档中的 Registry。
流程
- 从 GitHub 存储库下载 路由器扩展的示例源。
- 根据需要修改路由器扩展的示例源。现有代码根据容器版本实施简单路由。
使用 Maven 构建源代码:
mvn clean package
构建过程生成以下 JAR 文件:
target/router-ext-0.0.1-SNAPSHOT.jar
创建用于创建自定义镜像的工作目录,将生成的 JAR 文件复制到目录中,然后改为该目录,例如:
mkdir /tmp/smartrouter cp target/router-ext-0.0.1-SNAPSHOT.jar /tmp/smartrouter cd /tmp/smartrouter
-
使用
podman login
命令向registry.redhat.io
registry 进行身份验证。有关向 registry 进行身份验证的说明,请参阅 Red Hat Container Registry 身份验证。 要下载支持的智能路由器基础镜像,请输入以下命令:
podman pull registry.redhat.io/rhpam-7/rhpam-smartrouter-rhel8:7.11.0
从官方智能路由器镜像中提取
openshift-launch.sh
文件:podman run --rm registry.redhat.io/rhpam-7/rhpam-smartrouter-rhel8:7.11.0 \ cat /opt/rhpam-smartrouter/openshift-launch.sh > openshift-launch.sh
编辑
openshift-launch.sh
文件。在文件的最后一行,找到类似如下的exec
指令:exec ${JAVA_HOME}/bin/java ${SHOW_JVM_SETTINGS} ${JAVA_OPTS} ${JAVA_OPTS_APPEND} ${JAVA_PROXY_OPTIONS} "${D_ARR[@]}" -jar /opt/${JBOSS_PRODUCT}/${KIE_ROUTER_DISTRIBUTION_JAR}
将指令改为以下文本:
exec ${JAVA_HOME}/bin/java ${SHOW_JVM_SETTINGS} "${D_ARR[@]}" \ -cp /opt/${JBOSS_PRODUCT}/router-ext-0.0.1-SNAPSHOT.jar:/opt/${JBOSS_PRODUCT}/${KIE_ROUTER_DISTRIBUTION_JAR} \ org.kie.server.router.KieServerRouter
此更改将扩展 JAR 文件添加到 Java 类路径中。
创建基于基础镜像定义自定义镜像的
Dockerfile
文件。以下示例显示了Dockerfile
文件的内容:FROM registry.redhat.io/rhpam-7/rhpam-smartrouter-rhel8:7.11.0 RUN rm -rfv /opt/rhpam-smartrouter/openshift-launch.sh COPY openshift-launch.sh /opt/rhpam-smartrouter/openshift-launch.sh COPY router-ext-0.0.1-SNAPSHOT.jar /opt/rhpam-smartrouter/router-ext-0.0.1-SNAPSHOT.jar USER root RUN chown jboss. /opt/rhpam-smartrouter/router-ext-0.0.1-SNAPSHOT.jar /opt/rhpam-smartrouter/openshift-launch.sh RUN chmod +x /opt/rhpam-smartrouter/openshift-launch.sh USER 185
此文件包括以下操作:
-
添加 JAR 文件和新的
openshift-launch.sh
文件 -
将当前用户改为
root
-
为
openshift-launch.sh
文件设置所需的权限 -
恢复到
USER 185
,即 Red Hat JBoss EAP 用户
-
添加 JAR 文件和新的
-
使用
oc
命令登录到您的 Red Hat OpenShift Container Platform 集群。 -
使用
podman login
命令登录到 Red Hat OpenShift Container Platform 集群 registry。 使用
Dockerfile
构建自定义镜像。为 Red Hat OpenShift Container Platform 集群 registry 和项目命名空间标记镜像。为镜像使用自定义名称,以及与基础镜像版本相同的 version 标签。要构建镜像,请输入以下命令:podman build . --tag registry-route/project-name_/image-name:7.11.0
例如:
podman build . --tag route-openshift-image-registry.openshift.example.com/rhpam-project/rhpam-smartrouter-rhel8-custom:7.11.0
构建完成后,运行镜像并验证自定义是否成功。使用以下命令:
podman run registry-route/project-name/image-name:7.11.0
例如:
podman run route-openshift-image-registry.openshift.example.com/rhpam-project/rhpam-smartrouter-rhel8-custom:7.11.0
确保输出提到了自定义服务,如下例所示:
INFO: Using 'LatestVersionContainerResolver' container resolver and restriction policy 'ByPassUserNotAllowedRestrictionPolicy'
将自定义镜像推送(push)到 registry 中:
podman push registry-route/project-name/image-name:7.11.0
例如:
podman push route-openshift-image-registry.openshift.example.com/rhpam-project/rhpam-smartrouter-rhel8-custom:7.11.0
后续步骤
在部署 Red Hat Process Automation Manager 时,在 Smart Router 选项卡中设置以下值:
-
镜像上下文 :项目名称,如
rhpam-project
-
Image :自定义镜像名称,如
rhpam-smartrouter-rhel8-custom
有关使用操作器部署智能路由器的说明,请参阅 第 3.2.6 节 “为环境设置智能路由器配置”。
您还可以使用自定义标签而不是当前版本标签。但是,如果您使用当前版本标签,稍后您可以使用其 version 标签为新版本创建镜像。然后,当您升级 Red Hat Process Automation Manager 版本时,会自动包含新镜像。有关升级 Red Hat Process Automation Manager 版本的步骤,请参阅 第 3.3 节 “修改使用 Operator 部署的环境”。
如果您使用自定义标签,在部署 Red Hat Process Automation Manager 时,在 Smart Router 选项卡中将 Image Tag 值设置为 custom 标签。