7.5. 使用 EAP Operator 在 OpenShift 上部署 Java 应用程序
EAP 操作器有助于在 OpenShift 上自动化 Java 应用部署。如需有关 EAP Operator API 的信息,请参阅 EAP Operator: API Information。
先决条件
- 已安装 EAP operator。如需有关安装 EAP 操作器的更多信息,请参阅使用 Webconsole 和 CLI 安装 EAP Operator。
- 您已使用 JBoss EAP for OpenShift Source-to-Image(S2I)构建镜像构建了用户应用的 Docker 镜像。
-
如果要在 OpenShift 上部署应用后启用自动升级
,则 eap-s2i-build模板中的APPLICATION_IMAGE参数包含镜像流。有关使用eap-s2i-build 模板构建应用镜像的更多信息,请参阅使用 eap- s2i-build 模板构建应用镜像。 -
如果应用的 CustomResourceDefinition(CRD)文件引用了一个对象,则已创建了
Secret对象。有关创建新Secret对象的更多信息,请参阅 创建 Secret。 -
如果应用程序的 CRD 文件引用了
ConfigMap,则创建了 ConfigMap。有关创建ConfigMap的详情,请参阅 创建 ConfigMap。 -
如果您选择从
standalone.xml文件创建ConfigMap,请从该文件创建 ConfigMap。有关从standalone.xml文件创建ConfigMap的详情,请参考 从 standalone.xml 文件创建 ConfigMap。
JBoss EAP 7 不支持从 ConfigMap 提供 standalone.xml 文件。
流程
- 打开 Web 浏览器并登录到 OperatorHub。
- 选择您要用于 Java 应用程序的项目或命名空间。
- 导航到 Installed Operator,再选择 JBoss EAP operator。
- 在 Overview 选项卡上,单击 Create Instance 链接。
指定应用程序镜像详情。
应用镜像指定包含 Java 应用的 Docker 镜像。镜像必须使用 JBoss EAP for OpenShift Source-to-Image(S2I)构建镜像进行构建。如果
applicationImage字段与 imagestreamtag 对应,对镜像的任何更改都会触发应用程序的自动升级。您可以提供以下对 OpenShift 应用镜像的 JBoss EAP 的以下引用:
- 镜像名称:mycomp/myapp
- 标签:mycomp/myapp:1.0
- 摘要: mycomp/myapp:@sha256:0af38bc38be93116b6a1d86a9c78bd14cd527121970899d719baf78e5dc7bfd2
- imagestreamtag: my-app:latest
指定应用程序的大小。例如:
spec: replicas:2使用
env spec配置应用程序环境。环境变量 可以直接来自值,如 POSTGRESQL_SERVICE_HOST 或Secret对象,如 POSTGRESQL_USER。例如:spec: env: - name: POSTGRESQL_SERVICE_HOST value: postgresql - name: POSTGRESQL_SERVICE_PORT value: '5432' - name: POSTGRESQL_DATABASE valueFrom: secretKeyRef: key: database-name name: postgresql - name: POSTGRESQL_USER valueFrom: secretKeyRef: key: database-user name: postgresql - name: POSTGRESQL_PASSWORD valueFrom: secretKeyRef: key: database-password name: postgresql完成与应用程序部署相关的以下可选配置:
- 指定服务器数据目录的存储要求。如需更多信息,请参阅为应用程序配置持久性存储。
指定您在
WildFlyServerSpec中创建的Secret名称,将其挂载为运行应用程序的 Pod 中的卷。例如:spec: secrets: - my-secretSecret挂载于/etc/secrets/<secret name>,每个键/值都保存为一个文件。文件的名称是键,内容是值。Secret作为 pod 中的卷挂载。以下示例演示了可用于查找键值的命令:$ ls /etc/secrets/my-secret/ my-key my-password $ cat /etc/secrets/my-secret/my-key devuser $ cat /etc/secrets/my-secret/my-password my-very-secure-pasword注意修改
Secret对象可能会导致项目不一致。红帽不修改现有的Secret对象,而是建议创建一个内容与旧对象相同的新对象。然后,您可以根据需要更新内容,并将 operator 自定义资源(CR)中的引用从旧改为 new。这被视为一个新的 CR 更新,pod 会被重新载入。指定您在
WildFlyServerSpec中创建的ConfigMap名称,将其挂载为运行应用程序的 Pod 中的卷。例如:spec: configMaps: - my-configConfigMap挂载于/etc/configmaps/<configmap name>,每个键/值都存储为一个文件。文件的名称是键,内容是值。ConfigMap挂载为 pod 中的卷。查找键值:$ ls /etc/configmaps/my-config/ key1 key2 $ cat /etc/configmaps/my-config/key1 value1 $ cat /etc/configmaps/my-config/key2 value2注意修改
ConfigMap可能会导致项目不一致。红帽建议创建一个与旧ConfigMap相同内容的新ConfigMap,而不是修改现有的 ConfigMap。然后,您可以根据需要更新内容,并将 operator 自定义资源(CR)中的引用从旧改为 new。这被视为一个新的 CR 更新,pod 会被重新载入。如果您选择有自己的独立
ConfigMap,请提供ConfigMap的名称以及standalone.xml文件的键:standaloneConfigMap: name: clusterbench-config-map key: standalone-openshift.xml注意JBoss EAP 7 不支持从
standalone.xml文件创建ConfigMap。如果要禁用 OpenShift 中创建默认 HTTP 路由,请将
disableHTTPRoute设置为true:spec: disableHTTPRoute: true
7.5.1. 创建 Secret 复制链接链接已复制到粘贴板!
如果应用的 CustomResourceDefinition(CRD)文件引用了 Secret,您必须先创建 Secret,然后才能使用 EAP 操作器将应用部署到 OpenShift 中。
流程
-
创建
Secret:
$ oc create secret generic my-secret --from-literal=my-key=devuser --from-literal=my-password='my-very-secure-pasword'
7.5.2. 创建 ConfigMap 复制链接链接已复制到粘贴板!
如果应用程序的 CustomResourceDefinition(CRD)文件引用 spec.ConfigMaps 字段中的 ConfigMap,您必须先创建 ConfigMap,然后才能使用 EAP 操作器在 OpenShift 中部署应用程序。
流程
- 创建 configmap:
$ oc create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
configmap/my-config created
7.5.3. 从 standalone.xml 文件创建 ConfigMap 复制链接链接已复制到粘贴板!
您可以创建自己的 JBoss EAP 单机配置,而不使用来自 JBoss EAP for OpenShift Source-to-Image(S2I)的应用镜像中的配置。standalone.xml 文件必须放在可由 Operator 访问的 ConfigMap 中。
注意:JBoss EAP 7 不支持从 ConfigMap 提供 standalone.xml 文件。
流程
-
从
standalone.xml文件创建ConfigMap:
$ oc create configmap clusterbench-config-map --from-file examples/clustering/config/standalone-openshift.xml
configmap/clusterbench-config-map created
7.5.4. 为应用程序配置持久性存储 复制链接链接已复制到粘贴板!
如果您的应用程序需要对一些数据进行持久性存储,如在 pod 重启后必须保留的事务或消息传递日志,请配置存储规格。如果存储 spec 为空,应用程序的每个 pod 都会使用一个 EmptyDir 卷。但是,此卷在对应的 pod 停止后不会保留。
流程
指定
volumeClaimTemplate,以配置资源要求,以存储 JBoss EAP 单机数据目录。模板的名称派生自 JBoss EAP 的名称。对应的卷被挂载为ReadWriteOnce访问模式。spec: storage: volumeClaimTemplate: spec: resources: requests: storage: 3Gi满足此存储要求的持久卷挂载到
/eap/standalone/data目录。