×

在开发模式下部署工作流

你可以在开发模式下在 OpenShift Container Platform 上部署本地工作流。你可以使用此部署直接在集群上试验和修改你的工作流,几乎立即看到更改。开发模式专为开发和测试目的而设计。它非常适合初始开发阶段和测试新更改。

先决条件
  • 你的集群上已安装 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
    1 是一个工作流名称
    2 指示你必须在开发模式下部署工作流
  2. 要部署应用程序,请通过输入以下命令应用 YAML 文件

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

    $ oc get workflow -n <your_namespace> -w

    确保你的工作流已列出且状态为 运行中已完成

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

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

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

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

      $ oc get sonataflows -n <your_namespace>
    2. 通过运行以下命令查看工作流日志

      $ oc logs <workflow_pod_name> -n <your_namespace>
后续步骤
  1. 测试完成后,通过运行以下命令删除资源以避免不必要的资源使用

    $ oc delete sonataflow <workflow_name> -n <your_namespace>

在预览模式下部署工作流

你可以在预览模式下在 OpenShift Container Platform 上部署本地工作流。这允许你直接在集群上试验和修改你的工作流,几乎立即看到更改。预览模式用于在部署到生产环境之前进行最终测试和验证。它还确保工作流将在类似生产的环境中顺利运行。

先决条件
  • 你的集群上已安装 OpenShift Serverless Logic Operator。

  • 你可以访问具有适当角色和权限的 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。

  • 你已安装 OpenShift CLI (oc)

要在预览模式下部署工作流,OpenShift Serverless Logic Operator 会使用 OpenShift Container Platform 上的构建系统,该系统会自动创建用于部署工作流的镜像。

以下部分说明如何使用带有 SonataFlow 自定义资源的 OpenShift Serverless Logic Operator 在集群上构建和部署你的工作流。

在预览模式下配置工作流

配置工作流基础构建镜像

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

默认情况下,OpenShift Serverless Logic Operator 使用在官方 Red Hat 镜像仓库中分发的镜像来构建工作流。如果您的场景需要对镜像使用实施严格的策略,例如安全或加固约束,您可以替换默认镜像。

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

先决条件
  • 你的集群上已安装 OpenShift Serverless Logic Operator。

  • 你可以访问具有适当角色和权限的 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。

  • 你已安装 OpenShift CLI (oc)

步骤
  1. 通过运行以下命令列出您命名空间中的SonataFlowPlatform资源

    $ oc get sonataflowplatform -n <your_namespace> (1)
    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>
验证
  1. 通过运行以下命令验证SonataFlowPlatform CR 是否已正确修补

    $ oc describe sonataflowplatform <name> -n <your_namespace> (1)
    1 <name>替换为您的SonataFlowPlatform资源名称,并将<your_namespace>替换为您的命名空间名称。

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

基础构建 Dockerfile 的定制

OpenShift Serverless Logic Operator 在其openshift-serverless-logic OpenShift 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

更改资源需求

您可以通过在工作流命名空间中创建或编辑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"

每个命名空间只允许一个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"

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

向内部构建器传递参数

您可以通过向SonataFlowBuild实例传递构建参数或在SonataFlowPlatform资源中设置默认构建参数来定制构建过程。

先决条件
  • 你的集群上已安装 OpenShift Serverless Logic Operator。

  • 你可以访问具有适当角色和权限的 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。

  • 你已安装 OpenShift CLI (oc)

步骤
  1. 通过运行以下命令检查现有的SonataFlowBuild实例

    $ oc get sonataflowbuild <name> -n <namespace> (1)
    1 <name>替换为您的SonataFlowBuild实例名称,并将<namespace>替换为您的命名空间。
  2. 通过运行以下命令向SonataFlowBuild实例添加构建参数

    $ oc edit sonataflowbuild <name> -n <namespace>
  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>
    1 现有SonataFlowBuild实例的名称。
  4. 保存文件并退出。

    将开始使用更新的配置进行新的构建。

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

    $ oc edit sonataflowplatform <name> -n <namespace>
  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>
    1 现有SonataFlowPlatform资源的名称。
  7. 保存文件并退出。

