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 文件。

流程

  1. 打开 Web 浏览器并登录到 OperatorHub。
  2. 选择您要用于 Java 应用程序的 Project 或命名空间。
  3. 进入到 Installed Operator,再选择 JBoss EAP operator
  4. Overview 选项卡中,点 Create Instance 链接。
  5. 指定应用程序镜像详情。

    应用镜像指定包含 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
  6. 指定应用程序的大小。例如:

    spec:
      replicas:2
  7. 使用 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
  8. 完成与应用程序部署相关的以下可选配置:

    • 指定服务器数据目录的存储要求。如需更多信息,请参阅为应用程序配置持久性存储
    • 指定您在 WildFlyServerSpec 中创建的 Secret 名称,将其挂载为运行应用的 Pod 中的卷。例如:

      spec:
        secrets:
          - my-secret

      Secret 挂载于 /etc/secrets/<secret name&gt;,每个键/值都存储为一个文件。文件的名称是键,内容是值。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&gt;,每个键/值都存储为一个文件。文件的名称是键,内容是值。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 停止后不会保留。

流程

  1. 指定 volumeClaimTemplate 配置资源要求,以存储 JBoss EAP 独立数据目录。模板的名称派生自 JBoss EAP 的名称。对应的卷以 ReadWriteOnce 访问模式挂载。

    spec:
      storage:
        volumeClaimTemplate:
          spec:
            resources:
              requests:
                storage: 3Gi

    满足此存储要求的持久性卷挂载到 /eap/standalone/data 目录中。