Serverless Logic


Red Hat OpenShift Serverless 1.36

OpenShift Serverless Logic 简介

Red Hat OpenShift Documentation Team

摘要

本文档概述 OpenShift Serverless 日志功能。

第 1 章 开始使用

1.1. 使用 Knative Workflow 插件创建并运行工作流

您可以在本地创建并运行 OpenShift Serverless Logic 工作流。

1.1.1. 创建工作流

您可以使用带有 kn 工作流create 命令在当前目录中设置新的 OpenShift Serverless Logic 项目。

先决条件

  • 已安装 OpenShift Serverless Logic kn-workflow CLI 插件。

流程

  1. 运行以下命令,创建一个新的 OpenShift Serverless Logic 工作流项目:

    $ kn workflow create
    Copy to Clipboard

    默认情况下,生成的项目名称是 new-project。您可以使用 [-n|--name] 标志来更改项目名称,如下所示:

    示例命令

    $ kn workflow create --name my-project
    Copy to Clipboard

1.1.2. 在本地运行工作流

您可以使用带有 kn 工作流run 命令,在当前目录中构建并运行 OpenShift Serverless Logic 工作流项目。

先决条件

  • 您已在本地机器上安装了 Podman。
  • 已安装 OpenShift Serverless Logic kn-workflow CLI 插件。
  • 您已创建了 OpenShift Serverless Logic 工作流项目。

流程

  1. 运行以下命令来构建并运行 OpenShift Serverless Logic 工作流项目:

    $ kn workflow run
    Copy to Clipboard

    当项目就绪时,Dev Development UI 会在 localhost:8080/q/dev-ui 的浏览器中自动打开,您将找到可用的 Serverless Workflow Tools 标题。另外,您可以使用 http://localhost:8080/q/dev-ui/org.apache.kie.sonataflow.sonataflow-quarkus-devui/workflows 直接访问该工具。

注意

您可以使用机器中运行的容器在本地执行工作流。使用 Ctrl+C 停止容器。

1.2. 部署选项和部署工作流

您可以使用三个部署配置集之一在集群中部署 Serverless Logic 工作流:

  • Dev
  • 预览
  • GitOps

每个配置集定义 Operator 如何构建和管理工作流部署,包括镜像生命周期、实时更新和协调行为。

1.2.1. 使用 Dev 配置集部署工作流

您可以使用 Dev 配置集在 OpenShift Container Platform 上部署本地工作流。您可以使用此部署在集群中直接试验和修改工作流,查看几乎立即的更改。Dev 配置集专为开发和测试目的而设计。由于它在不重启容器的情况下自动重新载入工作流,因此非常适合初始开发阶段以及测试实时环境中的工作流更改。

先决条件

  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 创建工作流配置 YAML 文件。

    workflow-dev.yaml 文件示例

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlow
    metadata:
      name: greeting 
    1
    
      annotations:
        sonataflow.org/description: Greeting example on k8s!
        sonataflow.org/version: 0.0.1
        sonataflow.org/profile: dev 
    2
    
    spec:
      flow:
        start: ChooseOnLanguage
        functions:
          - name: greetFunction
            type: custom
            operation: sysout
        states:
          - name: ChooseOnLanguage
            type: switch
            dataConditions:
              - condition: "${ .language == \"English\" }"
                transition: GreetInEnglish
              - condition: "${ .language == \"Spanish\" }"
                transition: GreetInSpanish
            defaultCondition: GreetInEnglish
          - name: GreetInEnglish
            type: inject
            data:
              greeting: "Hello from JSON Workflow, "
            transition: GreetPerson
          - name: GreetInSpanish
            type: inject
            data:
              greeting: "Saludos desde JSON Workflow, "
            transition: GreetPerson
          - name: GreetPerson
            type: operation
            actions:
              - name: greetAction
                functionRef:
                  refName: greetFunction
                  arguments:
                    message:  ".greeting + .name"
            end: true
    Copy to Clipboard

    1
    是一个 <workflow_name>。
    2
    表示您必须使用 Dev 配置集部署工作流。
  2. 要部署应用程序,请输入以下命令应用 YAML 文件:

    $ oc apply -f <filename> -n <your_namespace>
    Copy to Clipboard
  3. 输入以下命令验证部署并检查部署工作流的状态:

    $ oc get workflow -n <your_namespace> -w
    Copy to Clipboard

    确定列出了您的工作流,其状态为 RunningCompleted

  4. 输入以下命令直接在集群中编辑工作流:

    $ oc edit sonataflow <workflow_name> -n <your_namespace>
    Copy to Clipboard
  5. 编辑后,保存更改。OpenShift Serverless Logic Operator 会检测更改并相应地更新工作流。

验证

  1. 要确保正确应用更改,请输入以下命令验证工作流的状态和日志:

    1. 运行以下命令,查看工作流的状态:

      $ oc get sonataflows -n <your_namespace>
      Copy to Clipboard
    2. 运行以下命令来查看工作流日志:

      $ oc logs <workflow_pod_name> -n <your_namespace>
      Copy to Clipboard

后续步骤

  1. 完成测试后,运行以下命令来删除资源以避免不必要的用法:

    $ oc delete sonataflow <workflow_name> -n <your_namespace>
    Copy to Clipboard

1.2.2. 使用 Preview 配置集部署工作流

您可以使用 Preview 配置集在 OpenShift Container Platform 上部署本地工作流。这可让您在集群中直接验证和测试类似生产环境中的工作流。在将工作流移至生产环境之前,预览配置集是最终测试和验证的理想选择,以及快速迭代而无需直接管理构建管道。它还确保工作流在类似于生产的设置中平稳运行。

先决条件

  • 在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

要在 Preview 配置集中部署工作流,OpenShift Serverless Logic Operator 使用 OpenShift Container Platform 上的构建系统,这会自动创建用于部署工作流的镜像。

以下小节解释了如何使用带有 SonataFlow 自定义资源的 OpenShift Serverless Logic Operator 在集群中构建和部署您的工作流。

1.2.2.1. 在 Preview 配置集中配置工作流
1.2.2.1.1. 配置工作流基础构建器镜像

如果您的场景需要严格策略用于镜像使用,如安全或强化约束,请替换 OpenShift Serverless Logic Operator 用来构建最终工作流容器镜像的默认镜像。

默认情况下,OpenShift Serverless Logic Operator 使用官方 Red Hat Registry 中分发的镜像来构建工作流。如果您的场景需要严格的策略用于镜像,如 security 或 hardening 约束,您可以替换默认镜像。

要更改此镜像,您可以编辑部署工作流的命名空间中 SonataFlowPlatform 自定义资源(CR)。

先决条件

  • 在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 运行以下命令,列出命名空间中的 SonataFlowPlatform 资源:

    $ oc get sonataflowplatform -n <your_namespace> 
    1
    Copy to Clipboard
    1
    <your_namespace > 替换为命名空间的名称。
  2. 运行以下命令,使用新构建器镜像修补 SonataFlowPlatform 资源:

    $ oc patch sonataflowplatform <name> --patch 'spec:\n  build:\n    config:\n      baseImage: <your_new_image_full_name_with_tag>' -n <your_namespace>
    Copy to Clipboard

验证

  1. 运行以下命令,验证 SonataFlowPlatform CR 是否已正确修补:

    $ oc describe sonataflowplatform <name> -n <your_namespace> 
    1
    Copy to Clipboard
    1
    <name > 替换为 SonataFlowPlatform 资源的名称,将 <your_namespace > 替换为命名空间的名称。

    确保 spec.build.config 下的 baseImage 字段反映了新镜像。

1.2.2.1.2. 自定义基础构建器 Dockerfile

OpenShift Serverless Logic Operator 使用 openshift-serverless-logicOpenShift Serverless Logic Operator 安装命名空间中的 logic-operator-rhel8-builder-config 配置映射自定义资源(CR)来配置和运行工作流构建过程。您可以更改此配置映射中的 Dockerfile 条目,以根据您的需要调整 Dockerfile。

重要

修改 Dockerfile 可能会破坏构建过程。

注意

这个示例仅供参考。实际版本可能稍有不同。不要在您的安装中使用这个示例。

logic-operator-rhel8-builder-config 配置映射 CR 示例