在内部构建器中设置环境变量

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

先决条件
  • 你的集群上已安装 OpenShift Serverless Logic Operator。

  • 你可以访问具有适当角色和权限的 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。

  • 你已安装 OpenShift CLI (oc)

步骤
  1. 通过运行以下命令检查现有的SonataFlowBuild实例

    $ oc get sonataflowbuild <name> -n <namespace>

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

  2. 通过运行以下命令编辑SonataFlowBuild实例

    $ oc edit sonataflowbuild <name> -n <namespace>
    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>
  3. 保存文件并退出。

    将开始使用更新的配置进行新的构建。

    或者,您可以在SonataFlowPlatform中设置环境变量,以便每个新的构建实例都将其用作模板。

    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>

更改基础构建镜像

您可以通过编辑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
  2. 修改 dockerfile 条目。

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

    示例
    data:
      Dockerfile: |
        FROM registry.redhat.io/openshift-serverless-1/logic-swf-builder-rhel8:1.33.0
        # Change the image to the desired one
  3. 保存更改。

构建和部署您的工作流

您可以在 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
  2. 通过运行以下命令将SonataFlow工作流定义应用到您的 OpenShift Container Platform 命名空间

    $ oc apply -f <workflow-name>.yaml -n <your_namespace>
    greetings-workflow.yaml文件的示例命令
    $ oc apply -f greetings-workflow.yaml -n workflows
  3. 通过运行以下命令列出所有构建配置

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

    $ oc logs buildconfig/<workflow-name> -n <your_namespace>
    greetings-workflow.yaml文件的示例命令
    $ oc logs buildconfig/greeting -n workflows
验证
  1. 要验证部署,请运行以下命令列出所有 Pod

    $ oc get pods -n <your_namespace>

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

  2. 通过运行以下命令检查正在运行的 Pod 及其日志

    $ oc logs pod/<pod-name> -n workflows

验证工作流部署

您可以通过从工作流 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
  2. 通过运行以下命令为工作流服务创建一个路由

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

    此命令创建一个公共 URL 来访问工作流服务。

  3. 通过运行以下命令设置公共 URL 的环境变量

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

    $ curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{<"your": "json_payload">}' http://$WORKFLOW_SVC/<endpoint>
    示例输出
    {
      "id": "b5fbfaa3-b125-4e6c-9311-fe5a3577efdd",
      "workflowdata": {
        "name": "John",
        "language": "English",
        "greeting": "Hello from JSON Workflow, "
      }
    }

    此输出显示如果工作流正在运行,则预期响应的示例。

重新启动构建

要重新启动构建,您可以在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>
  2. 通过运行以下命令编辑SonataFlowBuild实例

    $ oc edit sonataflowbuild/<name> -n <namespace>

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

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

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

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

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

    $ oc logs buildconfig/<name> -n <namespace>

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

编辑工作流

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

  • 用户属性:在以SonataFlow对象命名并后缀为-propsConfigMap中定义。例如,如果您的工作流名称为greeting,则ConfigMap名称为greeting-props

  • 托管属性:在以SonataFlow对象命名并后缀为-managed-propsConfigMap中定义。例如,如果您的工作流名称为greeting,则ConfigMap名称为greeting-managed-props

托管属性始终会覆盖任何具有相同键名的用户属性,并且用户无法编辑。任何更改都将在下一个协调周期被Operator覆盖。

先决条件
  • 你的集群上已安装 OpenShift Serverless Logic Operator。

  • 你可以访问具有适当角色和权限的 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。

  • 你已安装 OpenShift CLI (oc)

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

    $ oc edit cm <workflow_name>-props -n <namespace>

    <workflow_name>替换为您的工作流名称,并将<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

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

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

测试工作流

要验证您的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>
  2. 运行以下命令获取新公开服务的URL

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

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

工作流故障排除

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 .
  2. 要获取并分析工作流部署的日志,请运行以下命令

    $ oc logs deployment/<workflow_name> -f

删除工作流

您可以使用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>

    <your_file>替换为您的工作流文件名,并将<your_namespace>替换为您的命名空间。