7.5. 使用 EAP Operator 在 OpenShift 上部署 Java 应用程序
EAP 操作员有助于在 OpenShift 上自动化 Java 应用程序部署。有关 EAP Operator API 的信息,请参阅 EAP Operator: API Information。
先决条件
- 已安装 EAP operator。有关安装 EAP Operator 的更多信息,请参阅使用 Webconsole 安装 EAP Operator 并使用 CLI 安装 EAP Operator。
- 您已使用 JBoss EAP 为 OpenShift Source-to-Image(S2I)构建镜像构建了用户应用的 Docker 镜像。
-
如果要在 OpenShift 上部署后启用应用程序自动升级应用程序,则
eap-s2i-build
模板中的APPLICATION_IMAGE
参数具有镜像流。有关使用eap-s2i-build
模板构建应用程序镜像的更多信息,请参阅使用 eap-s2i-build 模板构建应用程序镜像。 -
如果应用程序的 CustomResourceDefinition(CRD)文件引用了一个
Secret
对象,则已创建了 Secret。有关创建新Secret
对象的更多信息,请参阅创建 Secret。 -
如果您的应用程序的 CRD 文件引用了
ConfigMap
,则已创建了 ConfigMap。有关创建ConfigMap
的信息 ,请参阅创建 ConfigMap。 -
如果选择这样做,则已从
standalone.xml
文件创建了ConfigMap
。有关从standalone.xml
文件创建ConfigMap
的详情,请参考 从 standalone.xml 文件创建 ConfigMap。
JBoss EAP 7 不支持从 ConfigMap
提供 standalone.xml
文件。
流程
- 打开 Web 浏览器并登录到 OperatorHub。
- 选择您要用于 Java 应用程序的 Project 或命名空间。
- 进入到 Installed Operator,再选择 JBoss EAP operator。
- 在 Overview 选项卡中,点 Create Instance 链接。
指定应用程序镜像详情。
应用镜像指定包含 Java 应用的 Docker 镜像。镜像必须使用 OpenShift Source-to-Image(S2I)构建镜像的 JBoss EAP 来构建。如果
applicationImage
字段与 imagestreamtag 对应,则对镜像的任何更改都会触发应用的自动升级。您可以为 OpenShift 应用程序镜像提供以下 JBoss EAP 参考:
- 镜像的名称:mycomp/myapp
- tag: mycomp/myapp:1.0
- A digest: 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-secret
Secret
挂载于/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)中的引用从旧改为新的。这被视为一个新的 CR 更新,pod 被重新加载。指定您在
WildFlyServerSpec
中创建的ConfigMap
名称,将其挂载为运行应用的 Pod 中的卷。例如:spec: configMaps: - my-config
ConfigMap
挂载于/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
。然后,您可以根据需要更新内容,并将 operator 自定义资源(CR)中的引用从旧改为新的。这被视为一个新的 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
,则必须在使用 EAP 操作器在 OpenShift 上部署应用程序前创建 Secret
。
流程
-
创建
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,则必须在使用 EAP 操作器在 OpenShift 上部署应用程序前创建 ConfigMap。
流程
- 创建 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
目录中。