apiVersion: v1
data:
  DEFAULT_WORKFLOW_EXTENSION: .sw.json
  Dockerfile: |
    FROM registry.redhat.io/openshift-serverless-1/logic-swf-builder-rhel8:1.33.0 AS builder

    # Variables that can be overridden by the builder
    # To add a Quarkus extension to your application
    ARG QUARKUS_EXTENSIONS
    # Args to pass to the Quarkus CLI add extension command
    ARG QUARKUS_ADD_EXTENSION_ARGS
    # Additional java/mvn arguments to pass to the builder
    ARG MAVEN_ARGS_APPEND

    # Copy from build context to skeleton resources project
    COPY --chown=1001 . ./resources

    RUN /home/kogito/launch/build-app.sh ./resources

    #=============================
    # Runtime Run
    #=============================
    FROM registry.access.redhat.com/ubi9/openjdk-17:latest

    ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'

    # We make four distinct layers so if there are application changes, the library layers can be re-used
    COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/lib/ /deployments/lib/
    COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/*.jar /deployments/
    COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/app/ /deployments/app/
    COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/quarkus/ /deployments/quarkus/

    EXPOSE 8080
    USER 185
    ENV AB_JOLOKIA_OFF=""
    ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
    ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
kind: ConfigMap
metadata:
  name: sonataflow-operator-builder-config
  namespace: sonataflow-operator-system
Copy to Clipboard

1.2.2.1.3. 更改资源要求

您可以通过在工作流命名空间中创建或编辑 SonataFlowPlatform 资源来指定内部构建器 pod 的资源要求。

SonataFlowPlatform 资源示例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform
spec:
  build:
    template:
      resources:
        requests:
          memory: "64Mi"
          cpu: "250m"
        limits:
          memory: "128Mi"
          cpu: "500m"
Copy to Clipboard

注意

每个命名空间只允许一个 SonataFlowPlatform 资源。获取并编辑 OpenShift Serverless Logic Operator 为您创建的资源,而不是尝试创建另一个资源。

您可以微调特定工作流的资源要求。每个工作流实例都有一个 SonataFlowBuild 实例,其名称与工作流相同。您可以编辑 SonataFlowBuild 自定义资源(CR)并指定参数,如下所示:

SonataFlowBuild CR 示例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowBuild
metadata:
  name: my-workflow
spec:
  resources:
    requests:
      memory: "64Mi"
      cpu: "250m"
    limits:
      memory: "128Mi"
      cpu: "500m"
Copy to Clipboard

这些参数仅适用于新的构建实例。

1.2.2.1.4. 将参数传递给内部构建器

您可以通过将构建参数传递给 SonataFlowBuild 实例,或者在 SonataFlowPlatform 资源中设置默认构建参数来自定义构建流程。

先决条件

  • 在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 运行以下命令,检查现有的 SonataFlowBuild 实例:

    $ oc get sonataflowbuild <name> -n <namespace> 
    1
    Copy to Clipboard
    1
    <name > 替换为 SonataFlowBuild 实例的名称,将 &lt ;namespace& gt; 替换为您的命名空间。
  2. 运行以下命令,在 SonataFlowBuild 实例中添加构建参数:

    $ oc edit sonataflowbuild <name> -n <namespace>
    Copy to Clipboard
  3. SonataFlowBuild 实例的 .spec.buildArgs 字段中添加所需的构建参数:

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlowBuild
    metadata:
      name: <name>  
    1
    
    spec:
      buildArgs:
        - name: <argument_1>
          value: <value_1>
        - name: <argument_2>
          value: <value_2>
    Copy to Clipboard
    1
    现有 SonataFlowBuild 实例的名称。
  4. 保存文件并退出。

    将启动一个带有更新的配置的新构建。

  5. 运行以下命令,在 SonataFlowPlatform 资源中设置默认构建参数:

    $ oc edit sonataflowplatform <name> -n <namespace>
    Copy to Clipboard
  6. SonataFlowPlatform 资源的 .spec.buildArgs 字段中添加所需的构建参数:

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlowPlatform
    metadata:
      name: <name> 
    1
    
    spec:
      build:
        template:
          buildArgs:
            - name: <argument_1>
              value: <value_1>
            - name: <argument_2>
              value: <value_2>
    Copy to Clipboard
    1
    现有 SonataFlowPlatform 资源的名称。
  7. 保存文件并退出。
1.2.2.1.5. 在内部构建器中设置环境变量

您可以将环境变量设置为 SonataFlowBuild 内部构建器 pod。这些变量仅对构建上下文有效,且不会在最终构建的工作流镜像上设置。

先决条件

  • 在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 运行以下命令,检查现有的 SonataFlowBuild 实例:

    $ oc get sonataflowbuild <name> -n <namespace>
    Copy to Clipboard

    <name > 替换为 SonataFlowBuild 实例的名称,将 &lt ;namespace& gt; 替换为您的命名空间。

  2. 运行以下命令来编辑 SonataFlowBuild 实例:

    $ oc edit sonataflowbuild <name> -n <namespace>
    Copy to Clipboard

    SonataFlowBuild 实例示例

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlowBuild
    metadata:
      name: <name>
    spec:
      envs:
        - name: <env_variable_1>
          value: <value_1>
        - name: <env_variable_2>
          value: <value_2>
    Copy to Clipboard

  3. 保存文件并退出。

    一个新的带有更新后的配置会启动。

    或者,您可以在 SonataFlowPlatform 中设置 enviroments,以便每个新构建实例都会将其用作模板。

    SonataFlowPlatform 实例示例

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlowPlatform
    metadata:
      name: <name>
    spec:
      build:
        template:
          envs:
            - name: <env_variable_1>
              value: <value_1>
            - name: <env_variable_2>
              value: <value_2>
    Copy to Clipboard

1.2.2.1.6. 更改基本构建器镜像

您可以通过编辑 logic-operator-rhel8-builder-config 配置映射来修改 OpenShift Serverless Logic Operator 使用的默认构建器镜像。

先决条件

  • 在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 运行以下命令来编辑 logic-operator-rhel8-builder-config 配置映射:

    $ oc edit cm/logic-operator-rhel8-builder-config -n openshift-serverless-logic
    Copy to Clipboard
  2. 修改 dockerfile 条目。

    在编辑器中,找到 Dockerfile 条目并将第一行更改为所需的镜像。

    Example

    data:
      Dockerfile: |
        FROM registry.redhat.io/openshift-serverless-1/logic-swf-builder-rhel8:1.33.0
        # Change the image to the desired one
    Copy to Clipboard

  3. 保存更改。
1.2.2.2. 构建和部署您的工作流

您可以在 OpenShift Container Platform 和 OpenShift Serverless Logic Operator 上创建 SonataFlow 自定义资源(CR)并部署工作流。

先决条件

  • 在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 创建类似以下示例的工作流 YAML 文件:

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlow
    metadata:
      name: greeting
      annotations:
        sonataflow.org/description: Greeting example on k8s!
        sonataflow.org/version: 0.0.1
    spec:
      flow:
        start: ChooseOnLanguage
        functions:
          - name: greetFunction
            type: custom
            operation: sysout
        states:
          - name: ChooseOnLanguage
            type: switch
            dataConditions:
              - condition: "${ .language == \"English\" }"
                transition: GreetInEnglish
              - condition: "${ .language == \"Spanish\" }"
                transition: GreetInSpanish
            defaultCondition: GreetInEnglish
          - name: GreetInEnglish
            type: inject
            data:
              greeting: "Hello from JSON Workflow, "
            transition: GreetPerson
          - name: GreetInSpanish
            type: inject
            data:
              greeting: "Saludos desde JSON Workflow, "
            transition: GreetPerson
          - name: GreetPerson
            type: operation
            actions:
              - name: greetAction
                functionRef:
                  refName: greetFunction
                  arguments:
                    message:  ".greeting+.name"
            end: true
    Copy to Clipboard
  2. 运行以下命令,将 SonataFlow 工作流定义应用到 OpenShift Container Platform 命名空间:

    $ oc apply -f <workflow-name>.yaml -n <your_namespace>
    Copy to Clipboard

    greetings-workflow.yaml 文件的命令示例:

    $ oc apply -f greetings-workflow.yaml -n workflows
    Copy to Clipboard

  3. 运行以下命令列出所有构建配置:

    $ oc get buildconfigs -n workflows
    Copy to Clipboard
  4. 运行以下命令,获取构建过程的日志:

    $ oc logs buildconfig/<workflow-name> -n <your_namespace>
    Copy to Clipboard

    greetings-workflow.yaml 文件的命令示例:

    $ oc logs buildconfig/greeting -n workflows
    Copy to Clipboard

验证

  1. 要验证部署,请运行以下命令列出所有 pod:

    $ oc get pods -n <your_namespace>
    Copy to Clipboard

    确保与工作流对应的 pod 正在运行。

  2. 运行以下命令,检查正在运行的 pod 及其日志:

    $ oc logs pod/<pod-name> -n workflows
    Copy to Clipboard
1.2.2.3. 验证工作流部署

您可以通过从工作流 pod 执行测试 HTTP 调用来验证 OpenShift Serverless Logic 工作流是否正在运行。

先决条件

  • 在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 创建类似以下示例的工作流 YAML 文件:

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlow
    metadata:
      name: greeting
      annotations:
        sonataflow.org/description: Greeting example on k8s!
        sonataflow.org/version: 0.0.1
    spec:
      flow:
        start: ChooseOnLanguage
        functions:
          - name: greetFunction
            type: custom
            operation: sysout
        states:
          - name: ChooseOnLanguage
            type: switch
            dataConditions:
              - condition: "${ .language == \"English\" }"
                transition: GreetInEnglish
              - condition: "${ .language == \"Spanish\" }"
                transition: GreetInSpanish
            defaultCondition: GreetInEnglish
          - name: GreetInEnglish
            type: inject
            data:
              greeting: "Hello from JSON Workflow, "
            transition: GreetPerson
          - name: GreetInSpanish
            type: inject
            data:
              greeting: "Saludos desde JSON Workflow, "
            transition: GreetPerson
          - name: GreetPerson
            type: operation
            actions:
              - name: greetAction
                functionRef:
                  refName: greetFunction
                  arguments:
                    message:  ".greeting+.name"
            end: true
    Copy to Clipboard
  2. 运行以下命令,为工作流服务创建路由:

    $ oc expose svc/<workflow-service-name> -n workflows
    Copy to Clipboard

    此命令创建用于访问工作流服务的公共 URL。

  3. 运行以下命令,为公共 URL 设置环境变量:

    $ WORKFLOW_SVC=$(oc get route/<workflow-service-name> -n <namespace> --template='{{.spec.host}}')
    Copy to Clipboard
  4. 运行以下命令,向工作流发出 HTTP 调用,以将 POST 请求发送到服务:

    $ curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{<"your": "json_payload">}' http://$WORKFLOW_SVC/<endpoint>
    Copy to Clipboard

    输出示例

    {
      "id": "b5fbfaa3-b125-4e6c-9311-fe5a3577efdd",
      "workflowdata": {
        "name": "John",
        "language": "English",
        "greeting": "Hello from JSON Workflow, "
      }
    }
    Copy to Clipboard

    此输出显示工作流正在运行时的预期响应示例。

1.2.2.4. 重启构建

要重启构建,您可以在 SonataFlowBuild 实例中添加或编辑 sonataflow.org/restartBuild: true 注解。如果您的工作流或初始构建版本存在问题,则需要重启构建。

先决条件

  • 在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 运行以下命令,检查 SonataFlowBuild 实例是否存在:

    $ oc get sonataflowbuild <name> -n <namespace>
    Copy to Clipboard
  2. 运行以下命令来编辑 SonataFlowBuild 实例:

    $ oc edit sonataflowbuild/<name> -n <namespace>
    Copy to Clipboard

    <name > 替换为 SonataFlowBuild 实例的名称,将 < namespace> 替换为部署了工作流的命名空间。

  3. 添加 sonataflow.org/restartBuild: true 注解来重新启动构建。

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlowBuild
    metadata:
      name: <name>
      annotations:
        sonataflow.org/restartBuild: true
    Copy to Clipboard

    此操作会触发 OpenShift Serverless Logic Operator 来启动工作流的新构建。

  4. 要监控构建过程,请运行以下命令来检查构建日志:

    $ oc logs buildconfig/<name> -n <namespace>
    Copy to Clipboard

    <name > 替换为 SonataFlowBuild 实例的名称,将 < namespace> 替换为部署了工作流的命名空间。

1.2.3. 使用 GitOps 配置集部署工作流

重要

仅将 GitOps 配置集用于生产环境部署。对于开发、快速迭代或测试,请使用 Dev 或 Preview 配置集。

您可以使用 GitOps 配置集在 OpenShift Container Platform 上部署本地工作流。GitOps 配置集通过允许您在外部创建和管理镜像来完全控制工作流容器镜像,通常是通过 ArgoCD 或 Tekton 等 CI/CD 管道。当在 SonataFlow 自定义资源(CR)中定义容器镜像时,Operator 会自动假设正在使用 GitOps 配置集,且不会尝试以任何方式构建或修改镜像。

先决条件

  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 在 SonataFlow CR 中指定容器镜像:

    带有设置 GitOps 配置集的 SonataFlow CR 示例

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlow
    metadata:
      annotations:
        sonataflow.org/profile: gitops
      name: workflow_name
    spec:
      flow: 
    1
    
    #...
      podTemplate:
        container:
          image: your-registry/workflow_name:tag
    #...
    Copy to Clipboard

    1
    定义必须与构建过程中使用的工作流定义匹配。当使用 GitOps 配置集部署工作流时,Operator 会将此定义与嵌入在容器镜像中的工作流文件进行比较。如果定义和文件不匹配,部署会失败。
  2. 应用 CR 来部署工作流:

    $ oc apply -f <filename>
    Copy to Clipboard

1.2.4. 编辑工作流

当 OpenShift Serverless Logic Operator 部署工作流服务时,它会创建两个配置映射来存储运行时属性:

  • 用户属性:在 ConfigMap 中定义,以带有后缀 的 SonataFlow 对象命名。例如,如果您的工作流名称是 greeting,则 ConfigMap 名称为 greeting-props
  • 受管属性:在 ConfigMap 中定义,以带有 suffix -managed-propsSonataFlow 对象命名。例如,如果您的工作流名称是 greeting,则 ConfigMap 名称为 greeting-managed-props
注意

受管属性始终覆盖具有相同密钥名称的任何 user 属性,用户无法编辑。在下一个协调周期中,Operator 都会覆盖任何更改。

先决条件

  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 运行以下命令打开并编辑 ConfigMap

    $ oc edit cm <workflow_name>-props -n <namespace>
    Copy to Clipboard

    <workflow_name > 替换为工作流的名称,将 &lt;namespace> 替换为部署工作流的命名空间。

  2. application.properties 部分中添加属性。

    存储在 ConfigMap 中的工作流属性示例:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      labels:
        app: greeting
      name: greeting-props
      namespace: default
    data:
      application.properties: |
        my.properties.key = any-value
    Copy to Clipboard

    确保正确格式化属性,以防止 Operator 将配置替换为默认配置。

  3. 进行必要的更改后,保存文件并退出编辑器。

1.2.5. 测试工作流

要验证 OpenShift Serverless Logic 工作流是否在正确运行,您可以从相关 pod 执行测试 HTTP 调用。

先决条件

  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 运行以下命令,为命名空间中的指定服务创建路由:

    $ oc expose svc <service_name> -n <namespace>
    Copy to Clipboard
  2. 运行以下命令,获取新公开的服务的 URL:

    $ WORKFLOW_SVC=$(oc get route/<service_name> --template='{{.spec.host}}')
    Copy to Clipboard
  3. 运行以下命令,执行测试 HTTP 调用并发送 POST 请求:

    $ curl -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' -d '<request_body>' http://$WORKFLOW_SVC/<endpoint>
    Copy to Clipboard
  4. 验证响应,以确保工作流按预期工作。

1.2.6. 工作流故障排除

OpenShift Serverless Logic Operator 使用健康检查探测部署其 pod,以确保工作流以健康状态运行。如果更改导致这些健康检查失败,pod 将停止响应。

先决条件

  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 运行以下命令检查工作流状态:

    $ oc get workflow <name> -o jsonpath={.status.conditions} | jq .
    Copy to Clipboard
  2. 要从工作流的部署中获取和分析日志,请运行以下命令:

    $ oc logs deployment/<workflow_name> -f
    Copy to Clipboard

1.2.7. 删除工作流

您可以使用 oc delete 命令删除当前目录中的 OpenShift Serverless Logic 工作流。

先决条件

  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI (oc)

流程

  1. 验证您具有定义您要删除的工作流的正确文件。例如,workflow.yaml
  2. 运行 oc delete 命令从指定的命名空间中删除工作流:

    $ oc delete -f <your_file> -n <your_namespace>
    Copy to Clipboard

    <your_file > 替换为工作流文件的名称,将 &lt ;your_namespace& gt; 替换为您的命名空间。

第 2 章 全局配置设置

您可以为 OpenShift Serverless Logic Operator 设置全局配置选项。

2.1. 先决条件

  • 您已在目标集群上安装了 OpenShift Serverless Logic Operator。

2.2. 自定义全局配置

安装 OpenShift Serverless Logic Operator 后,您可以访问 openshift-serverless-logic 命名空间中的 logic-operator-rhel8-controllers-config 配置映射文件。此配置文件定义 Operator 在集群中创建新资源时 Operator 的行为方式。但是,对此配置的更改不会影响已存在的资源。

您可以修改配置映射中 controllers_cfg.yaml 键中的任何选项。

下表概述了所有可用的全局配置选项:

配置密钥默认值描述

defaultPvcKanikoSize

1Gi

使用内部 OpenShift Serverless Logic Operator 构建器管理器时,Kaniko 持久性卷声明(PVC)的默认大小。

healthFailureThresholdDevMode

50

等待开发人员模式工作流启动的时间(以秒为单位)。此信息用于控制器管理器来创建新的开发人员模式容器并设置健康检查探测。

kanikoDefaultWarmerImageTag

gcr.io/kaniko-project/warmer:v1.9.0

Operator managed Kaniko 构建器在内部使用的默认镜像来创建 warmup pod。

kanikoExecutorImageTag

gcr.io/kaniko-project/executor:v1.9.0

Operator managed Kaniko 构建器在内部使用的默认镜像来创建 executor pod。

jobsServicePostgreSQLImageTag

registry.redhat.io/openshift-serverless-1/logic-jobs-service-postgresql-rhel8:1.36.0

PostgreSQL 要使用的作业服务镜像。如果为空,OpenShift Serverless Logic Operator 会根据当前的 OpenShift Serverless Logic Operator 版本使用默认的 Apache 社区镜像。

jobsServiceEphemeralImageTag

registry.redhat.io/openshift-serverless-1/logic-jobs-service-ephemeral-rhel8:1.36.0

作业服务镜像,无需使用持久性。如果为空,OpenShift Serverless Logic Operator 会根据当前的 OpenShift Serverless Logic Operator 版本使用默认的 Apache 社区镜像。

dataIndexPostgreSQLImageTag

registry.redhat.io/openshift-serverless-1/logic-data-index-postgresql-rhel8:1.36.0

PostgreSQL 要使用的数据索引服务镜像。如果为空,OpenShift Serverless Logic Operator 会根据当前的 OpenShift Serverless Logic Operator 版本使用默认的 Apache 社区镜像。

dataIndexEphemeralImageTag

registry.redhat.io/openshift-serverless-1/logic-data-index-ephemeral-rhel8:1.36.0

数据索引服务镜像,无需使用持久性。如果为空,OpenShift Serverless Logic Operator 会根据当前的 OpenShift Serverless Logic Operator 版本使用默认的 Apache 社区镜像。

sonataFlowBaseBuilderImageTag

registry.redhat.io/openshift-serverless-1/logic-swf-builder-rhel8:1.36.0

内部 Dockerfile 中使用的 OpenShift Serverless Logic 基础构建器镜像,用于在 preview 配置集中构建工作流应用程序。如果为空,OpenShift Serverless Logic Operator 会根据当前的 OpenShift Serverless Logic Operator 版本使用默认的 Apache 社区镜像。

sonataFlowDevModeImageTag

registry.redhat.io/openshift-serverless-1/logic-swf-devmode-rhel8:1.36.0

用于在 devmode 配置集中部署 OpenShift Serverless Logic 工作流镜像的镜像。如果为空,OpenShift Serverless Logic Operator 会根据当前的 OpenShift Serverless Logic Operator 版本使用默认的 Apache 社区镜像。

builderConfigMapName

logic-operator-rhel8-builder-config

OpenShift Serverless Logic Operator 命名空间中的 builder 配置映射的默认名称。

postgreSQLPersistenceExtensions

下一列

工作流持久性所需的 Quarkus 扩展。在构建工作流配置了 PostgreSQL 持久性时,OpenShift Serverless Logic Operator 构建器使用这些扩展。

kogitoEventsGrouping

true

当设置为 true 时,使用 gitopspreview 配置集配置每个工作流部署,将累积的工作流状态更改事件发送到 Data Index 服务,从而减少生成的事件数量。您可以将值设为 false 以发送单个事件。

kogitoEventsGroupingBinary

true

当设置为 true 时,累积的工作流状态更改事件会以二进制模式发送,从而减少生成的事件的大小。您可以将值设为 false 以发送普通 JSON 事件。

kogitoEventsGroupingCompress

false

当设置为 true 时,如果以二进制模式发送,则积累的工作流状态会改变事件,以某些性能为代价。

您可以使用 oc 命令行工具更新 logic-operator-controllers-config 配置映射来编辑它。

2.2.1. 全局配置更改的影响

当您更新全局配置时,更改会立即影响新创建的资源。例如,如果您更改 sonataFlowDevModeImageTag 属性,且已在 dev 模式中部署工作流,OpenShift Serverless Logic Operator 不会使用更新的镜像配置推出新部署。只有新部署会反映出更改。

2.2.2. 自定义基本构建器镜像

您可以直接更改 OpenShift Serverless Logic Operator 使用的 Dockerfile 中的基本构建器镜像。

另外,您可以在当前命名空间中的 SonataFlowPlatform 配置中指定基本构建器镜像。这样可确保指定的基础镜像仅在给定命名空间中使用。

带有自定义基本构建器镜像的 SonataFlowPlatform 示例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform
spec:
  build:
    config:
        baseImage: dev.local/my-workflow-builder:1.0.0
Copy to Clipboard

另外,您还可以修改全局配置映射中的基本构建器镜像,如下例所示:

使用自定义基本构建器镜像的 ConfigMap 示例

apiVersion: v1
data:
  controllers_cfg.yaml: |
    sonataFlowBaseBuilderImageTag: dev.local/my-workflow-builder:1.0.0
kind: ConfigMap
metadata:
  name: logic-operator-rhel8-controllers-config
  namespace: openshift-serverless-logic
Copy to Clipboard

在自定义基本构建器镜像时,适用以下优先级顺序:

  1. 当前上下文中的 SonataFlowPlatform 配置。
  2. ConfigMap 资源中的全局配置条目。
  3. OpenShift Serverless Logic Operator 命名空间中的 Dockerfile 中的 FROM 子句,在 logic-operator-rhel8-builder-config 配置映射中定义的。

SonataFlowPlatform 配置中的条目始终覆盖任何其他值。

第 3 章 管理服务

3.1. 配置 OpenAPI 服务

OpenAPI 规格 (OAS)为 HTTP API 定义了一个标准的编程语言无关接口。您可以在不访问源代码、额外文档或网络流量检查的情况下了解服务的功能。当使用 OpenAPI 定义服务时,您可以使用最小实施逻辑理解并与之交互。正如接口描述简化了低级别编程一样,OpenAPI 规格 消除了调用服务中的猜测工作。

3.1.1. OpenAPI 功能定义

OpenShift Serverless Logic 允许工作流使用函数中的 OpenAPI 规格引用与远程服务交互。

OpenAPI 功能定义示例

{
   "functions": [
      {
         "name": "myFunction1",
         "operation": "specs/myopenapi-file.yaml#myFunction1"
      }
   ]
}
Copy to Clipboard

operation 属性是由以下参数组成的 字符串

  • URI :引擎使用它来找到规格文件。
  • 操作标识符 :您可以在 OpenAPI 规格文件中找到此标识符。

OpenShift Serverless Logic 支持以下 URI 方案:

  • file:将它用于位于文件系统中的文件。
  • HTTPhttps :将它们用于远程找到的文件。

确保 OpenAPI 规格文件在构建期间可用。OpenShift Serverless Logic 使用内部代码生成功能在运行时发送请求。构建应用程序镜像后,OpenShift Serverless Logic 将无法访问这些文件。

如果要添加到工作流的 OpenAPI 服务没有规格文件,您可以创建一个或多个服务来生成和公开该文件。

3.1.2. 根据 OpenAPI 规格发送 REST 请求

要发送基于 OpenAPI 规格文件的 REST 请求,您必须执行以下步骤:

  • 定义功能引用
  • 访问工作流状态中定义的功能

先决条件

  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您可以访问 OpenAPI 规格文件。

流程

  1. 定义 OpenAPI 功能:

    1. 识别并访问您要调用的服务的 OpenAPI 规格文件。
    2. 将 OpenAPI 规格文件复制到工作流服务目录中,如 < project_application_dir>/specs

      以下示例显示了 multiplication REST 服务的 OpenAPI 规格:

      multiplication REST 服务 OpenAPI 规格示例

      openapi: 3.0.3
      info:
        title: Generated API
        version: "1.0"
      paths:
        /:
          post:
            operationId: doOperation
            parameters:
              - in: header
                name: notUsed
                schema:
                  type: string
                required: false
            requestBody:
              content:
                application/json:
                  schema:
                    $ref: '#/components/schemas/MultiplicationOperation'
            responses:
              "200":
                description: OK
                content:
                  application/json:
                    schema:
                      type: object
                      properties:
                        product:
                          format: float
                          type: number
      components:
        schemas:
          MultiplicationOperation:
            type: object
            properties:
              leftElement:
                format: float
                type: number
              rightElement:
                format: float
                type: number
      Copy to Clipboard

    3. 要在工作流中定义功能,请使用 OpenAPI 规格中的 operationId 来引用功能定义中的所需操作。

      温度转换应用中的函数定义示例

      {
         "functions": [
           {
             "name": "multiplication",
             "operation": "specs/multiplication.yaml#doOperation"
           },
           {
             "name": "subtraction",
             "operation": "specs/subtraction.yaml#doOperation"
           }
         ]
      }
      Copy to Clipboard

    4. 确保您的功能定义引用存储在 < project_application_dir>/specs 目录中的 OpenAPI 文件的正确路径。
  2. 访问工作流状态中定义的功能:

    1. 定义工作流操作来调用您添加的功能定义。确保每个操作引用之前定义的函数。
    2. 使用 functionRef 属性根据其名称引用特定功能。使用 OpenAPI 规格中定义的参数来映射 functionRef 中的参数。

      以下示例演示了在请求路径而不是请求正文中映射参数,您可以参考以下 PetStore API 示例:

      工作流中的映射功能参数示例

      {
         "states": [
          {
            "name": "SetConstants",
            "type": "inject",
            "data": {
              "subtractValue": 32.0,
              "multiplyValue": 0.5556
            },
            "transition": "Computation"
          },
          {
            "name": "Computation",
            "actionMode": "sequential",
            "type": "operation",
            "actions": [
              {
                "name": "subtract",
                "functionRef": {
                  "refName": "subtraction",
                  "arguments": {
                    "leftElement": ".fahrenheit",
                    "rightElement": ".subtractValue"
                  }
                }
              },
              {
                "name": "multiply",
                "functionRef": {
                  "refName": "multiplication",
                  "arguments": {
                     "leftElement": ".difference",
                     "rightElement": ".multiplyValue"
                  }
                }
              }
            ],
            "end": {
              "terminate": true
            }
          }
        ]
      }
      Copy to Clipboard

    3. 检查 OpenAPI 规格的 Operation Object 部分,以了解如何在请求中结构参数。
    4. 使用 jq 表达式从有效负载中提取数据并将其映射到所需参数。确保引擎根据 OpenAPI 规格映射参数名称。
    5. 对于在请求路径而不是正文中需要参数的操作,请参阅 OpenAPI 规格中的参数定义。

      有关请求路径而不是请求正文中映射参数的更多信息,您可以参阅以下 PetStore API 示例:

      映射路径参数示例

      {
        "/pet/{petId}": {
          "get": {
            "tags": ["pet"],
            "summary": "Find pet by ID",
            "description": "Returns a single pet",
            "operationId": "getPetById",
            "parameters": [
              {
                "name": "petId",
                "in": "path",
                "description": "ID of pet to return",
                "required": true,
                "schema": {
                  "type": "integer",
                  "format": "int64"
                }
              }
            ]
          }
        }
      }
      Copy to Clipboard

      以下是调用函数的示例,在请求路径中只添加了一个名为 petId 的参数:

      调用 PetStore 功能的示例

      {
        "name": "CallPetStore", 
      1
      
        "actionMode": "sequential",
        "type": "operation",
        "actions": [
          {
            "name": "getPet",
            "functionRef": {
              "refName": "getPetById", 
      2
      
              "arguments": { 
      3
      
                "petId": ".petId"
              }
            }
          }
        ]
      }
      Copy to Clipboard

      1
      状态定义,如 CallPetStore
      2
      功能定义参考。在上例中,函数定义 getPetById 用于 PetStore OpenAPI 规格。
      3
      参数定义。OpenShift Serverless Logic 在发送请求前将参数 petId 添加到请求路径中。

3.1.3. 配置 OpenAPI 服务的端点 URL

在访问工作流状态中的函数定义后,您可以配置 OpenAPI 服务的端点 URL。

先决条件

  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您已创建了 OpenShift Serverless Logic 项目。
  • 您可以访问 OpenAPI 规格文件。
  • 您已在工作流中定义了函数定义。
  • 您可以访问工作流状态中定义的功能。

流程

  1. 找到您要配置的 OpenAPI 规格文件。例如,substraction.yaml
  2. 通过将特殊字符(如 . )替换为下划线并将字母转换为小写,将文件名转换为有效的配置键。例如,将 substraction.yaml 更改为 substraction_yaml
  3. 要定义配置密钥,请使用转换的文件名作为 REST 客户端配置密钥。将此键设置为环境变量,如下例所示:

    quarkus.rest-client.subtraction_yaml.url=http://myserver.com
    Copy to Clipboard
  4. 要防止 application.properties 文件中的硬编码 URL,请使用环境变量替换,如下例所示:

    quarkus.rest-client.subtraction_yaml.url=${SUBTRACTION_URL:http://myserver.com}
    Copy to Clipboard

    在本例中:

    • 配置密钥: quarkus.rest-client.subtraction_yaml.url
    • 环境变量:SUBTRACTION_URL
    • 回退 URL: http://myserver.com
  5. 确保在系统或部署环境中设置了 (SUBTRACTION_URL) 环境变量。如果没有找到变量,应用程序将使用回退 URL (http://myserver.com)
  6. 将配置键和 URL 替换添加到 application.properties 文件中:

    quarkus.rest-client.subtraction_yaml.url=${SUBTRACTION_URL:http://myserver.com}
    Copy to Clipboard
  7. 部署或重启您的应用程序以应用新的配置设置。

3.2. 配置 OpenAPI 服务端点

OpenShift Serverless Logic 使用 kogito.sw.operationIdStrategy 属性来生成 REST 客户端,用于调用 OpenAPI 文档中定义的服务。此属性决定了如何为 REST 客户端配置派生配置密钥。

kogito.sw.operationIdStrategy 属性支持以下值: FILE_NAMEFULL_URIFUNCTION_NAMESPEC_TITLE

FILE_NAME

OpenShift Serverless Logic 使用 OpenAPI 文档文件名来创建配置密钥。键基于文件名,其中将特殊字符替换为下划线。

配置示例:

quarkus.rest-client.stock_portfolio_svc_yaml.url=http://localhost:8282/ 
1
Copy to Clipboard

1
OpenAPI 文件路径是 &lt ;project_application_dir>/specs/stock-portfolio-svc.yaml。为 REST 客户端配置 URL 生成的密钥是 stock_portfolio_svc_yaml
FULL_URI

OpenShift Serverless Logic 使用 OpenAPI 文档的完整 URI 路径作为配置密钥。整个 URI 被清理以组成密钥。

Serverless 工作流示例

{
    "id": "myworkflow",
    "functions": [
        {
          "name": "myfunction",
          "operation": "https://my.remote.host/apicatalog/apis/123/document"
        }
    ]
}
Copy to Clipboard

配置示例:

quarkus.rest-client.apicatalog_apis_123_document.url=http://localhost:8282/ 
1
Copy to Clipboard

1
URI 路径为 https://my.remote.host/apicatalog/apis/123/document。为 REST 客户端配置 URL 生成的密钥是 apicatalog_apis_123_document
FEATURE_NAME

OpenShift Serverless Logic 组合了工作流 ID 和引用 OpenAPI 文档的功能名称来生成配置密钥。

Serverless 工作流示例

{
    "id": "myworkflow",
    "functions": [
        {
          "name": "myfunction",
          "operation": "https://my.remote.host/apicatalog/apis/123/document"
        }
    ]
}
Copy to Clipboard

配置示例:

quarkus.rest-client.myworkflow_myfunction.url=http://localhost:8282/ 
1
Copy to Clipboard

1
工作流 ID 是 myworkflow。函数名称是 myfunction。为 REST 客户端配置 URL 生成的密钥是 myworkflow_myfunction
SPEC_TITLE

OpenShift Serverless Logic 使用 OpenAPI 文档中的 info.title 值来创建配置键。标题被清理为组成密钥。

OpenAPI 文档示例

openapi: 3.0.3
info:
  title: stock-service API
  version: 2.0.0-SNAPSHOT
paths:
  /stock-price/{symbol}:
...
Copy to Clipboard

配置示例:

quarkus.rest-client.stock-service_API.url=http://localhost:8282/ 
1
Copy to Clipboard

1
OpenAPI 文档标题为 stock-service API。为 REST 客户端配置 URL 生成的密钥是 stock-service_API

3.2.1. 使用 URI 别名

作为 kogito.sw.operationIdStrategy 属性的替代选择,您可以使用 workflow-uri-definitions 自定义扩展为 URI 分配别名。此别名简化了配置过程,并可用作 REST 客户端设置和功能定义中的配置密钥。

workflow-uri-definitions 扩展允许您将 URI 映射到别名,您可以在整个工作流和配置文件中引用。这种方法提供了一种集中管理 URI 及其配置的集中方法。

先决条件

  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您可以访问 OpenAPI 规格文件。

流程

  1. 在您的工作流中添加 workflow-uri-definitions 扩展。在此扩展中,为您的 URI 创建别名。

    工作流示例

    {
      "extensions": [
        {
          "extensionid": "workflow-uri-definitions", 
    1
    
          "definitions": {
            "remoteCatalog": "https://my.remote.host/apicatalog/apis/123/document" 
    2
    
          }
        }
      ],
      "functions": [ 
    3
    
        {
          "name": "operation1",
          "operation": "remoteCatalog#operation1"
        },
        {
          "name": "operation2",
          "operation": "remoteCatalog#operation2"
        }
      ]
    }
    Copy to Clipboard

1
将扩展 ID 设置为 workflow-uri-definitions
2
通过将 remoteCatalog 别名映射到 URI 来设置别名定义,例如 https://my.remote.host/apicatalog/apis/123/document URI。
3
使用带有操作标识符的 remoteCatalog 别名来设置功能操作,如 operation1operation2 操作标识符。
  1. application.properties 文件中,使用工作流中定义的别名配置 REST 客户端。

    属性示例

    quarkus.rest-client.remoteCatalog.url=http://localhost:8282/
    Copy to Clipboard

    在上例中,配置键被设置为 quarkus.rest-client.remoteCatalog.url,URL 设置为 http://localhost:8282/,REST 客户端通过引用 remoteCatalog 别名来使用它。

  2. 在工作流中,在定义在 URI 上操作的功能时使用别名。

    工作流示例(续):

    {
      "functions": [
        {
          "name": "operation1",
          "operation": "remoteCatalog#operation1"
        },
        {
          "name": "operation2",
          "operation": "remoteCatalog#operation2"
        }
      ]
    }
    Copy to Clipboard

3.3. 故障排除服务

对基于 HTTP 的功能调用(如使用 OpenAPI 功能的用户)进行有效的故障排除对于维护工作流编配至关重要。

要诊断问题,您可以跟踪 HTTP 请求和响应。

3.3.1. 追踪 HTTP 请求和响应

OpenShift Serverless Logic 使用 Apache HTTP 客户端来跟踪 HTTP 请求和响应。

先决条件

  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您可以访问 OpenAPI 规格文件。
  • 您可以访问工作流定义和实例 ID,以更正 HTTP 请求和响应。
  • 您可以访问发生 HTTP 服务调用的应用的日志配置

流程

  1. 要跟踪 HTTP 请求和响应,OpenShift Serverless Logic 通过设置以下属性来使用 Apache HTTP 客户端:

    # Turning HTTP tracing on
    quarkus.log.category."org.apache.http".level=DEBUG
    Copy to Clipboard
  2. 在应用程序的 application.properties 文件中添加以下配置,以打开 Apache HTTP 客户端的调试:

    quarkus.log.category."org.apache.http".level=DEBUG
    Copy to Clipboard
  3. 重启应用程序以传播日志配置更改。
  4. 重启后,检查 HTTP 请求追踪的日志。

    追踪的 HTTP 请求的日志示例

    2023-09-25 19:00:55,242 DEBUG Executing request POST /v2/models/yolo-model/infer HTTP/1.1
    2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> POST /v2/models/yolo-model/infer HTTP/1.1
    2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Accept: application/json
    2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Content-Type: application/json
    2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocid: inferencepipeline
    2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocinstanceid: 85114b2d-9f64-496a-bf1d-d3a0760cde8e
    2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocist: Active
    2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoproctype: SW
    2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocversion: 1.0
    2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Content-Length: 23177723
    2023-09-25 19:00:55,244 DEBUG http-outgoing-0 >> Host: yolo-model-opendatahub-model.apps.trustyai.dzzt.p1.openshiftapps.com
    Copy to Clipboard

  5. 在请求日志后检查 HTTP 响应追踪的日志。

    追踪的 HTTP 响应的日志示例

    2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "HTTP/1.1 500 Internal Server Error[\r][\n]"
    2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "content-type: application/json[\r][\n]"
    2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "date: Mon, 25 Sep 2023 19:01:00 GMT[\r][\n]"
    2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "content-length: 186[\r][\n]"
    2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "set-cookie: 276e4597d7fcb3b2cba7b5f037eeacf5=5427fafade21f8e7a4ee1fa6c221cf40; path=/; HttpOnly; Secure; SameSite=None[\r][\n]"
    2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "[\r][\n]"
    2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "{"code":13, "message":"Failed to load Model due to adapter error: Error calling stat on model file: stat /models/yolo-model__isvc-1295fd6ba9/yolov5s-seg.onnx: no such file or directory"}"
    Copy to Clipboard

第 4 章 管理安全性

4.1. OpenAPI 服务的身份验证

要保护 OpenAPI 服务操作,请使用 OpenAPI 规格定义安全方案。这些方案位于 OpenAPI 规格文件的 securitySchemes 部分中。您必须通过添加一个指向该安全方案的 Security Requirement 来配置 操作。当工作流调用此类操作时,会使用该信息来确定所需的身份验证配置。

本节概述支持的验证类型,并演示了如何将它们配置为访问工作流中的安全 OpenAPI 服务操作。

4.1.1. OpenAPI 服务身份验证概述

在 OpenShift Serverless Logic 中,您可以使用 OpenAPI 规格文件中定义的 Security Schemes 保护 OpenAPI 服务操作。这些方案有助于定义工作流中调用的操作的身份验证要求。

安全方案 在 OpenAPI 文档的 securitySchemes 部分中声明。每个方案都指定要应用的验证类型,如 HTTP Basic、API 密钥等。

当工作流调用安全操作时,它会引用这些定义的方案来确定所需的身份验证配置。

安全方案定义示例

"securitySchemes": {
  "http-basic-example": {
    "type": "http",
    "scheme": "basic"
  },
  "api-key-example": {
    "type": "apiKey",
    "name": "my-example-key",
    "in": "header"
  }
}
Copy to Clipboard

如果 OpenAPI 文件定义了 Security Schemes,但不包含操作的安全要求,则默认可以将生成器配置为创建它们。这些默认值适用于没有明确定义的要求的操作。

要配置该方案,您必须使用 quarkus.openapi-generator.codegen.default-security-scheme 属性。default-security-scheme 属性仅在代码生成时使用,而不在运行时使用。该值必须与 securitySchemes 部分中的任何可用方案匹配,如 http-basic-exampleapi-key-example

例如

$ quarkus.openapi-generator.codegen.default-security-scheme=http-basic-example
Copy to Clipboard

4.1.2. 为 OpenAPI 服务配置身份验证凭据

要调用由身份验证方案保护的 OpenAPI 服务操作,您必须在应用程序中配置对应的凭证和参数。OpenShift Serverless Logic 在工作流执行过程中使用这些配置与外部服务进行身份验证。

本节论述了如何在 OpenAPI 规格文件中定义并应用声明的安全方案所需的配置属性。您可以使用 application.properties、与工作流关联的 ConfigMapSonataFlow CR 中的环境变量来提供这些凭证。

注意

OpenAPI 规格文件中定义的安全方案对同一文件中所有可用的操作是全局的。这意味着为特定安全方案设置的配置也适用于其他安全操作。

先决条件

  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您的 OpenAPI 规格包括一个或多个安全方案。
  • 您可以访问 OpenAPI 规格文件。
  • 您已确定了您要配置 http-basic-exampleapi-key-example 的方案。
  • 您可以访问 application.properties 文件、工作流 ConfigMapSonataFlow CR。

流程

  • 使用以下格式组成您的属性键:

    quarkus.openapi-generator.[filename].auth.[security_scheme_name].[auth_property_name]
    Copy to Clipboard
    • filename 是包含 OpenAPI 规格的文件清理的名称,如 security_example_json。要清理此名称,您必须将所有非字母字符替换为 _ 下划线。
    • security_scheme_name 是 OpenAPI 规格文件中安全方案对象定义的清理名称,如 http_basic_exampleapi_key_example。要清理此名称,您必须将所有非字母字符替换为 _ 下划线。
    • auth_property_name 是要配置的属性的名称,如 username。此属性取决于定义的安全方案类型。

      注意

      当您使用环境变量来配置属性时,请遵循 MicroProfile 环境变量映射规则。您可以将属性键中的所有非字母字符替换为下划线 _,并将整个键转换为大写。

以下示例演示了如何使用 application.properties、与工作流关联的 ConfigMapSonataFlow CR 中定义的环境变量提供这些配置属性:

使用 application.properties 文件配置凭证的示例

quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=myuser
quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=mypassword
Copy to Clipboard

使用工作流 ConfigMap配置凭证示例

apiVersion: v1
data:
  application.properties: |
    quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=myuser
    quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=mypassword
kind: ConfigMap
metadata:
  labels:
    app: example-workflow
  name: example-workflow-props
  namespace: example-namespace
Copy to Clipboard

注意

如果工作流名称为 example-workflow,则带有用户定义属性的 ConfigMap 的名称必须是 example-workflow-props

使用 SonataFlow CR 中的环境变量配置凭证示例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
  name: example-workflow
  namespace: example-namespace
  annotations:
    sonataflow.org/description: Example Workflow
    sonataflow.org/version: 0.0.1
    sonataflow.org/profile: preview
spec:
  podTemplate:
    container:
      env:
        - name: QUARKUS_OPENAPI_GENERATOR_SECURITY_EXAMPLE_JSON_AUTH_HTTP_BASIC_EXAMPLE_USERNAME
          value: myuser
        - name: QUARKUS_OPENAPI_GENERATOR_SECURITY_EXAMPLE_JSON_AUTH_HTTP_BASIC_EXAMPLE_PASSWORD
          value: mypassowrd
Copy to Clipboard

4.1.3. 基本 HTTP 验证示例

以下示例演示了如何使用 HTTP 基本身份验证方案保护工作流操作。security-example.json 文件定义了带有单个操作的 OpenAPI 服务,sayHelloBasic,它使用 http-basic-example 安全方案。您可以使用应用程序属性、worfklow ConfigMap 或环境变量来配置凭证。

带有 HTTP 基本身份验证的 OpenAPI 规格示例

{
  "openapi": "3.1.0",
  "info": {
    "title": "Http Basic Scheme Example",
    "version": "1.0"
  },
  "paths": {
    "/hello-with-http-basic": {
      "get": {
        "operationId": "sayHelloBasic",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [{"http-basic-example" : []}]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "http-basic-example": {
        "type": "http",
        "scheme": "basic"
      }
    }
  }
}
Copy to Clipboard

在本例中,sayHelloBasic 操作使用 securitySchemes 部分中定义的 http-basic-example 方案进行保护。在工作流中调用此操作时,您必须配置适当的凭证。

4.1.3.1. 支持的基本 HTTP 身份验证配置属性

您可以使用以下配置密钥为 http-basic-example 方案提供身份验证凭据:

描述属性键Example

用户名凭证

quarkus.openapi-generator.[filename].auth.[security_scheme_name].username

quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=MY_USER

密码凭证

quarkus.openapi-generator.[filename].auth.[security_scheme_name].password

quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=MY_PASSWD

您可以将 [filename] 替换为 sanitized OpenAPI 文件名 security_example_json,将 [security_scheme_name] 替换为 sanitized scheme 名称 http_basic_example

4.1.4. Bearer 令牌身份验证示例

以下示例演示了如何使用 HTTP Bearer 身份验证方案保护 OpenAPI 操作。security-example.json 文件使用 sayHelloBearer 操作定义 OpenAPI 服务,它使用 http-bearer-example 方案进行身份验证。要在工作流执行期间访问安全操作,您必须使用应用属性、工作流 ConfigMap 或环境变量配置 Bearer 令牌。

带有 Bearer 令牌身份验证的 OpenAPI 规格示例

{
  "openapi": "3.1.0",
  "info": {
    "title": "Http Bearer Scheme Example",
    "version": "1.0"
  },
  "paths": {
    "/hello-with-http-bearer": {
      "get": {
        "operationId": "sayHelloBearer",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "http-bearer-example": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "http-bearer-example": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  }
}
Copy to Clipboard

在本例中,sayHelloBearer 操作受 http-bearer-example 方案的保护。您必须在配置中定义有效的 Bearer 令牌,才能成功调用此操作。

4.1.4.1. Bearer 令牌身份验证支持的配置属性

您可以使用以下配置属性键来提供 Bearer 令牌:

描述属性键Example

bearer 令牌

quarkus.openapi-generator.[filename].auth.[security_scheme_name].bearer-token

quarkus.openapi-generator.security_example_json.auth.http_bearer_example.bearer-token=MY_TOKEN

您可以将 [filename] 替换为 sanitized OpenAPI 文件名 security_example_json,将 [security_scheme_name] 替换为 sanitized scheme 名称 http_bearer_example

4.1.5. API 密钥身份验证示例

以下示例演示了如何使用 apiKey 身份验证方案保护 OpenAPI 服务操作。security-example.json 文件定义 sayHelloApiKey 操作,它使用 api-key-example 安全方案。您可以使用应用程序属性、工作流 ConfigMap 或环境变量配置 API 密钥。

带有 API 密钥身份验证的 OpenAPI 规格示例

{
  "openapi": "3.1.0",
  "info": {
    "title": "Api Key Scheme Example",
    "version": "1.0"
  },
  "paths": {
    "/hello-with-api-key": {
      "get": {
        "operationId": "sayHelloApiKey",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [{"api-key-example" : []}]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "api-key-example": {
        "type": "apiKey",
        "name": "api-key-name",
        "in": "header"
      }
    }
  }
}
Copy to Clipboard

在本例中,sayHelloApiKey 操作由 api-key-example 安全方案保护,它使用 HTTP 请求标头中传递的 API 密钥。

4.1.5.1. 支持的 API 密钥身份验证配置属性

您可以使用以下配置属性配置 API 密钥:

描述属性键Example

API 密钥

quarkus.openapi-generator.[filename].auth.[security_scheme_name].api-key

quarkus.openapi-generator.security_example_json.auth.api_key_example.api-key=MY_KEY

您可以将 [filename] 替换为 sanitized OpenAPI 文件名 security_example_json,将 [security_scheme_name] 替换为 sanitized scheme 名称 api_key_example

apiKey 方案类型包含一个额外的 name 属性,用于配置在调用 Open API 服务时要使用的密钥名称。另外,传递密钥的格式取决于属性 中的值

  • 当值为 标头 时,密钥将作为 HTTP 请求参数传递。
  • 当值为 cookie 时,密钥将作为 HTTP cookie 传递。
  • 当值为 query 时,键将作为 HTTP 查询参数传递。

在示例中,密钥在 HTTP 标头中传递,作为 api-key-name: MY_KEY

OpenShift Serverless Logic 在内部管理此功能,因此除了设置属性值外,不需要额外的配置。

4.1.6. clientCredentials OAuth 2.0 身份验证示例

以下示例演示了如何使用 OAuth 2.0 客户端Credentials 流保护 OpenAPI 操作。OpenAPI 规格定义 sayHelloOauth2 操作,它使用 oauth-example 安全方案。与更简单的身份验证方法(如 HTTP Basic 或 API 密钥)不同,OAuth 2.0 身份验证需要额外的与 Quarkus OpenID Connect (OIDC)客户端集成。

使用 OAuth 2.0 的 OpenAPI 规格示例

{
  "openapi": "3.1.0",
  "info": {
    "title": "Oauth2 Scheme Example",
    "version": "1.0"
  },
  "paths": {
    "/hello-with-oauth2": {
      "get": {
        "operationId": "sayHelloOauth2",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "oauth-example": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "oauth-example": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "authorizationUrl": "https://example.com/oauth",
            "tokenUrl": "https://example.com/oauth/token",
            "scopes": {}
          }
        }
      }
    }
  }
}
Copy to Clipboard

在本例中,sayHelloOauth2 操作由 oauth-example 安全方案保护,它使用 clientCredentials 流进行基于令牌的身份验证。

4.1.6.1. 使用 OIDC 客户端过滤器扩展的 OAuth 2.0 支持

OAuth 2.0 令牌管理由 Quarkus OidcClient 处理。要启用此集成,您必须在项目中添加 Quarkus OIDC Client Filter 和 Quarkus OpenApi Generator OIDC 扩展,如下例所示:

使用 Maven 添加扩展示例

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-oidc-client-filter</artifactId>
  <version>3.15.4.redhat-00001</version>
</dependency>

<dependency>
  <groupId>io.quarkiverse.openapi.generator</groupId>
  <artifactId>quarkus-openapi-generator-oidc</artifactId>
  <version>2.9.0-lts</version>
</dependency>
Copy to Clipboard

使用 gitops 配置集添加扩展示例

在构建工作流镜像时,请确保使用以下值配置 QUARKUS_EXTENSIONS 构建参数:

$ --build-arg=QUARKUS_EXTENSIONS=io.quarkus:quarkus-oidc-client-filter:3.15.4.redhat-00001,io.quarkiverse.openapi.generator:quarkus-openapi-generator-oidc:2.9.0-lts
Copy to Clipboard

使用 preview 配置集添加扩展示例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
  namespace: example-namespace
spec:
  build:
    template:
      buildArgs:
        - name: QUARKUS_EXTENSIONS
          value: io.quarkus:quarkus-oidc-client-filter:3.15.4.redhat-00001,io.quarkiverse.openapi.generator:quarkus-openapi-generator-oidc:2.9.0-lts
Copy to Clipboard

注意

SonataFlowPlatform CR 中添加的扩展会包括在该命名空间中使用 preview 配置集部署的所有工作流。

4.1.6.2. OidcClient 配置

要访问安全操作,请在 application.properties 文件中定义 OidcClient 配置。配置使用 OpenAPI 规格中清理的安全方案名称,本例中为 oauth_example,如下所示:

# adjust these configurations according with the authentication service.
quarkus.oidc-client.oauth_example.auth-server-url=https://example.com/oauth
quarkus.oidc-client.oauth_example.token-path=/token
quarkus.oidc-client.oauth_example.discovery-enabled=false
quarkus.oidc-client.oauth_example.client-id=example-app
quarkus.oidc-client.oauth_example.grant.type=client
quarkus.oidc-client.oauth_example.credentials.client-secret.method=basic
quarkus.oidc-client.oauth_example.credentials.client-secret.value=secret
Copy to Clipboard

在这个配置中:

  • oauth_example 与 OpenAPI 文件中的 oauth-example 方案的清理名称匹配。清理方案名称和对应的 OidcClient 之间的链接通过使用该简单命名规则来实现。
  • OidcClient 在工作流执行过程中自动处理令牌生成和续订。

4.1.7. 授权令牌传播示例

OpenShift Serverless Logic 支持使用 oauth2http bearer 安全方案类型的 OpenAPI 操作的令牌传播。通过令牌传播,您的工作流可以将它在工作流创建过程中收到的授权令牌转发到下游服务。当您的工作流需要代表发起请求的客户端与第三方服务交互时,此功能很有用。

您必须为每个安全方案单独配置令牌传播。启用后,所有使用相同方案保护的 OpenAPI 操作都使用传播令牌,除非被显式覆盖。

以下示例在 security-example.json 文件中定义 sayHelloOauth2 操作。此操作使用带有 clientCredentials 流的 oauth-example 安全方案:

使用令牌传播的 OpenAPI 规格示例

{
  "openapi": "3.1.0",
  "info": {
    "title": "Oauth2 Scheme Example",
    "version": "1.0"
  },
  "paths": {
    "/hello-with-oauth2": {
      "get": {
        "operationId": "sayHelloOauth2",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "oauth-example": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "oauth-example": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "authorizationUrl": "https://example.com/oauth",
            "tokenUrl": "https://example.com/oauth/token",
            "scopes": {}
          }
        }
      }
    }
  }
}
Copy to Clipboard

4.1.7.1. 支持的授权令牌传播配置属性

您可以使用以下配置密钥启用和自定义令牌传播:

注意

在工作流处于活跃状态时,令牌会自动传递给下游服务。当工作流进入等待状态时,如计时器或基于事件的暂停,令牌传播将停止。在工作流恢复后,令牌不会被自动传播。如果需要,您必须管理重新身份验证。

属性键Example描述

quarkus.openapi-generator.[filename].auth.[security_scheme_name].token-propagation

quarkus.openapi-generator.security_example_json.auth.oauth_example.token-propagation=true

为给定方案保护的所有操作启用令牌传播。默认为 false

quarkus.openapi-generator.[filename].auth.[security_scheme_name].header-name

quarkus.openapi-generator.security_example_json.auth.oauth_example.header-name=MyHeaderName

(可选)使用自定义标头名称覆盖默认的 Authorization 标头,以便从中读取令牌。

您可以将 [filename] 替换为 sanitized OpenAPI 文件名 security_example_json,将 [security_scheme_name] 替换为 sanitized scheme 名称 oauth_example

第 5 章 支持服务

5.1. 作业服务

Job 服务在云环境中调度并执行任务。独立的服务实现这些任务,可以通过任何受支持的交互模式启动,包括 HTTP 调用或 Knative 事件交付。

在 OpenShift Serverless Logic 中,作业服务负责控制时间触发操作的执行。因此,您可在工作流中使用的所有基于时间的状态都由工作流和作业服务之间的交互处理。

例如,每次工作流执行达到配置超时的状态时,会在作业服务中创建对应的作业,并在满足超时时执行 HTTP 回调来通知工作流。

作业服务的主要目标是管理活动的作业,如需要执行的计划作业。当作业达到其最终状态时,作业服务会将其删除。要在永久存储库中保留作业信息,作业服务会生成可由外部服务记录的状态更改事件,如 Data Index Service。

注意

如果使用 OpenShift Serverless Operator 部署工作流,则不需要手动安装和配置 Job 服务。Operator 会自动处理这些任务,并管理每个工作流需要与之连接的所有必要配置。

5.1.1. 作业服务领导选举过程

Job 服务作为单例服务运行,这意味着只有一个活动实例可以调度和执行作业。

为了防止将服务部署到云中(多个实例可能正在运行)时发生冲突,作业服务支持领导选举过程。只有作为领导机选择的实例才会管理外部通信,以接收和调度作业。

非领导实例处于待机状态,但会继续尝试通过选举过程成为领导。当新实例启动时,它不会立即假定领导。相反,它进入领导选举过程来确定是否可以接管领导角色。

如果当前的领导响应没有响应,或者关闭了,另一个正在运行的实例将接管为领导。

注意

这个领导选举机制使用底层持久性后端,目前仅在 PostgreSQL 实现中被支持。

5.2. 数据索引服务

Data Index 服务是一个专用的支持服务,它存储了与工作流实例及其关联的作业相关的数据。此服务提供了一个 GraphQL 端点,允许用户查询这些数据。

Data Index 服务处理通过事件接收的数据,这些事件可能源自任何工作流或直接来自作业服务。

数据索引支持 Apache Kafka 或 Knative Eventing 来消耗来自工作流的 CloudEvents 信息。它对数据库进行索引并将其存储在数据库中,使其可通过 GraphQL 访问。这些事件提供有关工作流执行的详细信息。Data Index 服务是 OpenShift Serverless Logic 搜索、insights 和管理功能的核心。

Data Index 服务的主要功能如下:

  • 灵活的数据结构
  • 一个可分布式、云就绪的格式
  • 通过 Apache Kafka、Knative 和 CloudEvents 与工作流进行基于消息的通信
  • 强大的基于 GraphQL 的查询 API
注意

当使用 OpenShift Serverless Operator 部署工作流时,您不需要手动安装或配置 Data Index 服务。Operator 会自动管理每个工作流要连接的所有必要配置。

5.2.1. 图形ql 查询工作流实例和作业

要检索有关工作流实例和作业的数据,您可以使用 GraphQL 查询。

5.2.1.1. 从工作流实例检索数据

您可以使用以下查询示例检索有关特定工作流实例的信息:

{
  ProcessInstances {
    id
    processId
    state
    parentProcessInstanceId
    rootProcessId
    rootProcessInstanceId
    variables
    nodes {
      id
      name
      type
    }
  }
}
Copy to Clipboard
5.2.1.2. 从作业检索数据

您可以使用以下查询示例从特定作业实例检索数据:

{
  Jobs {
    id
    status
    priority
    processId
    processInstanceId
    executionCounter
  }
}
Copy to Clipboard
5.2.1.3. 使用 where 参数过滤查询结果

您可以使用 where 参数过滤查询结果,允许基于工作流属性的多个组合。

按状态过滤的查询示例

{
  ProcessInstances(where: {state: {equal: ACTIVE}}) {
    id
    processId
    processName
    start
    state
    variables
  }
}
Copy to Clipboard

按 ID 过滤的查询示例

{
  ProcessInstances(where: {id: {equal: "d43a56b6-fb11-4066-b689-d70386b9a375"}}) {
    id
    processId
    processName
    start
    state
    variables
  }
}
Copy to Clipboard

默认情况下,使用 AND Operator 合并过滤器。您可以通过将过滤器与 AND 或 OR 运算符组合来修改此行为。

将过滤器与 OR Operator 组合的查询示例

{
  ProcessInstances(where: {or: {state: {equal: ACTIVE}, rootProcessId: {isNull: false}}}) {
    id
    processId
    processName
    start
    end
    state
  }
}
Copy to Clipboard

将过滤器与 AND 和 OR Operator 组合的查询示例

{
  ProcessInstances(where: {and: {processId: {equal: "travels"}, or: {state: {equal: ACTIVE}, rootProcessId: {isNull: false}}}}) {
    id
    processId
    processName
    start
    end
    state
  }
}
Copy to Clipboard

根据属性类型,您可以使用以下 avaialable Operator:

属性类型可用的 Operator

字符串数组

  • 包含: 字符串
  • containsAll: 字符串数组
  • containsAny: 字符串数组
  • isNull: 布尔值(true 或 false)

字符串

  • in: 字符串数组
  • 类似于: 字符串
  • isNull: 布尔值(true 或 false)
  • 等于 :字符串

ID

  • in: 字符串数组
  • isNull: 布尔值(true 或 false)
  • 等于 :字符串

布尔值

  • isNull: 布尔值(true 或 false)
  • 等于 :布尔值(true 或 false)

数字

  • 在 中 :整数阵列
  • isNull: 布尔值
  • 等于 :整数
  • betterThan: 整数
  • greaterThanEqual: Integer
  • lessThan: 整数
  • lessThanEqual: Integer
  • :数字范围
  • 来自 :Integer
  • to: 整数

Date

  • isNull: 布尔值(true 或 false)
  • 等于 :日期时间
  • greaterThan: 日期时间
  • greaterThanEqual: 日期时间
  • lessThan: 日期时间
  • lessThanEqual: 日期时间
  • between: 日期范围
  • : 日期时间
  • :日期时间
5.2.1.4. 使用 orderBy 参数对查询结果进行排序

您可以使用 orderBy 参数根据工作流属性对查询结果进行排序。您还可以以升序(ASC)或降序(DESC)顺序指定排序方向。按照您指定的顺序应用多个属性。

ASC 顺序排序的开始时间的查询示例

{
  ProcessInstances(where: {state: {equal: ACTIVE}}, orderBy: {start: ASC}) {
    id
    processId
    processName
    start
    end
    state
  }
}
Copy to Clipboard

5.2.1.5. 使用分页参数限制结果数量

您可以控制返回的结果数量,并使用 分页 参数指定偏移量。

从偏移 0 开始将结果限制为 10 的示例

{
  ProcessInstances(where: {state: {equal: ACTIVE}}, orderBy: {start: ASC}, pagination: {limit: 10, offset: 0}) {
    id
    processId
    processName
    start
    end
    state
  }
}
Copy to Clipboard

5.3. 管理支持服务

本节概述 OpenShift Serverless Logic 所必需的支持服务。它专门用于使用 OpenShift Serverless Logic Operator 配置和部署数据索引服务和作业服务支持服务。

在典型的 OpenShift Serverless Logic 安装中,您必须部署这两个服务来确保成功执行工作流。Data Index 服务允许高效的数据管理,而作业服务则可确保可靠的作业处理。

5.3.1. 支持服务和工作流集成

当您在给定命名空间中部署支持服务时,您可以选择启用或禁用的部署。启用的部署会向 OpenShift Serverless Logic Operator 发出信号,以使用命名空间中的 previewgitops 配置集自动截获工作流部署,并将它们配置为与服务连接。

例如,当启用 Data Index 服务时,工作流会自动配置为向它发送状态更改事件。同样,启用作业服务可确保每当工作流需要超时时创建作业。OpenShift Serverless Logic Operator 还配置作业服务,将事件发送到 Data Index 服务,从而促进服务间的无缝集成。

OpenShift Serverless Logic Operator 不仅部署支持服务,它还管理其他必要的配置,以确保工作流成功执行。所有这些配置都会自动处理。您只需要在 SonataFlowPlatform CR 中提供支持服务配置。

注意

仅部署其中一个支持服务或使用禁用的部署是高级用例。在标准安装中,您必须启用这两个服务来确保平稳执行工作流。

5.3.2. 使用 SonataFlowPlatform CR 支持服务部署

要部署支持服务,请在 SonataFlowPlatform 自定义资源(CR)的 spec.services 部分中配置 dataIndexjobService 子字段。此配置指示 OpenShift Serverless Logic Operator 在应用 SonataFlowPlatform CR 时部署每个服务。

服务的每个配置都独立处理,允许您自定义这些设置以及 SonataFlowPlatform CR 中的其他配置。

有关部署支持服务,请参阅以下构建示例配置:

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
  namespace: example-namespace
spec:
  services:
    dataIndex: 
1

      enabled: true 
2

      # Specific configurations for the Data Index Service
      # might be included here
    jobService: 
3

      enabled: true 
4

      # Specific configurations for the Job Service
      # might be included here
Copy to Clipboard
1
数据索引服务配置字段。
2
设置 enabled: true 部署 Data Index 服务。如果设置为 false 或 omitted,则部署将被禁用。默认值为 false
3
Job Service 配置字段。
4
设置 enabled: true 部署作业服务。如果设置为 false 或 omitted,则部署将被禁用。默认值为 false

5.3.3. 支持服务范围

SonataFlowPlatform 自定义资源(CR)启用在特定命名空间中部署支持服务。这意味着所有自动配置的支持服务和工作流通信都仅限于所部署平台的命名空间。

当不同版本的工作流需要单独的支持服务实例时,此功能特别有用。例如,您可以使用其工作流和支持服务以隔离方式部署应用程序,确保它们与其他部署保持相互独立。

5.3.4. 支持服务持久性配置

OpenShift Serverless Logic 中支持服务的持久性配置可以是临时的,也可以是 PostgreSQL,具体取决于您的环境的需求。临时持久性是开发和测试的理想选择,而 PostgreSQL 持久性则用于生产环境。

5.3.4.1. 临时持久性配置

临时持久性使用专用于每个服务的嵌入式 PostgreSQL 数据库。OpenShift Serverless Logic Operator 使用每个服务重启重新创建此数据库,使其仅适用于开发和测试目的。您不需要以下 SonataFlowPlatform CR 以外的任何其他配置:

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
  namespace: example-namespace
spec:
  services:
    dataIndex:
      enabled: true
      # Specific configurations for the Data Index Service
      # might be included here
    jobService:
      enabled: true
      # Specific configurations for the Job Service
      # might be included here
Copy to Clipboard
5.3.4.2. PostgreSQL 持久性配置

对于 PostgreSQL 持久性,您必须在集群中设置 PostgreSQL 服务器实例。此实例的管理保留独立于 OpenShift Serverless Logic Operator 控制。要将支持服务与 PostgreSQL 服务器连接,您必须配置适当的数据库连接参数。

您可以使用以下示例在 SonataFlowPlatform CR 中配置 PostgreSQL 持久性:

PostgreSQL 持久性配置示例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
  namespace: example-namespace
spec:
  services:
    dataIndex:
      enabled: true
      persistence:
        postgresql:
          serviceRef:
            name: postgres-example 
1

            namespace: postgres-example-namespace 
2

            databaseName: example-database 
3

            databaseSchema: data-index-schema 
4

            port: 1234 
5

          secretRef:
            name: postgres-secrets-example 
6

            userKey: POSTGRESQL_USER 
7

            passwordKey: POSTGRESQL_PASSWORD 
8

    jobService:
      enabled: true
      persistence:
        postgresql:
        # Specific database configuration for the Job Service
        # might be included here.
Copy to Clipboard

1
与 PostgreSQL 数据库服务器连接的服务名称。
2
可选:定义 PostgreSQL Service 的命名空间。默认为 SonataFlowPlatform 命名空间。
3
定义用于存储支持服务数据的 PostgreSQL 数据库的名称。
4
可选:指定存储支持服务数据的模式。默认值为 SonataFlowPlatform 名称,后缀为 with -data-index-service or -jobs-service。例如,s onataflow-platform-example-data-index-service
5
可选:与 PostgreSQL 服务连接的端口号。默认值为 5432
6
定义包含数据库访问的用户名和密码的机密名称。
7
定义机密中的密钥名称,其中包含要与数据库连接的用户名。
8
定义机密中的密钥名称,其中包含要与数据库连接的密码。
注意

您可以使用对应的 persistence 字段独立配置每个服务的持久性。

运行以下命令,创建 secret 以访问 PostgreSQL:

$ oc create secret generic <postgresql_secret_name> \
  --from-literal=POSTGRESQL_USER=<user> \
  --from-literal=POSTGRESQL_PASSWORD=<password> \
  -n <namespace>
Copy to Clipboard
5.3.4.3. 常见的 PostgreSQL 持久性配置

OpenShift Serverless Logic Operator 会自动将支持服务连接到 spec.persistence 字段中配置的通用 PostgreSQL 服务器。

对于规则,以下优先级适用:

  • 如果您为支持服务配置特定的持久性,如 services.dataIndex.persistence,它会使用该配置。
  • 如果没有为服务配置持久性,系统将使用当前平台的通用持久性配置。
注意

使用通用 PostgreSQL 配置时,每个服务模式会自动设置为 SonataFlowPlatform 名称,后缀为 with -data-index-service-jobs-service,例如 sonataflow-platform-example-data-index-service

5.3.5. 支持服务事件系统配置

对于 OpenShift Serverless Logic 安装,会生成以下类型的事件:

  • 与工作流业务逻辑相关的传出和传入事件。
  • 从工作流发送到 Data Index 和 Job Service 的事件。
  • 从作业服务发送到数据索引服务的事件。

OpenShift Serverless Logic Operator 利用 Knative Eventing 系统来管理这些事件和服务之间的所有事件通信,确保事件处理高效且可靠的事件处理。

5.3.5.1. 平台范围内的事件系统配置

要配置平台范围内的事件系统,您可以使用 SonataFlowPlatform CR 中的 spec.eventing.broker.ref 字段来引用 Knative Eventing Broker。此配置指示 OpenShift Serverless Logic Operator 自动链接支持服务,以使用指定的代理生成和使用事件。

使用 previewgitops 配置集部署到同一命名空间中的工作流,且没有自定义事件系统配置,会自动链接到指定的代理。

重要

在生产环境中,使用生产环境就绪的代理(如 Knative Kafka Broker)来提高可扩展性和可靠性。

以下示例演示了如何为平台范围事件系统配置 SonataFlowPlatform CR:

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
  namespace: example-namespace
spec:
  eventing:
    broker:
      ref:
        name: example-broker 
1

        namespace: example-broker-namespace 
2

        apiVersion: eventing.knative.dev/v1
        kind: Broker
Copy to Clipboard
1
指定 Knative Eventing Broker 名称。
2
可选:定义 Knative Eventing Broker 的命名空间。如果没有指定值,则参数默认为 SonataFlowPlatform 命名空间。考虑在与 SonataFlowPlatform 相同的命名空间中创建 Broker。
5.3.5.2. 系统范围的事件系统配置

系统范围的事件系统配置允许对事件系统进行精细的控制,特别是 Data Index 或 Job Service。

注意

对于 OpenShift Serverless Logic 安装,请考虑使用平台范围事件系统配置。服务级别配置仅用于高级用例。

5.3.5.3. 数据索引事件系统配置

要为 Data Index 配置服务范围事件系统,您必须使用 SonataFlowPlatform CR 中的 spec.services.dataIndex.source.ref 字段来引用特定的 Knative Eventing Broker。此配置指示 OpenShift Serverless Logic Operator 自动链接 Data Index,以使用来自该代理的 SonataFlow 系统事件。

重要

在生产环境中,使用生产环境就绪的代理(如 Knative Kafka Broker)来提高可扩展性和可靠性。

以下示例显示了 Data Index 事件系统配置:

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
spec:
  services:
    dataIndex:
      source:
        ref:
          name: data-index-source-example-broker 
1

          namespace: data-index-source-example-broker-namespace 
2

          apiVersion: eventing.knative.dev/v1
          kind: Broker
Copy to Clipboard
1
指定 Data Index 使用事件的 Knative Eventing Broker。
2
可选:定义 Knative Eventing Broker 的命名空间。如果没有指定值,则参数默认为 SonataFlowPlatform 命名空间。考虑在与 SonataFlowPlatform 相同的命名空间中创建代理。
5.3.5.4. 作业服务事件系统配置

要为作业服务配置服务范围事件系统,您必须使用 SonataFlowPlatform CR 中的 spec.services.jobService.source.refspec.services.jobService.sink.ref 字段。这些字段指示 OpenShift Serverless Logic Operator 根据提供的配置自动链接作业服务以使用和生成 SonataFlow 系统事件。

重要

在生产环境中,使用生产环境就绪的代理(如 Knative Kafka Broker)来提高可扩展性和可靠性。

以下示例显示了作业服务事件系统配置:

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
spec:
  services:
    jobService:
      source:
        ref:
          name: jobs-service-source-example-broker 
1

          namespace: jobs-service-source-example-broker-namespace 
2

          apiVersion: eventing.knative.dev/v1
          kind: Broker
      sink:
        ref:
          name: jobs-service-sink-example-broker 
3

          namespace: jobs-service-sink-example-broker-namespace 
4

          apiVersion: eventing.knative.dev/v1
          kind: Broker
Copy to Clipboard
1
指定作业服务消耗事件的 Knative Eventing Broker。
2
可选:定义 Knative Eventing Broker 的命名空间。如果没有指定值,则参数默认为 SonataFlowPlatform 命名空间。考虑在与 SonataFlowPlatform 相同的命名空间中创建 Broker。
3
指定作业服务在其上生成事件的 Knative Eventing Broker。
4
可选:定义 Knative Eventing Broker 的命名空间。如果没有指定值,则参数默认为 SonataFlowPlatform 命名空间。考虑在与 SonataFlowPlatform 相同的命名空间中创建 Broker。
5.3.5.5. 用于支持服务的集群范围的事件系统配置

当您部署集群范围的支持服务时,支持服务会自动链接到 SonataFlowPlatform CR 中指定的 Broker,该代理由 SonataFlowClusterPlatform CR 引用。

5.3.5.6. 支持服务的 Eventing 系统配置优先级规则

OpenShift Serverless Logic Operator 按照定义的优先级顺序为支持服务配置事件系统。

Eventing 系统配置优先级规则如下:

  1. 如果支持服务有自己的事件系统配置,则使用 Data Index 事件系统或作业服务事件系统配置,则支持服务配置具有优先权。
  2. 如果 SonataFlowPlatform CR 认为支持服务配置了平台范围事件系统,则该配置具有优先权。
  3. 如果当前集群配置了集群范围的事件系统,则该配置将具有优先权。
  4. 如果以前配置没有存在,支持服务通过直接 HTTP 调用来提供事件。
5.3.5.7. Eventing 系统链接配置

OpenShift Serverless Logic Operator 会自动创建 Knative Eventing、SinkBindings 和触发器,以使用事件系统链接支持服务。这些对象通过支持服务实现事件的生产和消费。

以下示例显示了为 SonataFlowPlatform CR 创建的 Knative Native 事件对象:

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
  namespace: example-namespace
spec:
  eventing:
    broker:
      ref:
        name: example-broker 
1

        apiVersion: eventing.knative.dev/v1
        kind: Broker
  services:
    dataIndex: 
2

      enabled: true
    jobService: 
3

      enabled: true
Copy to Clipboard
1
数据索引、作业服务和工作流使用,除非被覆盖。
2
数据索引临时部署,配置 Data Index 服务。
3
作业服务临时部署,配置作业服务。

以下示例演示了如何配置用于 SonataFlowPlatform CR 的 Knative Kafka Broker:

SonataFlowPlatform CR 使用的 Knative Kafka Broker 示例

apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
  annotations:
    eventing.knative.dev/broker.class: Kafka 
1

  name: example-broker
  namespace: example-namespace
spec:
  config:
    apiVersion: v1
    kind: ConfigMap
    name: kafka-broker-config
    namespace: knative-eventing
Copy to Clipboard

1
使用 Kafka 类创建 Kafka Knative Broker。

以下命令显示为 Data Index 和 Job Service 事件设置的触发器列表,显示哪些服务订阅事件:

$ oc get triggers -n example-namespace
Copy to Clipboard

输出示例

NAME                                                        BROKER           SINK                                                       AGE   CONDITIONS   READY   REASON
data-index-jobs-fbf285df-c0a4-4545-b77a-c232ec2890e2        example-broker   service:sonataflow-platform-example-data-index-service     106s  7 OK / 7    True    -
data-index-process-definition-e48b4e4bf73e22b90ecf7e093ff6b1eaf   example-broker   service:sonataflow-platform-example-data-index-service     106s  7 OK / 7    True    -
data-index-process-error-fbf285df-c0a4-4545-b77a-c232ec2890e2   example-broker   service:sonataflow-platform-example-data-index-service     106s  7 OK / 7    True    -
data-index-process-instance-mul35f055c67a626f51bb8d2752606a6b54   example-broker   service:sonataflow-platform-example-data-index-service     106s  7 OK / 7    True    -
data-index-process-node-fbf285df-c0a4-4545-b77a-c232ec2890e2      example-broker   service:sonataflow-platform-example-data-index-service     106s  7 OK / 7    True    -
data-index-process-state-fbf285df-c0a4-4545-b77a-c232ec2890e2     example-broker   service:sonataflow-platform-example-data-index-service     106s  7 OK / 7    True    -
data-index-process-variable-ac727d6051750888dedb72f697737c0dfbf   example-broker   service:sonataflow-platform-example-data-index-service     106s  7 OK / 7    True    -
jobs-service-create-job-fbf285df-c0a4-4545-b77a-c232ec2890e2    example-broker   service:sonataflow-platform-example-jobs-service         106s  7 OK / 7    True    -
jobs-service-delete-job-fbf285df-c0a4-4545-b77a-c232ec2890e2    example-broker   service:sonataflow-platform-example-jobs-service         106s  7 OK / 7    True    -
Copy to Clipboard

要查看作业服务的 SinkBinding 资源,请使用以下命令:

$ oc get sources -n example-namespace
Copy to Clipboard

输出示例

NAME                                          TYPE          RESOURCE                           SINK                    READY
sonataflow-platform-example-jobs-service-sb   SinkBinding   sinkbindings.sources.knative.dev   broker:example-broker   True
Copy to Clipboard

5.3.6. 高级支持服务配置

如果需要为支持服务应用高级配置,请在 SonataFlowPlatform 自定义资源(CR)中使用 podTemplate 字段。此字段允许您通过指定副本数、环境变量、容器镜像和初始化选项等配置来自定义服务 pod 部署。

您可以使用以下示例为服务配置高级设置:

Data Index 服务的高级配置示例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
  namespace: example-namespace
spec:
  services:
    # This can be either 'dataIndex' or 'jobService'
    dataIndex:
      enabled: true
      podTemplate:
        replicas: 2 
1

        container: 
2

          env: 
3

            - name: <any_advanced_config_property>
              value: <any_value>
          image: 
4

        initContainers: 
5
Copy to Clipboard

注意

您可以根据您的要求,将 'services' 字段设置为 'dataIndex' 或 'jobService'。其余的配置保持不变。

1
定义副本数量。默认值为 1。如果是 jobService,则该值始终被覆盖到 1,因为它作为单例服务运行。
2
包含运行该服务的容器的具体配置。
3
允许您通过指定环境变量来微调服务属性。
4
为服务配置容器镜像,如果您需要更新或自定义镜像,则很有用。
5
为 pod 配置 init 容器,有助于在主容器启动前设置先决条件。
注意

podTemplate 字段提供定制每个支持服务部署的灵活性。它遵循标准 PodSpec API,即相同的 API 验证规则适用于这些字段。

5.3.7. 集群范围内的支持服务

您可以使用 SonataFlowClusterPlatform 自定义资源(CR)定义一组集群范围的支持服务,供不同命名空间中的工作流使用。通过引用特定于命名空间的 SonataFlowPlatform CR,您可以对集群范围内扩展这些服务。

您可以使用以下基本配置示例,它允许在任何命名空间中部署的工作流使用在特定命名空间中部署的支持服务,如 example-namespace

SonataFlowClusterPlatform CR 示例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowClusterPlatform
metadata:
  name: cluster-platform
spec:
  platformRef:
    name: sonataflow-platform-example 
1

    namespace: example-namespace 
2
Copy to Clipboard

1
指定已安装的 SonataFlowPlatform CR 的名称,用于管理支持服务。
2
指定管理支持服务的 SonataFlowPlatform CR 的命名空间。
注意

您可以通过在 SonataFlowPlatform.spec.services 中配置该命名空间来覆盖任何命名空间中的这些集群范围的服务。

第 6 章 配置工作流服务

本节论述了如何使用 OpenShift Serverless Logic Operator 配置工作流服务。本节概述了您可以根据环境和用例自定义工作流服务的关键概念和配置选项。您可以编辑工作流配置、管理特定属性,并定义全局管理的属性,以确保工作流的一致性和高效执行。

6.1. 修改工作流配置

OpenShift Serverless Logic Operator 根据每个工作流的两个 ConfigMap 决定工作流配置: 用户定义的 属性的工作流以及 Operator managed-properties 的工作流:

  • 用户定义的属性: 如果您的工作流需要特定的配置,请确保创建一个名为 < workflow-name>-propsConfigMap,其中包含工作流部署前的所有配置。例如,如果您的工作流名称是 greeting,则 ConfigMap 名称为 greeting-managed-props。如果 ConfigMap 不存在,Operator 会创建工作流来具有空或默认内容。
  • 受管属性: 由 Operator 自动生成并存储在名为 < workflow-name>-managed-propsConfigMap 中。这些属性通常与工作流的配置相关。属性连接到支持服务、事件系统等。
注意

受管属性总是使用相同的密钥覆盖用户定义的属性。这些受管属性是只读的,在每次协调周期期间由 Operator 重置。

先决条件

  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您已创建了 OpenShift Serverless Logic 项目。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI(oc)。
  • 您之前已创建了工作流 用户定义的 属性 ConfigMap,或者 Operator 已创建它。

流程

  1. 打开终端,再访问 OpenShift Serverless Logic 项目。确保您在部署了工作流服务的正确项目、命名空间 中工作。

    $ oc project <your-project-name>
    Copy to Clipboard
  2. 识别您要配置的工作流的名称。

    例如,如果您的工作流命名为 greeting,则用户定义的属性会存储在名为 greeting-propsConfigMap 中。

  3. 执行以下示例命令来编辑工作流 ConfigMap

    $ oc edit configmap greeting-props
    Copy to Clipboard

    greeting 替换为您的工作流的实际名称。

  4. 修改 application.properties 部分。

    找到 data 部分,并使用您所需的配置更新 application.properties 字段。

    ConfigMap示例

    apiVersion: v1
    kind: ConfigMap
    metadata:
      labels:
        app: greeting
      name: greeting-props
      namespace: default
    data:
      application.properties: |
        my.properties.key = any-value
      ...
    Copy to Clipboard

  5. 在更新属性后,保存文件并退出编辑器。更新的配置将自动应用。
注意

工作流运行时基于 Quarkus,因此 application.properties 下的所有键都必须遵循 Quarkus 属性语法。如果格式无效,OpenShift Serverless Logic Operator 会在下一次协调周期期间使用默认值覆盖您的更改。

验证

  • 要确认您的更改已被成功应用,请执行以下示例命令:

    $ oc get configmap greeting-props -o yaml
    Copy to Clipboard

6.2. 工作流服务中的受管属性

OpenShift Serverless Logic Operator 使用受管属性来控制重要的运行时行为。这些值会单独存储,并在每次协调周期期间覆盖用户定义的属性。您还可以通过更新同一命名空间中的 SonataFlowPlatform 资源来全局应用自定义管理属性。

OpenShift Serverless Logic Operator 使用的一些属性是受管属性,无法通过标准用户配置来更改。这些属性存储在专用的 ConfigMap 中,通常命名为 < workflow-name>-managed-props。如果您尝试直接修改任何受管属性,Operator 会自动将它恢复到其默认值,但它会保留其他用户定义的更改。

注意

您不能使用全局受管属性覆盖 Operator 设置的默认受管属性。这些默认值始终在协调过程中强制执行。

下表将一些核心管理的属性列为示例:

表 6.1. 受管属性概述
属性键不可变值profile

quarkus.http.port

8080

all

kogito.service.url

http://greeting.example-namespace

all

org.kie.kogito.addons.knative.eventing.health-enabled

false

dev

其他受管属性包括 Kubernetes 服务发现设置、数据索引位置属性、作业服务位置属性和 Knative Eventing 系统配置。

6.3. 定义 global-managed-properties

您可以通过编辑 SonataFlowPlatform 资源,为特定命名空间中的所有工作流定义自定义全局管理属性。这些属性在 .spec.properties.flow 属性下定义,并自动应用到同一命名空间中的所有工作流服务。

先决条件

  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您已创建了 OpenShift Serverless Logic 项目。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 在与工作流服务相同的命名空间中找到 SonataFlowPlatform 资源。

    这是您要定义全局管理的属性的位置。

  2. 执行以下命令,在默认编辑器中打开 SonataFlowPlatform 资源:

    $ oc edit sonataflowplatform sonataflow-platform-example
    Copy to Clipboard
  3. 定义自定义全局管理的属性。

    在编辑器中,导航到 spec.properties.flow 部分,并定义您需要的属性,如下例所示:

    带有流属性的 SonataFlowPlatform 示例

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlowPlatform
    metadata:
      name: sonataflow-platform-example
    spec:
        properties:
            flow: 
    1
    
             - name: quarkus.log.category 
    2
    
               value: INFO 
    3
    Copy to Clipboard

    1
    属性定义自定义全局管理的属性列表。
    2
    属性键。
    3
    全局应用的属性值。

    此配置会将 quarkus.log.category=INFO 属性添加到命名空间中每个工作流服务的受管属性。

  4. 可选: 使用外部 ConfigMapSecret

    您还可以使用 valueFrom 属性引用现有 ConfigMapSecret 资源的值,如下例所示:

    ConfigMap 和 Secret 的 SonataFlowPlatform 属性示例

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlowPlatform
    metadata:
      name: sonataflow-platform-example
    spec:
        properties:
            flow:
             - name: my.petstore.auth.token
               valueFrom: 
    1
    
                    secretKeyRef: petstore-credentials 
    2
    
                        keyName: AUTH_TOKEN
             - name: my.petstore.url
               valueFrom:
                    configMapRef: petstore-props 
    3
    
                        keyName: PETSTORE_URL
    Copy to Clipboard

    1
    valueFrom 属性来自 Kubernetes EnvVar API,其的工作方式与环境变量如何引用外部源类似。
    2
    valueFrom.secretKeyRefpetstore-credentials secret 中名为 AUTH_TOKEN 的键拉取值。
    3
    valueFrom.configMapRefpetstore-props ConfigMap 中名为 PETSTORE_URL 的键拉取值。

第 7 章 管理工作流持久性

您可以配置 SonataFlow 实例,以在关系数据库中使用持久性和存储工作流上下文。

按照设计,Kubernetes pod 是无状态的。这个行为可能会对在 pod 重启后维护应用程序状态的工作负载造成挑战。对于 OpenShift Serverless Logic,pod 默认重启时工作流上下文会丢失。

为确保在这样的场景中进行工作流恢复,您必须配置工作流运行时持久性。使用 SonataFlowPlatform 自定义资源(CR)或 SonataFlow CR 来提供此配置。配置的范围因您使用的资源而异。

7.1. 使用 SonataFlowPlatform CR 配置持久性

SonataFlowPlatform 自定义资源(CR)在命名空间级别启用持久性配置。此方法会自动将持久性设置应用到命名空间中部署的所有工作流。它简化了资源配置,特别是当命名空间中的多个工作流属于同一应用程序时。虽然默认应用此配置,但命名空间中的单个工作流可以使用 SonataFlow CR 覆盖它。

OpenShift Serverless Logic Operator 还使用此配置来为支持服务设置持久性。

注意

持久性配置仅在工作流部署时应用。对 SonataFlowPlatform CR 的更改不会影响已部署的工作流。

流程

  1. 定义 SonataFlowPlatform CR。
  2. SonataFlowPlatform CR spec 的 persistence 字段中指定持久性设置。

    apiVersion: sonataflow.org/v1alpha08
    kind: SonataFlowPlatform
    metadata:
      name: sonataflow-platform-example
      namespace: example-namespace
    spec:
      persistence:
        postgresql:
          serviceRef:
            name: postgres-example 
    1
    
            namespace: postgres-example-namespace 
    2
    
            databaseName: example-database 
    3
    
            port: 1234 
    4
    
          secretRef:
            name: postgres-secrets-example 
    5
    
            userKey: POSTGRESQL_USER 
    6
    
            passwordKey: POSTGRESQL_PASSWORD 
    7
    Copy to Clipboard
    1
    Kubernetes Service 连接到 PostgreSQL 数据库的名称。
    2
    可选: PostgreSQL Service 的命名空间。默认为 SonataFlowPlatform 的命名空间。
    3
    用于存储工作流数据的 PostgreSQL 数据库名称。
    4
    可选:连接到 PostgreSQL 服务的端口号。默认值为 5432
    5
    包含数据库凭证的 Kubernetes Secret 名称。
    6
    包含数据库用户名的 Secret 对象中的密钥。
    7
    包含数据库密码的 Secret 对象中的键。
  3. 查看工作流生成的环境变量。

    以下示例显示了使用较早 SonataFlowPlatform 配置部署的名为 example-workflow 的工作流生成的环境变量。这些配置与持久性相关,并由 OpenShift Serverless Logic Operator 管理。应用这些设置后,您无法修改这些设置。

注意

当您使用 SonataFlowPlatform 持久性时,每个工作流都配置为使用与工作流名称相等的 PostgreSQL 模式名称。

env:
  - name: QUARKUS_DATASOURCE_USERNAME
    valueFrom:
      secretKeyRef:
        name: postgres-secrets-example
        key: POSTGRESQL_USER
  - name: QUARKUS_DATASOURCE_PASSWORD
    valueFrom:
      secretKeyRef:
        name: postgres-secrets-example
        key: POSTGRESQL_PASSWORD
  - name: QUARKUS_DATASOURCE_DB_KIND
    value: postgresql
  - name: QUARKUS_DATASOURCE_JDBC_URL
    value: >-
      jdbc:postgresql://postgres-example.postgres-example-namespace:1234/example-database?currentSchema=example-workflow
  - name: KOGITO_PERSISTENCE_TYPE
    value: jdbc
Copy to Clipboard

当此持久性配置就位时,OpenShift Serverless Logic Operator 会使用 previewgitops 配置集配置在此命名空间中部署的每个工作流,通过将相关的 JDBC 连接参数注入环境变量来与 PostgreSQL 数据库进行连接。

注意

PostgreSQL 目前是唯一受支持的用于持久性的数据库。

对于使用 preview 配置集进行 SonataFlow CR 部署,OpenShift Serverless Logic 构建系统自动包含启用持久性所需的特定 Quarkus 扩展。这样可确保与持久性机制兼容,简化了工作流部署过程。

7.2. 使用 SonataFlow CR 配置持久性

SonataFlow 自定义资源(CR)启用特定于工作流的持久性配置。您可以独立使用此配置,即使当前命名空间中已经设置了 SonataFlowPlatform 持久性。

流程

  • 使用 SonataFlow CR 规格中的 persistence 字段来配置持久性,如下例所示:
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
  name: example-workflow
  annotations:
    sonataflow.org/description: Example Workflow
    sonataflow.org/version: 0.0.1
spec:
  persistence:
    postgresql:
      serviceRef:
        name: postgres-example 
1

        namespace: postgres-example-namespace 
2

        databaseName: example-database 
3

        databaseSchema: example-schema 
4

        port: 1234 
5

      secretRef:
        name: postgres-secrets-example 
6

        userKey: POSTGRESQL_USER 
7

        passwordKey: POSTGRESQL_PASSWORD 
8

  flow:
Copy to Clipboard
1
连接到 PostgreSQL 数据库服务器的 Kubernetes Service 的名称。
2
可选:包含 PostgreSQL Service 的命名空间。默认为工作流命名空间。
3
存储工作流数据的 PostgreSQL 数据库的名称。
4
可选:工作流数据的数据库模式的名称。默认为工作流名称。
5
可选:连接到 PostgreSQL 服务的端口。默认值为 5432
6
包含数据库凭证的 Kubernetes Secret 名称。
7
包含数据库用户名的 Secret 对象中的密钥。
8
包含数据库密码的 Secret 对象中的密钥。

此配置告知 OpenShift Serverless Logic Operator,工作流在部署时必须连接到指定的 PostgreSQL 数据库服务器。OpenShift Serverless Logic Operator 将相关的 JDBC 连接参数作为环境变量添加到工作流容器中。

注意

PostgreSQL 目前是唯一受支持的用于持久性的数据库。

对于使用 preview 配置集进行 SonataFlow CR 部署,OpenShift Serverless Logic 构建系统包括所需的 Quarkus 扩展来自动启用持久性。

7.3. 持久性配置优先级规则

您可以独立使用 SonataFlow 自定义资源(CR)持久性,或者与 SonataFlowPlatform CR 持久性一起使用。如果当前命名空间中存在 SonataFlowPlatform CR 持久性配置,以下规则决定了应用哪个持久性配置:

  1. 如果 SonataFlow CR 包含持久性配置,则该配置具有优先权并应用到工作流。
  2. 如果 SonataFlow CR 不包含持久性配置,并且没有 spec.persistence 字段,OpenShift Serverless Logic Operator 会使用当前 SonataFlowPlatform 中的持久性配置。
  3. 要禁用工作流的持久性,请在 SonataFlow CR 中明确设置 spec.persistence: {}。此配置可确保工作流不会继承 SonataFlowPlatform CR 中的持久性设置。

7.4. 配置集的持久性要求

SonataFlowPlatform 自定义资源(CR)和 SonataFlow CR 提供的持久性配置同样适用于 previewgitops 配置集。但是,您必须避免将这些配置与 dev 配置集搭配使用,因为此配置集完全忽略它们。

previewgitops 配置集之间的主要区别在于构建过程。

使用 gitops 配置集时,请确保构建过程中将以下 Quarkus 扩展包含在工作流镜像中。

groupIdartifactIdversion

io.quarkus

quarkus-agroal

3.15.4.redhat-00001

io.quarkus

quarkus-jdbc-postgresql

3.15.4.redhat-00001

org.kie

kie-addons-quarkus-persistence-jdbc

9.103.0.redhat-00003

如果您使用 registry.redhat.io/openshift-serverless-1/logic-swf-builder-rhel8:1.36.0 生成镜像,您可以传递以下构建参数使其包含这些扩展:

$ QUARKUS_EXTENSIONS=io.quarkus:quarkus-agroal:3.15.4.redhat-00001,io.quarkus:quarkus-jdbc-postgresql:3.15.4.redhat-00001,org.kie:kie-addons-quarkus-persistence-jdbc:9.103.0.redhat-00003
Copy to Clipboard

7.5. 数据库架构初始化

当您将 SonataFlow 与 PostgreSQL 持久性搭配使用时,您可以通过启用 Flyway 来初始化数据库架构,或使用数据定义语言(DDL)脚本手动应用数据库架构更新。

Flyway 由 kie-addons-quarkus-flyway 运行时模块管理,它默认是禁用的。要启用 Flyway,您必须使用以下方法之一进行配置:

7.5.1. 工作流 ConfigMap 中的 Flyway 配置

要在工作流 ConfigMap 中启用 Flyway,您可以添加以下属性:

在工作流 ConfigMap中启用 Flyway 的示例

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    app: example-workflow
  name: example-workflow-props
data:
  application.properties: |
    kie.flyway.enabled = true
Copy to Clipboard

7.5.2. 使用工作流容器中的环境变量进行 Flyway 配置

您可以使用以下示例在 SonataFlow CR 的 spec.podTemplate.container 字段中添加环境变量来启用 Flyway :

使用工作流容器环境变量启用 Flyway 的示例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
  name: example-workflow
  annotations:
    sonataflow.org/description: Example Workflow
    sonataflow.org/version: 0.0.1
spec:
  podTemplate:
    container:
      env:
        - name: KIE_FLYWAY_ENABLED
          value: 'true'
  flow: ...
Copy to Clipboard

7.5.3. 使用 SonataFlowPlatform 属性进行 Flyway 配置

要将通用 Flyway 配置应用到命名空间中的所有工作流,您可以将属性添加到 SonataFlowPlatform CR 的 spec.properties.flow 字段中,如下例所示:

注意

此配置在工作流部署期间应用。在部署工作流前,请确保设置了 Flyway 属性。

使用 SonataFlowPlatform 属性启用 Flyway 的示例

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform
spec:
  properties:
    flow:
      - name: kie.flyway.enabled
        value: true
Copy to Clipboard

7.5.4. 使用 DDL 脚本初始化手动数据库

如果您希望手动初始化,则必须通过确保 kie.flyway.enabled 属性没有配置或明确设置为 false 来禁用 Flyway。

  • 默认情况下,每个工作流都使用与工作流名称相等的 schema 名称。确保为每个工作流手动应用模式初始化。
  • 如果您使用 SonataFlow 自定义资源(CR)持久性配置,您可以指定自定义模式名称。

流程

  1. kogito-ddl-9.103.0.redhat-00003-db-scripts.zip 位置下载 DDL 脚本。
  2. 提取文件。
  3. 运行位于目标 PostgreSQL 数据库的根目录中的 .sql 文件。确保文件按照版本号的顺序执行。

    例如:

    • V1.35.0__create_runtime_PostgreSQL.sql
    • V10.0.0__add_business_key_PostgreSQL.sql
    • V10.0.1__alter_correlation_PostgreSQL.sql

      注意

      文件版本号不与 OpenShift Serverless Logic Operator 版本关联。

第 8 章 工作流事件系统

您可以为 SonataFlow 工作流设置事件系统。

在 OpenShift Serverless Logic 安装中,会生成以下类型的事件:

  • 与工作流业务逻辑相关的传出和传入事件。
  • 从工作流发送到 Data Index 和 Job Service 的事件。
  • 从作业服务发送到数据索引服务的事件。

OpenShift Serverless Logic Operator 利用 Knative Eventing 系统来管理这些服务之间的所有事件通信,确保事件处理高效且可靠的事件处理。

8.1. 平台范围内的事件系统配置

要配置平台范围内的事件系统,您可以使用 SonataFlowPlatform 自定义资源(CR)中的 spec.eventing.broker.ref 字段来引用 Knative Eventing 代理。

此配置指示 OpenShift Serverless Logic Operator 使用 previewgitops 配置集自动链接指定命名空间中部署的每个工作流,以通过定义的代理生成和使用事件。

在命名空间中部署的支持服务,没有自定义事件配置也链接到此代理。

注意

在生产环境中,使用生产环境就绪的代理(如 Knative Kafka Broker)来提高可扩展性和可靠性。

以下示例演示了如何为平台范围事件系统配置 SonataFlowPlatform CR:

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
  namespace: <example-namespace>
spec:
  eventing:
    broker:
      ref:
        name: example-broker 
1

        namespace: <example-broker-namespace> 
2

        apiVersion: eventing.knative.dev/v1
        kind: Broker
Copy to Clipboard
1
指定 Knative Eventing Broker 名称。
2
可选:指定 Knative Eventing Broker 的命名空间。如果没有限制值,则参数默认为 SonataFlowPlatform CR 的命名空间。考虑在与 SonataFlowPlatform 相同的命名空间中创建代理。

8.2. 工作流范围的事件系统配置

工作流范围的事件系统配置允许详细自定义特定工作流生成和消耗的事件。您可以使用 SonataFlow CR 中的 spec.sink.refspec.sources[] 字段来配置传出和传入的事件。

8.2.1. 传出事件系统配置

要配置传出事件,您可以使用 SonataFlow CR 中的 spec.sink.ref 字段。此配置可确保工作流使用指定的 Knative Eventing Broker 生成事件,包括系统事件和工作流业务事件。

以下示例演示了如何为工作流范围的传出事件系统配置 SonataFlow CR:

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
  name: example-workflow
  namespace: example-workflow-namespace
  annotations:
    sonataflow.org/description: Example Workflow
    sonataflow.org/version: 0.0.1
    sonataflow.org/profile: preview
spec:
  sink:
    ref:
      name: outgoing-example-broker 
1

      namespace: outgoing-example-broker-namespace 
2

      apiVersion: eventing.knative.dev/v1
      kind: Broker
  flow: 
3

    start: ExampleStartState
    events: 
4

      - name: outEvent1 
5

        source: ''
        kind: produced
        type: out-event-type1 
6

    ...
Copy to Clipboard
1
用于工作流生成的所有事件的 Knative Eventing Broker 名称,包括 SonataFlow 系统事件。
2
定义 Knative Eventing Broker 的命名空间。如果没有指定值,则参数默认为 SonataFlow 命名空间。考虑在与 SonataFlow 相同的命名空间中创建代理。
3
SonataFlow CR 中的流定义字段。
4
SonataFlow CR 中的事件定义字段。
5
传出事件 outEvent1 定义示例。
6
outEvent1 传出事件的事件类型。

8.2.2. 传入事件系统配置

要配置传入的事件,您可以使用 SonataFlow CR 中的 spec.sources[] 字段。您可以为需要特定配置的每个事件类型添加一个条目。此设置允许工作流根据事件类型使用来自不同代理的事件。

如果传入的事件类型缺少特定的代理配置,系统会应用事件系统配置优先级规则。

以下示例演示了如何为工作流范围的传入事件系统配置 SonataFlow CR:

注意

spec.sources[] 条目和工作流事件之间的链接正在使用事件类型。

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
  name: example-workflow
  namespace: example-workflow-namespace
  annotations:
    sonataflow.org/description: Example Workflow
    sonataflow.org/version: 0.0.1
    sonataflow.org/profile: preview
spec:
  sources:
    - eventType: in-event-type1 
1

      ref:
        name: incoming-example-broker1 
2

        namespace: incoming-example-broker1-namespace 
3

        apiVersion: eventing.knative.dev/v1
        kind: Broker
    - eventType: in-event-type2 
4

      ref:
        name: incoming-example-broker2 
5

        namespace: incoming-example-broker2-namespace 
6

        apiVersion: eventing.knative.dev/v1
        kind: Broker
  flow: 
7

    start: ExampleStartState
    events: 
8

      - name: inEvent1 
9

        source: ''
        kind: consumed
        type: in-event-type1 
10

      - name: inEvent2 
11

        source: ''
        kind: consumed
        type: in-event-type2 
12

    ...
Copy to Clipboard
1
使用指定的 Knative Eventing Broker 将工作流配置为消耗 in-event-type1 类型的事件。
2
发送到此工作流的 Knative Eventing Broker 事件 所使用的 Knative Eventing Broker 名称。
3
可选:如果没有指定值,则参数默认为 SonataFlow 命名空间。考虑在与 SonataFlow 工作流相同的命名空间中创建代理。
4
使用指定的 Knative Eventing Broker 将工作流配置为消耗 in-event-type2 类型的事件。
5
发送到此工作流的 Knative Eventing Broker 事件 所使用的 Knative Eventing Broker 名称。
6
可选:如果没有指定值,则参数默认为 SonataFlow 命名空间。考虑在与 SonataFlow 工作流相同的命名空间中创建代理。
7
SonataFlow CR 中的流定义字段。
8
SonataFlow CR 中的事件定义字段。
9
传入事件 inEvent1 定义示例。
10
Event1 中传入事件的事件类型。工作流事件的链接与对应的 spec.sources[] 条目的链接通过使用事件类型名称 in-event-type1
11
传入事件 inEvent2 定义示例。
12
传入事件的事件类型 inEvent2。工作流事件的链接使用对应的 spec.sources[] 条目创建,使用事件类型名称 in-event-type2 创建。

8.3. 集群范围的事件系统配置

SonataFlowClusterPlatform 设置中,工作流会自动链接到关联的 SonataFlowPlatform CR 中指定的 Broker。这个链接内容遵循 Eventing 系统配置优先级规则。

为确保正确集成,您可以在 SonataFlowClusterPlatform CR 引用的 SonataFlowPlatform CR 中配置 Broker

以下示例演示了如何配置 SonataFlowClusterPlatform CR 及其对 SonataFlowPlatform CR 的引用:

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: global-platform
  namespace: global-namespace
spec:
  eventing:
    broker:
      ref:
        name: global-broker
        namespace: global-namespace
        apiVersion: eventing.knative.dev/v1
        kind: Broker
---
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowClusterPlatform
metadata:
  name: cluster-platform-example
spec:
  platformRef:
    name: global-platform
    namespace: global-namespace
    ...
Copy to Clipboard
注意

SonataFlowClusterPlatform CR 可以引用已部署的任何 SonataFlowPlatform CR。

8.4. Eventing 系统配置优先级规则

OpenShift Serverless Logic Operator 按照定义的优先级顺序来确定工作流的事件系统配置。

Eventing 系统配置优先级规则如下:

  1. 如果工作流具有定义的事件系统,通过使用工作流范围传出或传入事件系统配置,则选择配置优先于其他配置并应用到工作流。
  2. 如果 SonataFlowPlatform CR 隔离工作流配置了平台范围事件系统,则此配置将应用于下一步。
  3. 如果当前集群配置了集群范围的事件系统,则在没有工作流范围或平台范围配置时应用它。
  4. 如果以上配置都没有定义,请查看以下信息:

    • 工作流使用直接 HTTP 调用向支持服务发送 SonataFlow 系统事件。
    • 工作流通过工作流服务根路径 / 上的 HTTP POST 调用来消耗传入的事件。
    • 没有事件系统配置为生成工作流业务事件。任何尝试生成此类事件都可能会导致失败。

8.5. 将工作流链接到事件系统

OpenShift Serverless Logic Operator 使用 Knative Eventing、SinkBinding 和 triggers 将工作流与事件系统相关联。这些对象由 OpenShift Serverless Logic Operator 自动创建,并简化工作流事件的生产和消耗。

以下示例显示了为使用平台范围事件系统配置的 example-workflow 工作流创建的 Knative Eventing 对象:

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
  name: sonataflow-platform-example
  namespace: example-namespace
spec:
  eventing:
    broker:
      ref:
        name: example-broker 
1

        apiVersion: eventing.knative.dev/v1
        kind: Broker
  services:
    dataIndex: 
2

      enabled: true
    jobService: 
3

      enabled: true
  ...
Copy to Clipboard
1
example-broker 对象供 Data Index、Job Service 和 example-workflow 工作流使用。
2
Data Index 部署有临时配置。
3
Jobs 服务使用临时配置部署。

example-broker 对象是一个 Kafka 类代理,其配置在 kafka-broker-config 配置映射中定义。

以下示例演示了如何配置用于 SonataFlowPlatform 的 Kafka Knative Broker:

apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
  annotations:
    eventing.knative.dev/broker.class: Kafka 
1

  name: example-broker
  namespace: example-namespace
spec:
  config:
    apiVersion: v1
    kind: ConfigMap
    name: kafka-broker-config
    namespace: knative-eventing
Copy to Clipboard
1
Kafka 类用于创建 example-broker 对象。

以下示例显示 example-workflow 如何自动链接到 example-namespace 中的用于事件 production 和 consume 的 example-broker

apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
  name: example-workflow
  namespace: example-namespace
  annotations:
    sonataflow.org/description: Example Workflow
    sonataflow.org/version: 0.0.1
    sonataflow.org/profile: preview
spec:
  flow:
    start: ExampleStartState
    events:
      - name: outEvent1
        source: ''
        kind: produced
        type: out-event-type1 
1

      - name: inEvent1
        source: ''
        kind: consumed
        type: in-event-type1 
2

      - name: inEvent2
        source: ''
        kind: consumed
        type: in-event-type2 
3

    states:
      - name: ExampleStartState
    ...
Copy to Clipboard
1
使用名为 example-workflow - sb 的 SinkBinding 生成 example-workflow 传出事件。
2
使用 example-workflow-inevent1-b40c067c-595b-4913-81a4-c8efa980bc11 触发器来消耗 in-event-type1 类型的事件。
3
使用 example-workflow-inevent2-b40c067c-595b-4913-81a4-c8efa980bc11 触发器来消耗 in-event-type2 类型的事件。

您可以使用以下命令列出自动创建的名为 example-workflow-sbSinkBinding

$ oc get sinkbindings -n example-namespace
Copy to Clipboard

输出示例

NAME                   TYPE          RESOURCE                           SINK                    READY
example-workflow-sb    SinkBinding   sinkbindings.sources.knative.dev   broker:example-broker   True
Copy to Clipboard

您可以使用以下命令列出为事件消耗自动创建的触发器:

$ oc get triggers -n <example-namespace>
Copy to Clipboard

输出示例

NAME                                                              BROKER           SINK                                                     AGE   CONDITIONS   READY   REASON
example-workflow-inevent1-b40c067c-595b-4913-81a4-c8efa980bc11    example-broker   service:example-workflow                                 16m   7 OK / 7     True
example-workflow-inevent2-b40c067c-595b-4913-81a4-c8efa980bc11    example-broker   service:example-workflow                                 16m   7 OK / 7     True
Copy to Clipboard

第 9 章 管理升级

9.1. 将 OpenShift Serverless Logic Operator 从 1.34.0 升级到 1.35.0

本节提供了将 OpenShift Serverless Logic Operator 从版本 1.34.0 升级到 1.35.0 的逐步说明。升级过程涉及准备现有的工作流和服务,更新 Operator,并在升级后恢复工作流。

注意

不同的工作流配置集需要不同的升级步骤。请仔细遵循每个配置集的说明。

9.1.1. 准备升级

在开始升级过程前,您需要准备 OpenShift Serverless Logic 环境。本节概述了确保从 1.34.0 升级到 1.35.0 所需的步骤。

准备过程包括:

  • 根据配置集删除或扩展工作流。
  • 备份所有必要的数据库和资源。
  • 确保您有所有自定义配置的记录。
  • 使用持久性为工作流运行所需的数据库迁移脚本。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您可以访问 OpenShift Management Console 进行 Operator 升级。
  • 已安装 OpenShift CLI(oc)。
9.1.1.1. 使用 dev 配置集删除工作流

在升级 Operator 之前,您必须删除使用 dev 配置集运行的工作流,并在升级完成后重新部署它们。

流程

  1. 确保备份所有必要 Kubernetes 资源,包括 SonataFlow 自定义资源定义(CRD)、ConfigMap 或任何其他相关的自定义配置。
  2. 运行以下命令来删除工作流:

    $ oc delete -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard
9.1.1.2. 使用 preview 配置集删除和迁移工作流

在升级 Operator 前,您必须删除使用 Preview 配置集运行的工作流,并迁移保留的任何数据。升级完成后,您必须重新部署工作流。

流程

  1. 如果您使用持久性,备份工作流数据库并确保备份包含数据库对象和表数据。
  2. 确保备份所有必要 Kubernetes 资源,包括 SonataFlow CRD、ConfigMap 或任何其他相关的自定义配置。
  3. 运行以下命令来删除工作流:

    $ oc delete -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard
  4. 如果使用持久性,您必须执行以下数据库迁移脚本:

    ALTER TABLE flyway_schema_history
        RENAME CONSTRAINT flyway_schema_history_pk TO kie_flyway_history_runtime_persistence_pk;
    
    ALTER INDEX flyway_schema_history_s_idx
      RENAME TO kie_flyway_history_runtime_persistence_s_idx;
    
    ALTER TABLE flyway_schema_history RENAME TO kie_flyway_history_runtime_persistence;
    Copy to Clipboard
9.1.1.3. 使用 gitops 配置集缩减工作流

在升级 Operator 前,您必须使用 gitops 配置集缩减运行的工作流,并在升级完成后再次扩展它们。

流程

  1. 修改 my-workflow.yaml CRD,并在升级前将每个工作流 缩减为零,如下例所示:

    spec:
      podTemplate:
        replicas: 0
    Copy to Clipboard
  2. 运行以下命令来应用更新的 CRD:

    $ oc apply -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard
  3. (可选)运行以下命令来将工作流扩展到 0

    $ oc patch sonataflow <my-workflow> -n <target_namespace> --type=merge -p '{"spec": {"podTemplate": {"replicas": 0}}}'
    Copy to Clipboard
9.1.1.4. 备份数据索引数据库

您必须在升级前备份 Data Index 数据库,以防止数据丢失。

流程

  • 对 Data Index 数据库进行完整备份,确保:

    • 备份包括所有数据库对象,而不仅仅是表数据。
    • 备份存储在安全位置。
9.1.1.5. 备份作业服务数据库

在升级前备份 Jobs Service 数据库,以维护作业调度数据。

流程

  • 对 Jobs Service 数据库进行完整备份,确保:

    • 备份包括所有数据库对象,而不仅仅是表数据。
    • 备份存储在安全位置。

9.1.2. 升级 OpenShift Serverless Logic Operator

要从 OpenShift Serverless Logic Operator (OSL)版本 1.34.0 过渡到 1.35.0,您必须使用 Red Hat OpenShift Serverless Web 控制台升级 OSL。此升级确保了与较新的功能兼容,并可以正常工作。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您可以访问 OpenShift Management Console 进行 Operator 升级。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 在 Web 控制台中,导航到 OperatorsOperatorHubInstalled Operator 页面。
  2. Installed Namespace 中选择 openshift-serverless-logic 命名空间。
  3. 在安装的 Operator 列表中,找到并点击 OpenShift Serverless Logic Operator。
  4. 在 Operator 详情页面中,点 Subscription 选项卡。点 Edit Subscription
  5. Upgrade status 中,单击 Upgrade available 链接。
  6. 单击 Preview 安装计划和 Approve 以开始更新。
  7. 要监控升级过程,请运行以下命令:

    $ oc get subscription logic-operator-rhel8 -n openshift-serverless-logic -o jsonpath='{.status.installedCSV}'
    Copy to Clipboard

    预期输出

    $ logic-operator-rhel8.v1.35.0
    Copy to Clipboard

验证

  1. 要验证是否安装了新的 Operator 版本,请运行以下命令:

    $ oc get clusterserviceversion logic-operator-rhel8.v1.35.0 -n openshift-serverless-logic
    Copy to Clipboard

    预期输出

    NAME                           DISPLAY                               VERSION   REPLACES                       PHASE
    logic-operator-rhel8.v1.35.0   OpenShift Serverless Logic Operator   1.35.0    logic-operator-rhel8.v1.34.0   Succeeded
    Copy to Clipboard

9.1.3. 最终调整升级

将 OpenShift Serverless Logic Operator 升级到 1.35.0 后,您必须恢复或扩展工作流并清理旧服务来完成升级过程。这样可确保您的系统在新版本中完全运行,且所有依赖的组件都已正确配置。

根据您的工作流和服务的配置集,请按照以下步骤操作。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您可以访问 OpenShift Management Console 进行 Operator 升级。
  • 已安装 OpenShift CLI(oc)。
9.1.3.1. 最终调整数据索引升级

Operator 升级后,会自动为 Data Index 1.35.0 创建新的 ReplicaSet。您必须手动删除旧的旧内容。

流程

  1. 运行以下命令列出所有 ReplicaSet 来验证新的 ReplicaSet 是否存在:

    $ oc get replicasets -n <target_namespace> -o custom-columns=Name:metadata.name,Image:spec.template.spec.containers[*].image
    Copy to Clipboard
  2. 识别旧的 Data Index ReplicaSet (使用版本 1.34.0)并删除它:

    $ oc delete replicaset <old_replicaset_name> -n <target_namespace>
    Copy to Clipboard
9.1.3.2. 最终调整作业服务升级

您必须手动清理旧版本中的 Jobs Service 组件,才能触发版本 1.35.0 组件的部署。

流程

  1. 运行以下命令来删除旧的 Jobs Service 部署:

    $ oc delete deployment <jobs-service-deployment-name> -n <target_namespace>
    Copy to Clipboard

    这将触发旧的 Pod 和 ReplicaSet 自动清理,并使用版本 1.35.0 启动新部署。

9.1.3.3. 使用 dev 配置集重新部署工作流

升级后,您必须重新部署使用 dev 配置集和任何关联的 Kubernetes 资源的工作流。

流程

  1. 确保恢复所有必需的资源,包括 SonataFlow CRD、ConfigMap 或任何其他相关的自定义配置。
  2. 运行以下命令来重新部署工作流:

    $ oc apply -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard
9.1.3.4. 使用 preview 配置集恢复工作流

带有 preview 配置集的工作流需要额外的配置步骤,然后才能重新部署。

流程

  1. 如果工作流使用持久性,请将以下属性添加到与工作流关联的 ConfigMap 中:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      labels:
        app: my-workflow
      name: my-workflow-props
    data:
      application.properties: |
        kie.flyway.enabled=true
    Copy to Clipboard
  2. 确保重新创建所有必需的资源,包括 SonataFlow CRD、ConfigMap 或任何其他相关的自定义配置。
  3. 运行以下命令来重新部署工作流:

    $ oc apply -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard
9.1.3.5. 使用 gitops 配置集扩展工作流

带有之前扩展的 gitops 配置集的工作流必须扩展才能继续操作。

流程

  1. 修改 my-workflow.yaml CRD,并在升级前将每个工作流扩展到 一个,如下例所示:

    spec:
      podTemplate:
        replicas: 1
    Copy to Clipboard
  2. 运行以下命令来应用更新的 CRD:

    $ oc apply -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard
  3. (可选)运行以下命令来将工作流扩展至 1

    $ oc patch sonataflow <my-workflow> -n <target_namespace> --type=merge -p '{"spec": {"podTemplate": {"replicas": 1}}}'
    Copy to Clipboard
9.1.3.6. 验证升级

恢复工作流和服务后,务必要验证升级是否成功,并且所有组件都按预期工作。

流程

  1. 输入以下命令检查所有工作流和服务是否正在运行:

    $ oc get pods -n <target_namespace>
    Copy to Clipboard

    确保与工作流、数据索引和作业服务相关的所有 pod 都处于 RunningCompleted 状态。

  2. 输入以下命令验证 OpenShift Serverless Logic Operator 是否正确运行:

    $ oc get clusterserviceversion logic-operator-rhel8.v1.35.0 -n openshift-serverless-logic
    Copy to Clipboard

    预期输出

    NAME                           DISPLAY                               VERSION   REPLACES                       PHASE
    logic-operator-rhel8.v1.35.0   OpenShift Serverless Logic Operator   1.35.0    logic-operator-rhel8.v1.34.0   Succeeded
    Copy to Clipboard

  3. 输入以下命令检查 Operator 日志是否有任何错误:

    $ oc logs -l control-plane=sonataflow-operator -n openshift-serverless-logic
    Copy to Clipboard

9.2. 将 OpenShift Serverless Logic Operator 从 1.35.0 升级到 1.36.0

您可以将 OpenShift Serverless Logic Operator 从 1.35.0 升级到 1.36.0。升级过程涉及准备现有的工作流和服务,更新 Operator,并在升级后恢复工作流。

注意

不同的工作流配置集需要不同的升级步骤。请仔细遵循每个配置集的说明。

9.2.1. 准备升级

在开始升级过程前,您需要准备 OpenShift Serverless Logic 环境,以便从 1.35.0 升级到 1.36.0。

准备过程如下:

  • 根据配置集删除或扩展工作流。
  • 备份所有必要的数据库和资源。
  • 确保您有所有自定义配置的记录。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您可以访问 OpenShift Management Console 进行 Operator 升级。
  • 已安装 OpenShift CLI(oc)。
9.2.1.1. 使用 dev 配置集删除工作流

在升级 Operator 前,您必须删除使用 dev 配置集运行的工作流,并在升级完成后重新部署它们。

流程

  1. 确保备份所有必要 Kubernetes 资源,包括 SonataFlow 自定义资源(CR)、ConfigMap 资源或任何其他相关的自定义配置。
  2. 运行以下命令来删除工作流:

    $ oc delete workflow <workflow_name> -n <target_namespace>
    Copy to Clipboard
9.2.1.2. 使用 preview 配置集删除工作流

在升级 Operator 前,您必须删除使用 preview 配置集运行的工作流。升级完成后,您必须重新部署工作流。

流程

  1. 如果您使用持久性,备份工作流数据库并确保备份包含数据库对象和表数据。
  2. 确保备份所有必要 Kubernetes 资源,包括 SonataFlow 自定义资源(CR)、ConfigMap 资源或任何其他相关的自定义配置。
  3. 运行以下命令来删除工作流:

    $ oc delete workflow <workflow_name> -n <target_namespace>
    Copy to Clipboard
9.2.1.3. 使用 gitops 配置集缩减工作流

在升级 Operator 前,您必须使用 gitops 配置集缩减运行的工作流,并在升级完成后再次扩展它们。

流程

  1. 修改 my-workflow.yaml 自定义资源(CR),并在升级前将每个工作流缩减为 0, 如下例所示:

    spec:
      podTemplate:
        replicas: 0
      # ...
    Copy to Clipboard
  2. 运行以下命令来应用更新的 my-workflow.yaml CR:

    $ oc apply -f my-workflow.yaml -n <target_namespace>
    Copy to Clipboard
  3. 可选:运行以下命令来将工作流扩展到 0

    $ oc patch workflow <workflow_name> -n <target_namespace> --type=merge -p '{"spec": {"podTemplate": {"replicas": 0}}}'
    Copy to Clipboard
9.2.1.4. 备份数据索引数据库

您必须在升级前备份 Data Index 数据库,以防止数据丢失。

流程

  • 对 Data Index 数据库进行完整备份,确保:

    • 备份包括所有数据库对象,而不仅仅是表数据。
    • 备份存储在安全位置。
9.2.1.5. 备份作业服务数据库

在升级前备份 Jobs Service 数据库,以维护作业调度数据。

流程

  • 对 Jobs Service 数据库进行完整备份,确保:

    • 备份包括所有数据库对象,而不仅仅是表数据。
    • 备份存储在安全位置。

9.2.2. 将 OpenShift Serverless Logic Operator 升级到 1.36.0

要从 OpenShift Serverless Logic Operator (OSL)版本 1.35.0 转换到 1.36.0,您必须使用 Red Hat OpenShift Serverless Web 控制台升级 OSL。此升级确保了与较新的功能兼容,并可以正常工作。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您可以访问 OpenShift Management Console 进行 Operator 升级。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 在 Web 控制台中,导航到 OperatorsOperatorHubInstalled Operators 页面。
  2. Installed Namespace 下拉列表中选择 openshift-serverless-logic 命名空间。
  3. 在安装的 Operator 列表中,找到并点击名为 OpenShift Serverless Logic Operator 的 Operator。
  4. 在 Operator 详情页面中,点 Subscription 选项卡。点 Edit Subscription
  5. Upgrade status 选项卡中,点 Upgrade available 链接。
  6. Preview install plan 按钮和 Approve 开始更新。
  7. 要监控升级过程,请运行以下命令:

    $ oc get subscription logic-operator-rhel8 -n openshift-serverless-logic -o jsonpath='{.status.installedCSV}'
    Copy to Clipboard

    输出示例

    logic-operator-rhel8.v1.36.0
    Copy to Clipboard

验证

  • 要验证是否安装了新的 Operator 版本,请运行以下命令:

    $ oc get clusterserviceversion logic-operator-rhel8.v1.36.0 -n openshift-serverless-logic
    Copy to Clipboard

    输出示例

    NAME                           DISPLAY                               VERSION   REPLACES                       PHASE
    logic-operator-rhel8.v1.36.0   OpenShift Serverless Logic Operator   1.36.0    logic-operator-rhel8.v1.35.0   Succeeded
    Copy to Clipboard

9.2.3. 最终调整升级

将 OpenShift Serverless Logic Operator 升级到 1.36.0 后,您必须恢复或扩展工作流并清理旧服务来完成升级过程。这样可确保您的系统在新版本中完全运行,且所有依赖的组件都已正确配置。

根据您的工作流和服务的配置集,请按照以下步骤操作。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 已在集群中安装了 OpenShift Serverless Logic Operator。
  • 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
  • 您可以访问 OpenShift Management Console 进行 Operator 升级。
  • 已安装 OpenShift CLI(oc)。
9.2.3.1. 最终调整数据索引升级

在 Operator 升级后,如果您的部署被配置为使用 Knative Eventing Kafka Broker,您必须删除在 OpenShift Serverless Logic 1.35.0 版本中创建的旧 data-index-process-definition 触发器。另外,您还可以删除旧的 ReplicaSet 资源。

流程

  1. 运行以下命令列出所有触发器:

    $ oc get triggers -n <target_namespace>
    Copy to Clipboard

    输出示例

    NAME                                                              BROKER              SUBSCRIBER_URI
    data-index-jobs-a25c8405-f740-47d2-a9a5-f80ccaec2955              example-broker      http://sonataflow-platform-data-index-service.<target_namespace>.svc.cluster.local/jobs
    data-index-process-definition-473e1ddbb3ca1d62768187eb80de99bca   example-broker      http://sonataflow-platform-data-index-service.<target_namespace>.svc.cluster.local/definitions
    data-index-process-error-a25c8405-f740-47d2-a9a5-f80ccaec2955     example-broker      http://sonataflow-platform-data-index-service.<target_namespace>.svc.cluster.local/processes
    data-index-process-instance-mul07f593476e8c14353a337590e0bfd5ae   example-broker      http://sonataflow-platform-data-index-service.<target_namespace>.svc.cluster.local/processes
    data-index-process-node-a25c8405-f740-47d2-a9a5-f80ccaec2955      example-broker      http://sonataflow-platform-data-index-service.<target_namespace>.svc.cluster.local/processes
    data-index-process-state-a25c8405-f740-47d2-a9a5-f80ccaec2955     example-broker      http://sonataflow-platform-data-index-service.<target_namespace>.svc.cluster.local/processes
    data-index-process-variable-487e9a6777fff650e60097c9e17111aea25   example-broker      http://sonataflow-platform-data-index-service.<target_namespace>.svc.cluster.local/processes
    
    jobs-service-create-job-a25c8405-f740-47d2-a9a5-f80ccaec2955      example-broker      http://sonataflow-platform-jobs-service.<target_namespace>.svc.cluster.local/v2/jobs/events
    jobs-service-delete-job-a25c8405-f740-47d2-a9a5-f80ccaec2955      example-broker      http://sonataflow-platform-jobs-service.<target_namespace>.svc.cluster.local/v2/jobs/events
    Copy to Clipboard

  2. 根据生成的示例输出,运行以下命令来删除旧的 data-index-process-definition 触发器:

    $ oc delete trigger data-index-process-definition-473e1ddbb3ca1d62768187eb80de99bca -n <target_namespace>
    Copy to Clipboard

    删除后,会自动创建与 OpenShift Serverless Logic 1.36.0 兼容的新触发器。

  3. 可选:运行以下命令来识别旧的 ReplicaSet 资源:

    $ oc get replicasets -o custom-columns=Name:metadata.name,Image:spec.template.spec.containers[*].image -n <target_namespace>
    Copy to Clipboard

    输出示例

    Name                                                Image
    sonataflow-platform-data-index-service-1111111111   registry.redhat.io/openshift-serverless-1/logic-data-index-postgresql-rhel8:1.35.0
    
    sonataflow-platform-data-index-service-2222222222   registry.redhat.io/openshift-serverless-1/logic-data-index-postgresql-rhel8:1.36.0
    Copy to Clipboard

  4. 可选:运行以下命令来删除旧的 ReplicaSet 资源:

    $ oc delete replicaset <old_replicaset_name> -n <target_namespace>
    Copy to Clipboard

    基于示例输出的命令示例

    $ oc delete replicaset sonataflow-platform-data-index-service-1111111111 -n <target_namespace>
    Copy to Clipboard

9.2.3.2. 最终调整作业服务升级

在 OpenShift Serverless Operator 升级到 1.36.0 后,您可以选择删除旧的 ReplicaSet 资源。

流程

  1. 运行以下命令来识别旧的 ReplicaSet 资源:

    $ oc get replicasets -o custom-columns=Name:metadata.name,Image:spec.template.spec.containers[*].image -n <target_namespace>
    Copy to Clipboard

    输出示例

    Name                                                Image
    sonataflow-platform-jobs-service-1111111111         registry.redhat.io/openshift-serverless-1/logic-jobs-service-postgresql-rhel8:1.35.0
    sonataflow-platform-jobs-service-2222222222         registry.redhat.io/openshift-serverless-1/logic-jobs-service-postgresql-rhel8:1.36.0
    Copy to Clipboard

  2. 运行以下命令来删除旧的 ReplicaSet 资源:

    $ oc delete replicaset <old_replicaset_name> -n <target_namespace>
    Copy to Clipboard

    基于示例输出的命令示例

    $ oc delete replicaset sonataflow-platform-jobs-service-1111111111 -n <target_namespace>
    Copy to Clipboard

9.2.3.3. 使用 dev 配置集重新部署工作流

升级后,您必须重新部署使用 dev 配置集和任何关联的 Kubernetes 资源的工作流。

流程

  1. 在重新部署工作流前,请确保恢复所有所需的 Kubernetes 资源,包括带有 application.properties 字段的 ConfigMap
  2. 运行以下命令来重新部署工作流:

    $ oc apply -f <workflow_name> -n <target_namespace>
    Copy to Clipboard
9.2.3.4. 使用 preview 配置集恢复工作流

升级后,您必须重新部署使用 preview 配置集以及任何关联的 Kubernetes 资源的工作流。

流程

  1. 在重新部署工作流前,请确保恢复所有所需的 Kubernetes 资源,包括带有 application.properties 字段的 ConfigMap
  2. 运行以下命令来重新部署工作流:

    $ oc apply -f <workflow_name> -n <target_namespace>
    Copy to Clipboard
9.2.3.5. 使用 gitops 配置集扩展工作流

要继续操作,您必须扩展之前使用 gitops 配置集缩减的工作流。

流程

  1. 修改 my-workflow.yaml 自定义资源(CR),并将每个工作流扩展到 1,如下例所示:

    spec:
      podTemplate:
        replicas: 1
      # ...
    Copy to Clipboard
  2. 运行以下命令来应用更新的 CR:

    $ oc apply -f my-workflow.yaml -n <target_namespace>
    Copy to Clipboard
  3. 可选:运行以下命令来将工作流扩展至 1

    $ oc patch workflow <workflow_name> -n <target_namespace> --type=merge -p '{"spec": {"podTemplate": {"replicas": 1}}}'
    Copy to Clipboard

9.2.4. 验证 1.36.0 升级

恢复工作流和服务后,验证升级是否成功,且所有组件都可以正常工作。

流程

  1. 输入以下命令检查所有工作流和服务是否正在运行:

    $ oc get pods -n <target_namespace>
    Copy to Clipboard

    确保与工作流、数据索引和作业服务相关的所有 pod 都处于 RunningCompleted 状态。

  2. 输入以下命令验证 OpenShift Serverless Logic Operator 是否正确运行:

    $ oc get clusterserviceversion logic-operator-rhel8.v1.36.0 -n openshift-serverless-logic
    Copy to Clipboard

    输出示例

    NAME                           DISPLAY                               VERSION   REPLACES                       PHASE
    logic-operator-rhel8.v1.36.0   OpenShift Serverless Logic Operator   1.36.0    logic-operator-rhel8.v1.35.0   Succeeded
    Copy to Clipboard

  3. 输入以下命令检查 Operator 日志是否有任何错误:

    $ oc logs -l control-plane=sonataflow-operator -n openshift-serverless-logic
    Copy to Clipboard

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat