1.2. 部署工作流
您可以以两种模式(Dev)模式和预览模式在集群中部署 Serverless Logic 工作流。
1.2.1. 在 Dev 模式中部署工作流
您可以在 OpenShift Container Platform 中以 Dev 模式部署本地工作流。您可以使用此部署在集群中直接试验和修改工作流,查看几乎立即的更改。Dev 模式专为开发和测试目的而设计。它是初始开发阶段以及测试新更改的理想选择。
先决条件
- 已在集群中安装了 OpenShift Serverless Logic Operator。
- 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI
(oc)
。
流程
创建工作流配置 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
要部署应用程序,请输入以下命令应用 YAML 文件:
$ oc apply -f <filename> -n <your_namespace>
输入以下命令验证部署并检查部署工作流的状态:
$ oc get workflow -n <your_namespace> -w
确定列出了您的工作流,其状态为
Running
或Completed
。输入以下命令直接在集群中编辑工作流:
$ oc edit sonataflow <workflow_name> -n <your_namespace>
- 编辑后,保存更改。OpenShift Serverless Logic Operator 会检测更改并相应地更新工作流。
验证
要确保正确应用更改,请输入以下命令验证工作流的状态和日志:
运行以下命令,查看工作流的状态:
$ oc get sonataflows -n <your_namespace>
运行以下命令来查看工作流日志:
$ oc logs <workflow_pod_name> -n <your_namespace>
后续步骤
完成测试后,运行以下命令来删除资源以避免不必要的用法:
$ oc delete sonataflow <workflow_name> -n <your_namespace>
1.2.2. 以预览模式部署工作流
您可以以 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. 在预览模式中配置工作流
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)
。
流程
运行以下命令,列出命名空间中的
SonataFlowPlatform
资源:$ oc get sonataflowplatform -n <your_namespace> 1
- 1
- 将
<your_namespace
> 替换为命名空间的名称。
运行以下命令,使用新构建器镜像修补
SonataFlowPlatform
资源:$ oc patch sonataflowplatform <name> --patch 'spec:\n build:\n config:\n baseImage: <your_new_image_full_name_with_tag>' -n <your_namespace>
验证
运行以下命令,验证
SonataFlowPlatform
CR 是否已正确修补:$ oc describe sonataflowplatform <name> -n <your_namespace> 1
- 1
- 将
<name
> 替换为SonataFlowPlatform
资源的名称,将 <your_namespace
> 替换为命名空间的名称。
确保
spec.build.config
下的baseImage
字段反映了新镜像。
1.2.2.1.2. 自定义基础构建器 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
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"
每个命名空间只允许一个 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"
这些参数仅适用于新的构建实例。
1.2.2.1.4. 将参数传递给内部构建器
您可以通过将构建参数传递给 SonataFlowBuild
实例,或者在 SonataFlowPlatform
资源中设置默认构建参数来自定义构建流程。
先决条件
- 在集群中安装了 OpenShift Serverless Logic Operator。
- 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI
(oc)
。
流程
运行以下命令,检查现有的
SonataFlowBuild
实例:$ oc get sonataflowbuild <name> -n <namespace> 1
- 1
- 将
<name
> 替换为SonataFlowBuild
实例的名称,将 <namespace&
gt; 替换为您的命名空间。
运行以下命令,在
SonataFlowBuild
实例中添加构建参数:$ oc edit sonataflowbuild <name> -n <namespace>
在
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
实例的名称。
保存文件并退出。
将启动一个带有更新的配置的新构建。
运行以下命令,在
SonataFlowPlatform
资源中设置默认构建参数:$ oc edit sonataflowplatform <name> -n <namespace>
在
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
资源的名称。
- 保存文件并退出。
1.2.2.1.5. 在内部构建器中设置环境变量
您可以将环境变量设置为 SonataFlowBuild
内部构建器 pod。这些变量仅对构建上下文有效,且不会在最终构建的工作流镜像上设置。
先决条件
- 在集群中安装了 OpenShift Serverless Logic Operator。
- 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI
(oc)
。
流程
运行以下命令,检查现有的
SonataFlowBuild
实例:$ oc get sonataflowbuild <name> -n <namespace>
将
<name
> 替换为SonataFlowBuild
实例的名称,将 <namespace&
gt; 替换为您的命名空间。运行以下命令来编辑
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>
保存文件并退出。
一个新的带有更新后的配置会启动。
或者,您可以在
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>
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)
。
流程
运行以下命令来编辑
logic-operator-rhel8-builder-config
配置映射:$ oc edit cm/logic-operator-rhel8-builder-config -n openshift-serverless-logic
修改 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
- 保存更改。
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)
。
流程
创建类似以下示例的工作流 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
运行以下命令,将
SonataFlow
工作流定义应用到 OpenShift Container Platform 命名空间:$ oc apply -f <workflow-name>.yaml -n <your_namespace>
greetings-workflow.yaml
文件的命令示例:$ oc apply -f greetings-workflow.yaml -n workflows
运行以下命令列出所有构建配置:
$ oc get buildconfigs -n workflows
运行以下命令,获取构建过程的日志:
$ oc logs buildconfig/<workflow-name> -n <your_namespace>
greetings-workflow.yaml
文件的命令示例:$ oc logs buildconfig/greeting -n workflows
验证
要验证部署,请运行以下命令列出所有 pod:
$ oc get pods -n <your_namespace>
确保与工作流对应的 pod 正在运行。
运行以下命令,检查正在运行的 pod 及其日志:
$ oc logs pod/<pod-name> -n workflows
1.2.2.3. 验证工作流部署
您可以通过从工作流 pod 执行测试 HTTP 调用来验证 OpenShift Serverless Logic 工作流是否正在运行。
先决条件
- 在集群中安装了 OpenShift Serverless Logic Operator。
- 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI
(oc)
。
流程
创建类似以下示例的工作流
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
运行以下命令,为工作流服务创建路由:
$ oc expose svc/<workflow-service-name> -n workflows
此命令创建用于访问工作流服务的公共 URL。
运行以下命令,为公共 URL 设置环境变量:
$ WORKFLOW_SVC=$(oc get route/<workflow-service-name> -n <namespace> --template='{{.spec.host}}')
运行以下命令,向工作流发出 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, " } }
此输出显示工作流正在运行时的预期响应示例。
1.2.2.4. 重启构建
要重启构建,您可以在 SonataFlowBuild
实例中添加或编辑 sonataflow.org/restartBuild: true
注解。如果您的工作流或初始构建版本存在问题,则需要重启构建。
先决条件
- 在集群中安装了 OpenShift Serverless Logic Operator。
- 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI
(oc)
。
流程
运行以下命令,检查
SonataFlowBuild
实例是否存在:$ oc get sonataflowbuild <name> -n <namespace>
运行以下命令来编辑
SonataFlowBuild
实例:$ oc edit sonataflowbuild/<name> -n <namespace>
将
<name
> 替换为SonataFlowBuild
实例的名称,将<
namespace> 替换为部署了工作流的命名空间。添加
sonataflow.org/restartBuild: true
注解来重新启动构建。apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowBuild metadata: name: <name> annotations: sonataflow.org/restartBuild: true
此操作会触发 OpenShift Serverless Logic Operator 来启动工作流的新构建。
要监控构建过程,请运行以下命令来检查构建日志:
$ oc logs buildconfig/<name> -n <namespace>
将
<name
> 替换为SonataFlowBuild
实例的名称,将<
namespace> 替换为部署了工作流的命名空间。
1.2.3. 编辑工作流
当 OpenShift Serverless Logic Operator 部署工作流服务时,它会创建两个配置映射来存储运行时属性:
-
用户属性:在
ConfigMap
中定义,以带有后缀 的SonataFlow
对象命名。例如,如果您的工作流名称是
greeting
,则ConfigMap
名称为greeting-props
。 -
受管属性:在
ConfigMap
中定义,以带有 suffix-managed-props
的SonataFlow
对象命名。例如,如果您的工作流名称是greeting
,则ConfigMap
名称为greeting-managed-props
。
受管属性始终覆盖具有相同密钥名称的任何 user 属性,用户无法编辑。在下一个协调周期中,Operator 都会覆盖任何更改。
先决条件
- 已在集群中安装了 OpenShift Serverless Logic Operator。
- 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI
(oc)
。
流程
运行以下命令打开并编辑
ConfigMap
:$ oc edit cm <workflow_name>-props -n <namespace>
将
<workflow_name
> 替换为工作流的名称,将<
;namespace> 替换为部署工作流的命名空间。在
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 将配置替换为默认配置。
- 进行必要的更改后,保存文件并退出编辑器。
1.2.4. 测试工作流
要验证 OpenShift Serverless Logic 工作流是否在正确运行,您可以从相关 pod 执行测试 HTTP 调用。
先决条件
- 已在集群中安装了 OpenShift Serverless Logic Operator。
- 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI
(oc)
。
流程
运行以下命令,为命名空间中的指定服务创建路由:
$ oc expose svc <service_name> -n <namespace>
运行以下命令,获取新公开的服务的 URL:
$ WORKFLOW_SVC=$(oc get route/<service_name> --template='{{.spec.host}}')
运行以下命令,执行测试 HTTP 调用并发送
POST
请求:$ curl -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' -d '<request_body>' http://$WORKFLOW_SVC/<endpoint>
- 验证响应,以确保工作流按预期工作。
1.2.5. 工作流故障排除
OpenShift Serverless Logic Operator 使用健康检查探测部署其 pod,以确保工作流以健康状态运行。如果更改导致这些健康检查失败,pod 将停止响应。
先决条件
- 已在集群中安装了 OpenShift Serverless Logic Operator。
- 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI
(oc)
。
流程
运行以下命令检查工作流状态:
$ oc get workflow <name> -o jsonpath={.status.conditions} | jq .
要从工作流的部署中获取和分析日志,请运行以下命令:
$ oc logs deployment/<workflow_name> -f
1.2.6. 删除工作流
您可以使用 oc delete
命令删除当前目录中的 OpenShift Serverless Logic 工作流。
先决条件
- 已在集群中安装了 OpenShift Serverless Logic Operator。
- 您可以使用适当的角色和权限访问 OpenShift Serverless Logic 项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI
(oc)
。
流程
-
验证您具有定义您要删除的工作流的正确文件。例如,
workflow.yaml
。 运行
oc delete
命令从指定的命名空间中删除工作流:$ oc delete -f <your_file> -n <your_namespace>
将
<your_file
> 替换为工作流文件的名称,将 <your_namespace&
gt; 替换为您的命名空间。