서버리스 논리


Red Hat OpenShift Serverless 1.35

OpenShift Serverless Logic 소개

Red Hat OpenShift Documentation Team

초록

이 문서에서는 OpenShift Serverless Logic 기능에 대한 개요를 제공합니다.

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 Toggle word wrap

    기본적으로 생성된 프로젝트 이름은 new-project 입니다. 다음과 같이 [-n|--name] 플래그를 사용하여 프로젝트 이름을 변경할 수 있습니다.

    명령 예

    $ kn workflow create --name my-project
    Copy to Clipboard Toggle word wrap

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 Toggle word wrap

    프로젝트가 준비되면 localhost:8080/q/dev-ui 의 브라우저에서 Development 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 Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • 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 Toggle word wrap

    1
    Is a <workflow_name>.
    2
    Dev 프로필을 사용하여 워크플로를 배포해야 함을 나타냅니다.
  2. 애플리케이션을 배포하려면 다음 명령을 입력하여 YAML 파일을 적용합니다.

    $ oc apply -f <filename> -n <your_namespace>
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 입력하여 배포를 확인하고 배포된 워크플로우의 상태를 확인합니다.

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

    워크플로우가 나열되고 상태가 Running 또는 Completed 인지 확인합니다.

  4. 다음 명령을 입력하여 클러스터에서 직접 워크플로를 편집합니다.

    $ oc edit sonataflow <workflow_name> -n <your_namespace>
    Copy to Clipboard Toggle word wrap
  5. 편집 후 변경 사항을 저장합니다. OpenShift Serverless Logic Operator는 변경 사항을 감지하고 그에 따라 워크플로우를 업데이트합니다.

검증

  1. 변경 사항이 올바르게 적용되도록 하려면 다음 명령을 입력하여 워크플로우의 상태 및 로그를 확인합니다.

    1. 다음 명령을 실행하여 워크플로우의 상태를 확인합니다.

      $ oc get sonataflows -n <your_namespace>
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 워크플로우 로그를 확인합니다.

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

다음 단계

  1. 테스트를 완료한 후 다음 명령을 실행하여 불필요한 사용을 방지하기 위해 리소스를 삭제합니다.

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

1.2.2. 프리뷰 프로필을 사용하여 워크플로우 배포

프리뷰 프로필을 사용하여 OpenShift Container Platform에 로컬 워크플로를 배포할 수 있습니다. 이를 통해 클러스터에서 직접 프로덕션과 같은 환경에서 워크플로우를 검증하고 테스트할 수 있습니다. 프리뷰 프로필은 워크플로우를 프로덕션으로 이동하기 전에 최종 테스트 및 검증뿐만 아니라 빌드 파이프라인을 직접 관리하지 않고 빠르게 반복하는 데 이상적입니다. 또한 프로덕션과 같은 설정에서 워크플로우가 원활하게 실행되도록 합니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI (oc) 를 설치했습니다.

프리뷰 프로필에 워크플로를 배포하기 위해 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에 배포된 이미지를 사용하여 워크플로우를 빌드합니다. 시나리오에 보안 또는 강화 제약 조건 등 이미지 사용을 위한 엄격한 정책이 필요한 경우 기본 이미지를 교체할 수 있습니다.

이 이미지를 변경하려면 워크플로우를 배포한 네임스페이스에서 SonataFlowPlatform CR(사용자 정의 리소스)을 편집합니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI (oc) 를 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 네임스페이스의 SonataFlowPlatform 리소스를 나열합니다.

    $ oc get sonataflowplatform -n <your_namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    & lt;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 Toggle word wrap

검증

  1. 다음 명령을 실행하여 SonataFlowPlatform CR이 올바르게 패치되었는지 확인합니다.

    $ oc describe sonataflowplatform <name> -n <your_namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    & lt;name >을 SonataFlowPlatform 리소스의 이름으로 바꾸고 < your_namespace >를 네임스페이스 이름으로 바꿉니다.

    spec.build.configbaseImage 필드가 새 이미지를 반영하는지 확인합니다.

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 Toggle word wrap

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 Toggle word wrap

참고

네임스페이스당 하나의 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 Toggle word wrap

이러한 매개변수는 새 빌드 인스턴스에만 적용됩니다.

1.2.2.1.4. 내부 빌더에 인수 전달

빌드 인수를 SonataFlowBuild 인스턴스에 전달하거나 SonataFlowPlatform 리소스에서 기본 빌드 인수를 설정하여 빌드 프로세스를 사용자 지정할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI (oc) 를 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 기존 SonataFlowBuild 인스턴스를 확인합니다.

    $ oc get sonataflowbuild <name> -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    &lt ;name >을 SonataFlowBuild 인스턴스의 이름으로 바꾸고 < namespace >를 네임스페이스로 바꿉니다.
  2. 다음 명령을 실행하여 SonataFlowBuild 인스턴스에 빌드 인수를 추가합니다.

    $ oc edit sonataflowbuild <name> -n <namespace>
    Copy to Clipboard Toggle word wrap
  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 Toggle word wrap
    1
    기존 SonataFlowBuild 인스턴스의 이름입니다.
  4. 파일을 저장하고 종료합니다.

    업데이트된 구성이 포함된 새 빌드가 시작됩니다.

  5. 다음 명령을 실행하여 SonataFlowPlatform 리소스에서 기본 빌드 인수를 설정합니다.

    $ oc edit sonataflowplatform <name> -n <namespace>
    Copy to Clipboard Toggle word wrap
  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 Toggle word wrap
    1
    기존 SonataFlowPlatform 리소스의 이름입니다.
  7. 파일을 저장하고 종료합니다.
1.2.2.1.5. 내부 빌더에서 환경 변수 설정

환경 변수를 SonataFlowBuild 내부 빌더 Pod로 설정할 수 있습니다. 이러한 변수는 빌드 컨텍스트에만 유효하며 최종 빌드된 워크플로우 이미지에 설정되지 않습니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI (oc) 를 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 기존 SonataFlowBuild 인스턴스를 확인합니다.

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

    &lt ;name >을 SonataFlowBuild 인스턴스의 이름으로 바꾸고 < namespace >를 네임스페이스로 바꿉니다.

  2. 다음 명령을 실행하여 SonataFlowBuild 인스턴스를 편집합니다.

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

    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 Toggle word wrap

  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 Toggle word wrap

1.2.2.1.6. 기본 빌더 이미지 변경

logic-operator-rhel8-builder-config 구성 맵을 편집하여 OpenShift Serverless Logic Operator에서 사용하는 기본 빌더 이미지를 수정할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI (oc) 를 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 logic-operator-rhel8-builder-config 구성 맵을 편집합니다.

    $ oc edit cm/logic-operator-rhel8-builder-config -n openshift-serverless-logic
    Copy to Clipboard Toggle word wrap
  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
    Copy to Clipboard Toggle word wrap

  3. 변경 사항을 저장합니다.
1.2.2.2. 워크플로우 빌드 및 배포

OpenShift Container Platform 및 OpenShift Serverless Logic Operator에서 SonataFlow CR(사용자 정의 리소스)을 생성하여 워크플로우를 빌드하고 배포할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • 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 Toggle word wrap
  2. 다음 명령을 실행하여 SonataFlow 워크플로우 정의를 OpenShift Container Platform 네임스페이스에 적용합니다.

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

    welcomes -workflow.yaml 파일에 대한 명령의 예:

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

  3. 다음 명령을 실행하여 모든 빌드 구성을 나열합니다.

    $ oc get buildconfigs -n workflows
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 빌드 프로세스의 로그를 가져옵니다.

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

    welcomes -workflow.yaml 파일에 대한 명령의 예:

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

검증

  1. 배포를 확인하려면 다음 명령을 실행하여 모든 Pod를 나열합니다.

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

    워크플로우에 해당하는 Pod가 실행 중인지 확인합니다.

  2. 다음 명령을 실행하여 실행 중인 Pod 및 해당 로그를 확인합니다.

    $ oc logs pod/<pod-name> -n workflows
    Copy to Clipboard Toggle word wrap
1.2.2.3. 워크플로우 배포 확인

워크플로우 Pod에서 테스트 HTTP 호출을 수행하여 OpenShift Serverless Logic 워크플로가 실행 중인지 확인할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • 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 Toggle word wrap
  2. 다음 명령을 실행하여 워크플로우 서비스의 경로를 생성합니다.

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

    이 명령은 워크플로우 서비스에 액세스할 공용 URL을 생성합니다.

  3. 다음 명령을 실행하여 공용 URL의 환경 변수를 설정합니다.

    $ WORKFLOW_SVC=$(oc get route/<workflow-service-name> -n <namespace> --template='{{.spec.host}}')
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 서비스에 POST 요청을 보내 워크플로우에 HTTP를 호출합니다.

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

    출력 예

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

    이 출력은 워크플로우가 실행 중인 경우 예상되는 응답의 예를 보여줍니다.

1.2.2.4. 빌드 재시작

빌드를 다시 시작하려면 SonataFlowBuild 인스턴스에서 sonataflow.org/restartBuild: true 주석을 추가하거나 편집할 수 있습니다. 워크플로우 또는 초기 빌드 버전에 문제가 있는 경우 빌드를 다시 시작해야 합니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI (oc) 를 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 SonataFlowBuild 인스턴스가 있는지 확인합니다.

    $ oc get sonataflowbuild <name> -n <namespace>
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 SonataFlowBuild 인스턴스를 편집합니다.

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

    & lt;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 Toggle word wrap

    이 작업을 수행하면 OpenShift Serverless Logic Operator가 워크플로우의 새 빌드를 시작합니다.

  4. 빌드 프로세스를 모니터링하려면 다음 명령을 실행하여 빌드 로그를 확인합니다.

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

    & lt;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 Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI (oc) 를 설치했습니다.

프로세스

  1. SonataFlow CR에 컨테이너 이미지를 지정합니다.

    set 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 Toggle word wrap

    1
    흐름 정의는 빌드 프로세스 중에 사용되는 워크플로우 정의와 일치해야 합니다. GitOps 프로필을 사용하여 워크플로를 배포할 때 Operator는 이 정의를 컨테이너 이미지에 포함된 워크플로우 파일과 비교합니다. 정의 및 파일이 일치하지 않으면 배포에 실패합니다.
  2. CR을 적용하여 워크플로우를 배포합니다.

    $ oc apply -f <filename>
    Copy to Clipboard Toggle word wrap

1.2.4. 워크플로우 편집

OpenShift Serverless Logic Operator는 워크플로우 서비스를 배포할 때 런타임 속성을 저장하기 위해 두 개의 구성 맵을 생성합니다.

  • 사용자 속성: 접미사 -props 를 사용하여 SonataFlow 오브젝트 뒤에 이름이 지정된 ConfigMap 에 정의됩니다. 예를 들어 워크플로우 이름이 인사말 인 경우 ConfigMap 이름은 greeting-props 입니다.
  • 관리 속성: 접미사 -managed-props 를 사용하여 SonataFlow 오브젝트 뒤에 이름이 지정된 ConfigMap 에 정의됩니다. 예를 들어 워크플로우 이름이 인사말 인 경우 ConfigMap 이름은 인사말-관리형입니다.
참고

관리 되는 속성은 항상 동일한 키 이름으로 사용자 속성을 재정의 하며 사용자가 편집할 수 없습니다.Managed properties always override any user property with the same key name and cannot be edited by the user. 다음 조정 사이클에서 Operator가 변경 사항을 덮어씁니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI (oc) 를 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 ConfigMap 을 열고 편집합니다.

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

    & lt;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
    Copy to Clipboard Toggle word wrap

    Operator가 구성을 기본 설정으로 교체하지 못하도록 속성이 올바르게 포맷되었는지 확인합니다.

  3. 필요한 변경을 수행한 후 파일을 저장하고 편집기를 종료합니다.

1.2.5. 워크플로우 테스트

OpenShift Serverless Logic 워크플로가 올바르게 실행 중인지 확인하려면 관련 Pod에서 테스트 HTTP 호출을 수행할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI (oc) 를 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 네임스페이스에 지정된 서비스의 경로를 생성하려면 다음을 수행합니다.

    $ oc expose svc <service_name> -n <namespace>
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 새로 노출된 서비스의 URL을 가져오려면 다음을 수행합니다.

    $ WORKFLOW_SVC=$(oc get route/<service_name> --template='{{.spec.host}}')
    Copy to Clipboard Toggle word wrap
  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 Toggle word wrap
  4. 응답을 확인하여 워크플로우가 예상대로 작동하는지 확인합니다.

1.2.6. 워크플로우 문제 해결

OpenShift Serverless Logic Operator는 상태 점검 프로브와 함께 Pod를 배포하여 워크플로우가 정상 상태로 실행되도록 합니다. 변경으로 인해 이러한 상태 점검이 실패하면 Pod가 응답하지 않습니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI (oc) 를 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 워크플로우 상태를 확인합니다.

    $ oc get workflow <name> -o jsonpath={.status.conditions} | jq .
    Copy to Clipboard Toggle word wrap
  2. 워크플로우 배포에서 로그를 가져와서 분석하려면 다음 명령을 실행합니다.

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

1.2.7. 워크플로우 삭제

oc delete 명령을 사용하여 현재 디렉터리에서 OpenShift Serverless Logic 워크플로를 삭제할 수 있습니다.

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift CLI (oc) 를 설치했습니다.

프로세스

  1. 삭제할 워크플로우를 정의하는 올바른 파일이 있는지 확인합니다. 예: workflow.yaml.
  2. oc delete 명령을 실행하여 지정된 네임스페이스에서 워크플로우를 제거합니다.

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

    &lt ;your_file >을 워크플로우 파일의 이름으로 바꾸고 < your_namespace >를 네임스페이스로 바꿉니다.

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가 클러스터에 새 리소스를 생성할 때 작동하는 방식을 정의합니다. 그러나 이 구성의 변경 사항은 이미 존재하는 리소스에는 영향을 미치지 않습니다.

구성 맵의 controllers_cfg.yaml 키 내의 모든 옵션을 수정할 수 있습니다.

다음 표에는 사용 가능한 모든 글로벌 구성 옵션이 요약되어 있습니다.

Expand
구성 키기본값설명

defaultPvcKanikoSize

1Gi

내부 OpenShift Serverless Logic Operator 빌더 관리자를 사용하는 경우 기본 크기 Kaniko PVC(영구 볼륨 클레임)입니다.

healthFailureThresholdDevMode

50

개발자 모드 워크플로가 시작될 때까지 대기하는 시간(초)입니다. 이 정보는 컨트롤러 관리자가 새 개발자 모드 컨테이너를 생성하고 상태 점검 프로브를 설정하는 데 사용됩니다.

kanikoDefaultWarmerImageTag

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

Operator가 관리하는 Kaniko 빌더에서 내부적으로 사용하는 기본 이미지는 웜업 Pod를 생성합니다.

kanikoExecutorImageTag

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

Operator가 관리하는 Kaniko 빌더에서 내부적으로 사용하여 executor Pod를 생성하는 기본 이미지입니다.

jobsServicePostgreSQLImageTag

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

사용할 PostgreSQL의 작업 서비스 이미지입니다. 비어 있는 경우 OpenShift Serverless Logic Operator는 현재 OpenShift Serverless Logic Operator 버전에 따라 기본 Apache 커뮤니티 이미지를 사용합니다.

jobsServiceEphemeralImageTag

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

지속성 없이 작업 서비스 이미지를 사용합니다. 비어 있는 경우 OpenShift Serverless Logic Operator는 현재 OpenShift Serverless Logic Operator 버전에 따라 기본 Apache 커뮤니티 이미지를 사용합니다.

dataIndexPostgreSQLImageTag

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

사용할 PostgreSQL의 Data Index 서비스 이미지입니다. 비어 있는 경우 OpenShift Serverless Logic Operator는 현재 OpenShift Serverless Logic Operator 버전에 따라 기본 Apache 커뮤니티 이미지를 사용합니다.

dataIndexEphemeralImageTag

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

지속성 없이 Data Index 서비스 이미지를 사용할 수 있습니다. 비어 있는 경우 OpenShift Serverless Logic Operator는 현재 OpenShift Serverless Logic Operator 버전에 따라 기본 Apache 커뮤니티 이미지를 사용합니다.

sonataFlowBaseBuilderImageTag

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

OpenShift Serverless Logic 기본 빌더 이미지는 내부 Dockerfile에서 프리뷰 프로필에서 워크플로우 애플리케이션을 빌드하는 데 사용됩니다. 비어 있는 경우 OpenShift Serverless Logic Operator는 현재 OpenShift Serverless Logic Operator 버전에 따라 기본 Apache 커뮤니티 이미지를 사용합니다.

sonataFlowDevModeImageTag

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

devmode 프로필에 OpenShift Serverless Logic 워크플로 이미지를 배포하는 데 사용할 이미지입니다. 비어 있는 경우 OpenShift Serverless Logic Operator는 현재 OpenShift Serverless Logic Operator 버전에 따라 기본 Apache 커뮤니티 이미지를 사용합니다.

builderConfigMapName

logic-operator-rhel8-builder-config

OpenShift Serverless Logic Operator 네임스페이스의 빌더 구성 맵의 기본 이름입니다.

postgreSQLPersistenceExtensions

다음 열

워크플로우 지속성에 필요한 Quarkus 확장입니다. 이러한 확장은 빌드 중인 워크플로우에서 PostgreSQL 지속성을 구성한 경우 OpenShift Serverless Logic Operator 빌더에서 사용합니다.

kogitoEventsGrouping

true

true 로 설정하면 gitops 또는 프리뷰 프로필을 사용하여 모든 워크플로우 배포를 구성하여 누적된 워크플로우 상태 변경 이벤트를 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 Toggle word wrap

또는 다음 예와 같이 글로벌 구성 구성 맵의 기본 빌더 이미지를 수정할 수도 있습니다.

사용자 정의 기본 빌더 이미지가 있는 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 Toggle word wrap

기본 빌더 이미지를 사용자 정의할 때 다음 우선순위 순서가 적용됩니다.

  1. 현재 컨텍스트의 SonataFlowPlatform 구성입니다.
  2. ConfigMap 리소스의 글로벌 구성 항목입니다.
  3. logic-operator-rhel8-builder-config 구성 맵에 정의된 OpenShift Serverless Logic Operator 네임스페이스 내의 Dockerfile의 FROM 절입니다.

SonataFlowPlatform 구성의 항목은 항상 다른 값을 재정의합니다.

3장. 서비스 관리

3.1. OpenAPI 서비스 구성

OAS( OpenAPI Specification )는 HTTP API에 대한 표준 프로그래밍 언어와 무관한 인터페이스를 정의합니다. 소스 코드, 추가 문서 또는 네트워크 트래픽 검사에 액세스하지 않고도 서비스의 기능을 이해할 수 있습니다. OpenAPI를 사용하여 서비스를 정의할 때 최소한의 구현 논리를 사용하여 이해하고 상호 작용할 수 있습니다. 인터페이스 설명이 하위 수준 프로그래밍을 단순화하는 것과 마찬가지로 OpenAPI 사양 에서는 서비스 호출에 대한 추측을 제거합니다.

3.1.1. OpenAPI 함수 정의

OpenShift Serverless Logic을 사용하면 함수의 OpenAPI specfication 참조를 사용하여 워크플로우가 원격 서비스와 상호 작용할 수 있습니다.

OpenAPI 함수 정의의 예

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

operation 속성은 다음 매개변수로 구성된 문자열입니다.

  • URI: 엔진은 이를 사용하여 사양 파일을 찾습니다.
  • 운영 식별자: 이 ID는 OpenAPI 사양 파일에서 찾을 수 있습니다.

OpenShift Serverless Logic은 다음 URI 체계를 지원합니다.

  • 파일: 파일 시스템에 있는 파일에 이 값을 사용합니다.
  • HTTP 또는 https: 원격 위치에 있는 파일에 이 값을 사용합니다.

빌드 시 OpenAPI 사양 파일을 사용할 수 있는지 확인합니다. OpenShift Serverless Logic은 내부 코드 생성 기능을 사용하여 런타임 시 요청을 보냅니다. 애플리케이션 이미지를 빌드하면 OpenShift Serverless Logic에 이러한 파일에 액세스할 수 없습니다.

워크플로우에 추가하려는 OpenAPI 서비스에 사양 파일이 없는 경우 파일을 생성하고 노출하도록 서비스를 하나 생성하거나 업데이트할 수 있습니다.

3.1.2. OpenAPI 사양을 기반으로 REST 요청 전송

OpenAPI 사양 파일을 기반으로 하는 REST 요청을 보내려면 다음 절차를 수행해야 합니다.

  • 함수 참조 정의
  • 워크플로우 상태의 정의된 함수에 액세스

사전 요구 사항

  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenAPI 사양 파일에 액세스할 수 있습니다.

프로세스

  1. OpenAPI 기능을 정의하려면 다음을 수행합니다.

    1. 호출하려는 서비스의 OpenAPI 사양 파일을 식별하고 액세스합니다.
    2. OpenAPI 사양 파일을 < project_application_dir>/specs 와 같은 워크플로우 서비스 디렉터리에 복사합니다.

      다음 예제에서는 곱셈 REST 서비스에 대한 OpenAPI 사양을 보여줍니다.

      곱셈 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 Toggle word wrap

    3. 워크플로우에서 함수를 정의하려면 OpenAPI 사양의 operationId 를 사용하여 함수 정의에서 원하는 작업을 참조합니다.

      온도 변환 애플리케이션의 함수 정의 예

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

    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 Toggle word wrap

    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 Toggle word wrap

      다음은 함수 호출의 예로, 요청 경로에 petId 라는 하나의 매개변수만 추가됩니다.

      PetStore 함수 호출 예

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

      1
      CallPetStore 와 같은 상태 정의
      2
      함수 정의 참조. 이전 예에서 함수 정의 getPetById 는 PetStore OpenAPI 사양입니다.
      3
      인수 정의. OpenShift Serverless Logic은 요청을 보내기 전에 인수 petId 를 요청 경로에 추가합니다.

3.1.3. OpenAPI 서비스의 끝점 URL 구성

워크플로우 상태의 함수 정의에 액세스한 후 OpenAPI 서비스의 엔드포인트 URL을 구성할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenShift Serverless Logic 프로젝트를 생성했습니다.
  • OpenAPI 사양 파일에 액세스할 수 있습니다.
  • 워크플로우에서 함수 정의를 정의했습니다.
  • 워크플로우 상태에서 정의된 함수에 액세스할 수 있습니다.

프로세스

  1. 구성할 OpenAPI 사양 파일을 찾습니다. 예를 들면 substraction.yaml 입니다.
  2. 문자(예: . )를 밑줄로 바꾸고 문자를 소문자로 변환하여 파일 이름을 유효한 구성 키로 변환합니다. 예를 들어 substraction.yamlsubstraction_yaml 로 변경합니다.
  3. 구성 키를 정의하려면 변환된 파일 이름을 REST 클라이언트 구성 키로 사용합니다. 다음 예와 같이 이 키를 환경 변수로 설정합니다.

    quarkus.rest-client.subtraction_yaml.url=http://myserver.com
    Copy to Clipboard Toggle word wrap
  4. application.properties 파일에서 하드 코딩 URL을 방지하려면 다음 예와 같이 환경 변수 대체를 사용합니다.

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

    이 예제에서는 다음을 수행합니다.

    • 구성 키: quarkus.rest-client.subtraction_yaml.url
    • 환경 변수: SUBTRACTION_URL
    • 대체 URL: http://myserver.com
  5. (SUBTRACTION_URL) 환경 변수가 시스템 또는 배포 환경에 설정되어 있는지 확인합니다. 변수를 찾을 수 없는 경우 애플리케이션은 대체 URL (http://myserver.com) 을 사용합니다.
  6. application.properties 파일에 구성 키와 URL 대체를 추가합니다.

    quarkus.rest-client.subtraction_yaml.url=${SUBTRACTION_URL:http://myserver.com}
    Copy to Clipboard Toggle word wrap
  7. 애플리케이션을 배포하거나 다시 시작하여 새 구성 설정을 적용합니다.

3.2. OpenAPI 서비스 끝점 구성

OpenShift Serverless Logic은 kogito.sw.operationIdStrategy 속성을 사용하여 OpenAPI 문서에 정의된 서비스를 호출하는 REST 클라이언트를 생성합니다. 이 속성은 REST 클라이언트 구성에 대해 구성 키를 파생하는 방법을 결정합니다.

kogito.sw.operationIdStrategy 속성은 FILE_NAME,FULL_URI,FUNCTION_NAME, SPEC_TITLE 값을 지원합니다.

FILE_NAME

OpenShift Serverless Logic은 OpenAPI 문서 파일 이름을 사용하여 구성 키를 생성합니다. 키는 파일 이름을 기반으로 하며, 여기서 특수 문자가 밑줄로 교체됩니다.

설정 예:

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

1
OpenAPI 파일 경로는 < project_application_dir>/specs/stock-portfolio-svc.yaml 입니다. REST 클라이언트의 URL을 구성하는 생성된 키는 score _portfolio_svc_yaml 입니다.
FULL_URI

OpenShift Serverless Logic은 OpenAPI 문서의 전체 URI 경로를 구성 키로 사용합니다. 전체 URI는 키를 형성하도록 조정됩니다.

Serverless Workflow의 예

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

설정 예:

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

1
URI 경로는 https://my.remote.host/apicatalog/apis/123/document 입니다. REST 클라이언트의 URL을 구성하는 생성된 키는 apicatalog_apis_123_document 입니다.
FUNCTION_NAME

OpenShift Serverless Logic은 OpenAPI 문서를 참조하는 워크플로우 ID와 함수 이름을 결합하여 구성 키를 생성합니다.

Serverless Workflow의 예

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

설정 예:

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

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 Toggle word wrap

설정 예:

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

1
OpenAPI 문서 제목은 주식 서비스 API 입니다. REST 클라이언트의 URL을 구성하는 생성된 키는 price -service_API 입니다.

3.2.1. URI 별칭 사용

kogito.sw.operationIdStrategy 속성 대신 workflow-uri-definitions 사용자 지정 확장을 사용하여 URI에 별칭을 할당할 수 있습니다. 이 별칭은 구성 프로세스를 단순화하고 REST 클라이언트 설정 및 함수 정의에서 구성 키로 사용할 수 있습니다.

workflow-uri-definitions 확장을 사용하면 URI를 워크플로우 전체에서 및 구성 파일에서 참조할 수 있는 별칭에 매핑할 수 있습니다. 이 접근 방식은 중앙 집중식으로 URI 및 해당 구성을 관리하는 방법을 제공합니다.

사전 요구 사항

  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • 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 Toggle word wrap

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 Toggle word wrap

    이전 예에서 구성 키는 quarkus.rest-client.remoteCatalog.url 로 설정되고 URL은 remoteCatalog 별칭을 참조하여 REST 클라이언트가 사용하는 http://localhost:8282/ 로 설정됩니다.

  2. 워크플로우에서는 URI에서 작동하는 함수를 정의할 때 별칭을 사용합니다.

    예제 워크플로우(종료됨):

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

3.3. 서비스 문제 해결

OpenAPI 기능을 사용하는 HTTP 기반 함수 호출의 효율적인 문제 해결은 워크플로우 오케스트레이션을 유지 관리하는 데 매우 중요합니다.

문제를 진단하기 위해 HTTP 요청 및 응답을 추적할 수 있습니다.

3.3.1. HTTP 요청 및 응답 추적

OpenShift Serverless Logic은 Apache HTTP 클라이언트를 사용하여 HTTP 요청 및 응답을 추적합니다.

사전 요구 사항

  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • OpenAPI 사양 파일에 액세스할 수 있습니다.
  • HTTP 요청 및 응답을 상관하기 위해 워크플로우 정의 및 인스턴스 ID에 액세스할 수 있습니다.
  • HTTP 서비스 호출이 발생하는 애플리케이션의 로그 구성에 액세스할 수 있습니다.

프로세스

  1. OpenShift Serverless Logic은 HTTP 요청 및 응답을 추적하기 위해 다음 속성을 설정하여 Apache HTTP 클라이언트를 사용합니다.

    # Turning HTTP tracing on
    quarkus.log.category."org.apache.http".level=DEBUG
    Copy to Clipboard Toggle word wrap
  2. 애플리케이션의 application.properties 파일에 다음 구성을 추가하여 Apache HTTP Client에 대한 디버깅을 켭니다.

    quarkus.log.category."org.apache.http".level=DEBUG
    Copy to Clipboard Toggle word wrap
  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 Toggle word wrap

  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 Toggle word wrap

4장. 지원 서비스

4.1. 작업 서비스

작업 서비스는 클라우드 환경에서 작업을 예약하고 실행합니다. 독립 서비스에서는 HTTP 호출 또는 Knative 이벤트 전달을 포함하여 지원되는 상호 작용 모드를 통해 시작할 수 있는 이러한 작업을 구현합니다.

OpenShift Serverless Logic에서 작업 서비스는 시간 트리거 작업 실행을 제어합니다. 따라서 워크플로우에서 사용할 수 있는 모든 시간 기반 상태는 워크플로우와 작업 서비스 간의 상호 작용에 의해 처리됩니다.

예를 들어 워크플로우 실행이 구성된 타임아웃을 사용하여 상태에 도달하면 해당 작업이 작업 서비스에서 생성되고 시간 초과가 충족되면 HTTP 콜백이 실행되어 워크플로우에 알립니다.

작업 서비스의 주요 목표는 실행해야 하는 예약된 작업과 같은 활성 작업을 관리하는 것입니다. 작업이 최종 상태가 되면 작업 서비스에서 해당 상태를 제거합니다. 영구 리포지토리의 작업 정보를 유지하기 위해 작업 서비스는 Data Index Service와 같은 외부 서비스에서 기록할 수 있는 상태 변경 이벤트를 생성합니다.

참고

OpenShift Serverless Operator를 사용하여 워크플로우를 배포하는 경우 작업 서비스를 수동으로 설치하거나 구성할 필요가 없습니다. Operator는 이러한 작업을 자동으로 처리하고 각 워크플로우에 연결하는 데 필요한 모든 구성을 관리합니다.

4.1.1. 작업 서비스 리더 선택 프로세스

작업 서비스는 단일 서비스로 작동하므로 활성 인스턴스가 하나의 활성 인스턴스만 작업을 예약하고 실행할 수 있습니다.

여러 인스턴스가 실행될 수 있는 클라우드에 서비스가 배포될 때 충돌을 방지하기 위해 작업 서비스는 리더 선택 프로세스를 지원합니다. 리더로 선택한 인스턴스만 작업을 수신하고 예약하기 위해 외부 통신을 관리합니다.

Leader가 아닌 인스턴스는 대기 상태에서 비활성 상태로 유지되지만 선택 프로세스를 통해 계속 리더가 되려고 시도합니다. 새 인스턴스가 시작되면 즉시 리더십을 가정하지 않습니다. 대신 리더 선택 프로세스에 입력하여 리더 역할을 수행할 수 있는지 확인합니다.

현재 리더가 응답하지 않거나 종료되는 경우 실행 중인 다른 인스턴스가 리더로 대체됩니다.

참고

이 리더 선택 메커니즘은 현재 PostgreSQL 구현에서만 지원되는 기본 지속성 백엔드를 사용합니다.

4.2. 데이터 인덱스 서비스

Data Index 서비스는 워크플로우 인스턴스 및 관련 작업과 관련된 데이터를 저장하는 전용 지원 서비스입니다. 이 서비스는 사용자가 해당 데이터를 쿼리할 수 있는 GraphQL 엔드포인트를 제공합니다.

데이터 인덱스 서비스는 이벤트를 통해 수신된 데이터를 처리하며, 이는 모든 워크플로우에서 시작되거나 작업 서비스에서 직접 시작될 수 있습니다.

데이터 인덱스는 워크플로우의 CloudEvents 메시지를 사용하도록 Apache Kafka 또는 Knative Eventing을 지원합니다. 이 이벤트 데이터를 인덱싱하고 데이터베이스에 저장하여 GraphQL을 통해 액세스할 수 있습니다. 이러한 이벤트는 워크플로우 실행에 대한 자세한 정보를 제공합니다. Data Index 서비스는 OpenShift Serverless Logic 검색, 통찰력 및 관리 기능의 핵심입니다.

Data Index 서비스의 주요 기능은 다음과 같습니다.

  • 유연한 데이터 구조
  • 배포 가능한 클라우드 지원 형식
  • Apache Kafka, Knative 및 CloudEvents를 통한 워크플로우와 메시지 기반 통신
  • 강력한 GraphQL 기반 쿼리 API
참고

OpenShift Serverless Operator를 사용하여 워크플로우를 배포하는 경우 Data Index 서비스를 수동으로 설치하거나 구성할 필요가 없습니다. Operator는 각 워크플로우에 연결하는 데 필요한 모든 구성을 자동으로 관리합니다.

4.2.1. 워크플로우 인스턴스 및 작업에 대한 GraphQL 쿼리

워크플로우 인스턴스 및 작업에 대한 데이터를 검색하려면 GraphQL 쿼리를 사용할 수 있습니다.

4.2.1.1. 워크플로우 인스턴스에서 데이터 검색

다음 쿼리 예제를 사용하여 특정 워크플로우 인스턴스에 대한 정보를 검색할 수 있습니다.

{
  ProcessInstances {
    id
    processId
    state
    parentProcessInstanceId
    rootProcessId
    rootProcessInstanceId
    variables
    nodes {
      id
      name
      type
    }
  }
}
Copy to Clipboard Toggle word wrap
4.2.1.2. 작업에서 데이터 검색

다음 쿼리 예제를 사용하여 특정 작업 인스턴스에서 데이터를 검색할 수 있습니다.

{
  Jobs {
    id
    status
    priority
    processId
    processInstanceId
    executionCounter
  }
}
Copy to Clipboard Toggle word wrap
4.2.1.3. where 매개변수를 사용하여 쿼리 결과를 필터링

where 매개변수를 사용하여 쿼리 결과를 필터링하여 워크플로우 특성에 따라 여러 조합을 허용할 수 있습니다.

상태별로 필터링할 쿼리 예

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

ID로 필터링할 쿼리 예

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

기본적으로 AND Operator를 사용하여 필터를 결합합니다. 필터를 AND 또는 OR 연산자와 결합하여 이 동작을 수정할 수 있습니다.

OR Operator와 필터를 결합하는 예제 쿼리

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

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 Toggle word wrap

특성 유형에 따라 다음 사용 가능한 Operator를 사용할 수 있습니다.

Expand
특성 유형사용 가능한 Operator

문자열 배열

  • contains: 문자열
  • containsAll: 문자열 배열
  • containsAny: 문자열 배열
  • IsNull: 부울 (true 또는 false)

문자열

  • in: 문자열 배열
  • : 문자열
  • IsNull: 부울 (true 또는 false)
  • 동일: 문자열

ID

  • in: 문자열 배열
  • IsNull: 부울 (true 또는 false)
  • 동일: 문자열

부울

  • IsNull: 부울 (true 또는 false)
  • 동일한: 부울(true 또는 false)

Numeric

  • in: 정수 배열
  • IsNull: 부울
  • 동일하게: 정수
  • greaterThan: Integer
  • greaterThanEqual: Integer
  • lessThan: Integer
  • lessThanEqual: Integer
  • between: 숫자 범위
  • from: 정수
  • 대상: 정수

날짜

  • IsNull: 부울 (true 또는 false)
  • 동일: 날짜 시간
  • greaterthan: 날짜 시간
  • greaterThanEqual: 날짜 시간
  • lessThan: 날짜 시간
  • lessThanEqual: 날짜 시간
  • between: 날짜 범위
  • 출처: 날짜
  • 대상: 날짜
4.2.1.4. orderBy 매개변수를 사용하여 쿼리 결과 정렬

orderBy 매개변수를 사용하여 워크플로우 특성을 기반으로 쿼리 결과를 정렬할 수 있습니다. 오름차순 (ASC) 또는 내림차순으로 정렬 방향을 지정할 수도 있습니다. 지정한 순서에 따라 여러 속성이 적용됩니다.

ASC 순서에서 시작 시간별로 정렬할 쿼리의 예

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

4.2.1.5. pagination 매개변수를 사용하여 결과 수 제한

반환된 결과 수를 제어하고 pagination 매개변수를 사용하여 오프셋을 지정할 수 있습니다.

결과를 오프셋 0부터 시작하여 10으로 제한하는 쿼리의 예

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

4.3. 지원 서비스 관리

이 섹션에서는 OpenShift Serverless Logic에 필요한 지원 서비스에 대한 개요를 제공합니다. 특히 OpenShift Serverless Logic Operator를 사용하여 Data Index 서비스 및 작업 서비스 지원 서비스를 구성하고 배포하는 데 중점을 둡니다.

일반적인 OpenShift Serverless Logic 설치에서는 워크플로우 실행을 성공적으로 수행하기 위해 두 서비스를 모두 배포해야 합니다. Data Index 서비스를 사용하면 효율적인 데이터 관리가 가능한 반면, 작업 서비스는 안정적인 작업 처리를 보장합니다.

4.3.1. 지원 서비스 및 워크플로우 통합

지정된 네임스페이스에 지원 서비스를 배포할 때 활성화되거나 비활성화된 배포 중에서 선택할 수 있습니다. 활성화된 배포에서는 OpenShift Serverless Logic Operator가 네임스페이스 내에서 preview 또는 gitops 프로필을 사용하여 워크플로우 배포를 자동으로 가로채고 서비스와 연결하도록 구성합니다.

예를 들어 Data Index 서비스가 활성화되면 상태 변경 이벤트를 전송하도록 워크플로가 자동으로 구성됩니다. 마찬가지로, 작업 서비스를 활성화하면 워크플로우에 시간 초과가 필요할 때마다 작업이 생성됩니다. OpenShift Serverless Logic Operator는 Data Index 서비스에 이벤트를 전송하도록 Job Service를 구성하여 서비스 간 원활한 통합을 가능하게 합니다.

OpenShift Serverless Logic Operator는 지원 서비스 배포뿐만 아니라 워크플로우 실행을 위해 필요한 다른 구성도 관리합니다. 이러한 모든 구성은 자동으로 처리됩니다. SonataFlowPlatform CR에서 지원 서비스 구성만 제공해야 합니다.

참고

지원 서비스 중 하나만 배포하거나 비활성화된 배포를 사용하는 것은 고급 사용 사례입니다. 표준 설치에서는 두 서비스를 모두 활성화하여 원활한 워크플로우 실행을 보장해야 합니다.

4.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 Toggle word wrap
1
Data Index 서비스 구성 필드
2
설정 enabled: true 는 Data Index 서비스를 배포합니다. false 로 설정하거나 생략하면 배포가 비활성화됩니다. 기본값은 false입니다.
3
작업 서비스 구성 필드.
4
설정 enabled: true 는 작업 서비스를 배포합니다. false 로 설정하거나 생략하면 배포가 비활성화됩니다. 기본값은 false입니다.

4.3.3. 지원 서비스 범위

SonataFlowPlatform CR(사용자 정의 리소스)을 사용하면 특정 네임스페이스 내에서 지원 서비스를 배포할 수 있습니다. 즉, 자동으로 구성된 지원 서비스 및 워크플로우 통신은 배포된 플랫폼의 네임스페이스로 제한됩니다.

이 기능은 다양한 워크플로우 세트에 대한 별도의 지원 서비스 인스턴스가 필요한 경우 특히 유용합니다. 예를 들어 워크플로 및 지원 서비스와 별도로 애플리케이션을 배포하여 다른 배포와 독립적으로 유지할 수 있습니다.

4.3.4. 지원 서비스 지속성 구성

OpenShift Serverless Logic의 지원 서비스에 대한 지속성 구성은 환경의 필요에 따라 임시 또는 PostgreSQL일 수 있습니다. 임시 지속성은 개발 및 테스트에 적합하지만, PostgreSQL 지속성은 프로덕션 환경에 권장됩니다.

4.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 Toggle word wrap
4.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 Toggle word wrap

1
PostgreSQL 데이터베이스 서버에 연결할 서비스의 이름입니다.
2
선택 사항: PostgreSQL 서비스의 네임스페이스를 정의합니다. 기본값은 SonataFlowPlatform 네임스페이스입니다.
3
지원 서비스 데이터를 저장하기 위한 PostgreSQL 데이터베이스의 이름을 정의합니다.
4
선택 사항: 지원 서비스 데이터를 저장하기 위한 스키마를 지정합니다. 기본값은 SonataFlowPlatform 이름이며 -data-index-service 또는 -jobs-service 로 접미사가 지정됩니다. 예를 들어 sonataflow-platform-example-data-index-service.
5
선택 사항: PostgreSQL 서비스에 연결할 포트 번호입니다. 기본값은 5432 입니다.
6
데이터베이스 액세스를 위한 사용자 이름과 암호가 포함된 시크릿의 이름을 정의합니다.
7
데이터베이스와 연결할 사용자 이름을 포함하는 시크릿에서 키 이름을 정의합니다.
8
데이터베이스와 연결할 암호가 포함된 시크릿에 있는 키의 이름을 정의합니다.
참고

각 지속성 필드를 사용하여 각 서비스의 지속성을 독립적으로 구성할 수 있습니다.

다음 명령을 실행하여 PostgreSQL에 액세스할 시크릿을 생성합니다.

$ oc create secret generic <postgresql_secret_name> \
  --from-literal=POSTGRESQL_USER=<user> \
  --from-literal=POSTGRESQL_PASSWORD=<password> \
  -n <namespace>
Copy to Clipboard Toggle word wrap
4.3.4.3. 일반적인 PostgreSQL 지속성 구성

OpenShift Serverless Logic Operator는 지원 서비스를 spec.persistence 필드에 구성된 공통 PostgreSQL 서버에 자동으로 연결합니다.

규칙의 경우 다음 우선 순위가 적용됩니다.

  • 지원 서비스에 대한 특정 지속성을 구성하는 경우(예: services.dataIndex.persistence ) 해당 구성을 사용합니다.
  • 서비스에 대한 지속성을 구성하지 않으면 시스템은 현재 플랫폼의 공통 지속성 구성을 사용합니다.
참고

일반적인 PostgreSQL 구성을 사용하는 경우 각 서비스 스키마는 자동으로 SonataFlowPlatform 이름으로 설정되며, 접미사는 -data-index-service 또는 -jobs-service (예: sonataflow-platform-example-data-index-service )로 설정됩니다.

4.3.5. 시스템 구성 이벤트 지원 서비스

OpenShift Serverless Logic 설치의 경우 다음 유형의 이벤트가 생성됩니다.

  • 워크플로우 비즈니스 논리와 관련된 발신 및 수신 이벤트입니다.
  • 워크플로에서 데이터 인덱스 및 작업 서비스로 전송된 이벤트입니다.
  • 작업 서비스에서 데이터 인덱스 서비스로 전송된 이벤트입니다.

OpenShift Serverless Logic Operator는 Knative Eventing 시스템을 활용하여 이러한 이벤트와 서비스 간의 모든 이벤트 통신을 관리하여 효율적이고 안정적인 이벤트 처리를 보장합니다.

4.3.5.1. 플랫폼 범위 이벤트 시스템 구성

플랫폼 범위 이벤트 시스템을 구성하려면 SonataFlowPlatform CR의 spec.eventing.broker.ref 필드를 사용하여 Knative Eventing 브로커를 참조할 수 있습니다. 이 구성은 OpenShift Serverless Logic Operator가 지정된 브로커를 사용하여 이벤트를 생성하고 사용하기 위해 지원 서비스를 자동으로 연결하도록 지시합니다.

preview 또는 gitops 프로파일이 있고 사용자 정의 이벤트 시스템 구성이 없는 동일한 네임스페이스에 배포된 워크플로우는 지정된 브로커에 자동으로 연결됩니다.

중요

프로덕션 환경에서는 확장성 및 안정성 향상을 위해 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 Toggle word wrap
1
Knative Eventing Broker 이름을 지정합니다.
2
선택 사항: Knative Eventing 브로커의 네임스페이스를 정의합니다. 값을 지정하지 않으면 매개변수의 기본값은 SonataFlowPlatform 네임스페이스입니다. SonataFlowPlatform 과 동일한 네임스페이스에 브로커를 생성하는 것이 좋습니다.
4.3.5.2. 서비스 범위 이벤트 시스템 구성

서비스 범위 이벤트 시스템 구성을 사용하면 이벤트 시스템, 특히 데이터 인덱스 또는 작업 서비스를 세부적으로 제어할 수 있습니다.

참고

OpenShift Serverless Logic 설치의 경우 플랫폼 범위 이벤트 시스템 구성을 사용하는 것이 좋습니다. 서비스 범위 구성은 고급 사용 사례 전용입니다.

4.3.5.3. 데이터 인덱스 이벤트 시스템 구성

데이터 인덱스에 대한 서비스 범위 이벤트 시스템을 구성하려면 특정 Knative Eventing 브로커를 참조하려면 SonataFlowPlatform CR의 spec.services.dataIndex.source.ref 필드를 사용해야 합니다. 이 구성은 OpenShift Serverless Logic Operator가 해당 브로커의 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 Toggle word wrap
1
Data Index에서 이벤트를 사용하는 Knative Eventing 브로커를 지정합니다.
2
선택 사항: Knative Eventing 브로커의 네임스페이스를 정의합니다. 값을 지정하지 않으면 매개변수의 기본값은 SonataFlowPlatform 네임스페이스입니다. SonataFlowPlatform 과 동일한 네임스페이스에 브로커를 생성하는 것이 좋습니다.
4.3.5.4. 작업 서비스 이벤트 시스템 구성

작업 서비스에 대한 서비스 범위 이벤트 시스템을 구성하려면 SonataFlowPlatform CR에서 spec.services.jobService.source.refspec.services.jobService.sink.ref 필드를 사용해야 합니다. 이러한 필드는 OpenShift Serverless Logic Operator가 제공된 구성을 기반으로 SonataFlow 시스템 이벤트를 사용하고 생성하도록 Job Service를 자동으로 연결하도록 지시합니다.

중요

프로덕션 환경에서는 확장성 및 안정성 향상을 위해 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 Toggle word wrap
1
작업 서비스에서 이벤트를 사용하는 Knative Eventing 브로커를 지정합니다.
2
선택 사항: Knative Eventing 브로커의 네임스페이스를 정의합니다. 값을 지정하지 않으면 매개변수의 기본값은 SonataFlowPlatform 네임스페이스입니다. SonataFlowPlatform 과 동일한 네임스페이스에 브로커를 생성하는 것이 좋습니다.
3
작업 서비스에서 이벤트를 생성하는 Knative Eventing 브로커를 지정합니다.
4
선택 사항: Knative Eventing 브로커의 네임스페이스를 정의합니다. 값을 지정하지 않으면 매개변수의 기본값은 SonataFlowPlatform 네임스페이스입니다. SonataFlowPlatform 과 동일한 네임스페이스에 브로커를 생성하는 것이 좋습니다.
4.3.5.5. 서비스 지원을 위한 클러스터 범위 이벤트 시스템 구성

클러스터 범위 지원 서비스를 배포하면 지원 서비스가 SonataFlowPlatform CR에 지정된 브로커에 자동으로 연결됩니다.

4.3.5.6. 서비스 지원을 위한 Eventing 시스템 구성 우선순위 규칙

OpenShift Serverless Logic Operator는 지원 서비스에 대한 이벤트 시스템을 구성하기 위해 정의된 우선순위 순서를 따릅니다.

Eventing 시스템 구성 우선순위 규칙은 다음과 같습니다.

  1. 지원 서비스에 자체 이벤트 시스템 구성이 있는 경우 Data Index 이벤트 시스템 또는 작업 서비스 이벤트 시스템 구성을 사용하는 경우 서비스 구성이 우선합니다.
  2. 지원 서비스를 포함하는 SonataFlowPlatform CR이 플랫폼 범위 이벤트 시스템으로 구성된 경우 해당 구성이 우선합니다.
  3. 현재 클러스터가 클러스터 범위 이벤트 시스템으로 구성된 경우 해당 구성이 우선합니다.
  4. 이전 구성이 없는 경우 지원 서비스는 직접 HTTP 호출을 통해 이벤트를 제공합니다.
4.3.5.7. Eventing 시스템 연결 구성

OpenShift Serverless Logic Operator는 Knative Eventing, SinkBindings 를 자동으로 생성하고 지원 서비스를 이벤트 시스템과 연결하는 트리거를 수행합니다. 이러한 오브젝트는 지원 서비스를 통해 이벤트의 프로덕션 및 사용을 가능하게 합니다.

다음 예제는 SonataFlowPlatform CR에 대해 생성된 Knative 네이티브 이벤트 오브젝트를 표시합니다.

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 Toggle word wrap
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 Toggle word wrap

1
Kafka 클래스를 사용하여 Kafka Knative 브로커를 생성합니다.

다음 명령은 Data Index 및 Job Service 이벤트에 대해 설정된 트리거 목록을 표시하여 이벤트에 서브스크립션하는 서비스를 표시합니다.

$ oc get triggers -n example-namespace
Copy to Clipboard Toggle word wrap

출력 예

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 Toggle word wrap

작업 서비스에 대한 SinkBinding 리소스를 보려면 다음 명령을 사용합니다.

$ oc get sources -n example-namespace
Copy to Clipboard Toggle word wrap

출력 예

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

4.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 Toggle word wrap

참고

요구 사항에 따라 'services' 필드를 'dataIndex' 또는 'jobService'로 설정할 수 있습니다. 나머지 구성은 동일하게 유지됩니다.

1
복제본 수를 정의합니다. 기본값은 1 입니다. jobService 의 경우 이 값은 싱글톤 서비스로 작동하기 때문에 항상 1 로 덮어씁니다.
2
서비스를 실행하는 컨테이너에 대한 특정 구성이 있습니다.
3
환경 변수를 지정하여 서비스 속성을 미세 조정할 수 있습니다.
4
이미지를 업데이트하거나 사용자 지정해야 하는 경우 유용한 서비스의 컨테이너 이미지를 구성합니다.
5
기본 컨테이너를 시작하기 전에 사전 요구 사항을 설정하는 데 유용한 Pod의 init 컨테이너를 구성합니다.
참고

podTemplate 필드는 각 지원 서비스의 배포를 조정할 수 있는 유연성을 제공합니다. 표준 PodSpec API를 따르므로 이러한 필드에 동일한 API 검증 규칙이 적용됩니다.

4.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 Toggle word wrap

1
지원 서비스를 관리하는 이미 설치된 SonataFlowPlatform CR의 이름을 지정합니다.
2
지원 서비스를 관리하는 SonataFlowPlatform CR의 네임스페이스를 지정합니다.
참고

SonataFlowPlatform.spec.services 에서 해당 네임스페이스를 구성하여 모든 네임스페이스에서 이러한 클러스터 전체 서비스를 덮어쓸 수 있습니다.

5장. 워크플로우 지속성 관리

관계형 데이터베이스에 지속성을 사용하고 워크플로우 컨텍스트를 저장하도록 SonataFlow 인스턴스를 구성할 수 있습니다.

기본적으로 Kubernetes Pod는 상태 비저장입니다. 이 동작은 Pod를 다시 시작할 때마다 애플리케이션 상태를 유지해야 하는 워크로드에 문제가 발생할 수 있습니다. OpenShift Serverless Logic의 경우 기본적으로 Pod를 다시 시작하면 워크플로우 컨텍스트가 손실됩니다.

이러한 시나리오에서 워크플로우 복구를 보장하려면 워크플로우 런타임 지속성을 구성해야 합니다. SonataFlowPlatform CR(사용자 정의 리소스) 또는 SonataFlow CR을 사용하여 이 구성을 제공합니다. 구성 범위는 사용하는 리소스에 따라 다릅니다.

5.1. SonataFlowPlatform CR을 사용하여 지속성 구성

SonataFlowPlatform CR(사용자 정의 리소스)은 네임스페이스 수준에서 지속성 구성을 활성화합니다. 이 접근 방식은 네임스페이스에 배포된 모든 워크플로우에 자동으로 지속성 설정을 적용합니다. 특히 네임스페이스의 여러 워크플로우가 동일한 애플리케이션에 속하는 경우 리소스 구성을 단순화합니다. 이 구성은 기본적으로 적용되지만 네임스페이스의 개별 워크플로우는 SonataFlow CR을 사용하여 재정의할 수 있습니다.

OpenShift Serverless Logic Operator는 이 구성을 사용하여 지원 서비스에 대한 지속성을 설정합니다.

참고

지속성 구성은 워크플로우 배포 시에만 적용됩니다. SonataFlowPlatform CR에 대한 변경 사항은 이미 배포된 워크플로우에는 영향을 미치지 않습니다.

프로세스

  1. SonataFlowPlatform CR을 정의합니다.
  2. SonataFlowPlatform CR 사양 아래의 지속성 필드에 지속성 설정을 지정합니다.

    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 Toggle word wrap
    1
    PostgreSQL 데이터베이스에 연결하는 Kubernetes 서비스의 이름입니다.
    2
    선택사항: PostgreSQL 서비스의 네임스페이스입니다. 기본값은 SonataFlowPlatform 의 네임스페이스입니다.
    3
    워크플로 데이터를 저장하기 위한 PostgreSQL 데이터베이스의 이름입니다.
    4
    선택 사항: PostgreSQL 서비스에 연결할 포트 번호입니다. 기본값은 5432 입니다.
    5
    데이터베이스 인증 정보가 포함된 Kubernetes 시크릿의 이름입니다.
    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 Toggle word wrap

이 지속성 구성이 있는 경우 OpenShift Serverless Logic Operator는 미리 보기 또는 gitops 프로필을 사용하여 이 네임스페이스에 배포된 모든 워크플로우를 구성하여 관련 JDBC 연결 매개변수를 환경 변수로 삽입하여 PostgreSQL 데이터베이스와 연결합니다.

참고

PostgreSQL은 현재 지속성을 위해 지원되는 유일한 데이터베이스입니다.

프리뷰 프로필을 사용하는 SonataFlow CR 배포의 경우 OpenShift Serverless Logic 빌드 시스템에는 지속성 활성화에 필요한 특정 Quarkus 확장 기능이 자동으로 포함됩니다. 이렇게 하면 지속성 메커니즘과의 호환성이 보장되어 워크플로우 배포 프로세스가 간소화됩니다.

5.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 Toggle word wrap
1
PostgreSQL 데이터베이스 서버에 연결하는 Kubernetes 서비스의 이름입니다.
2
선택사항: PostgreSQL 서비스가 포함된 네임스페이스입니다. 기본값은 workflow 네임스페이스입니다.
3
워크플로우 데이터가 저장되는 PostgreSQL 데이터베이스의 이름입니다.
4
선택 사항: 워크플로우 데이터에 대한 데이터베이스 스키마의 이름입니다. 기본값은 워크플로우 이름입니다.
5
선택 사항: PostgreSQL 서비스에 연결하기 위한 포트입니다. 기본값은 5432 입니다.
6
데이터베이스 인증 정보가 포함된 Kubernetes 시크릿의 이름입니다.
7
데이터베이스 사용자 이름을 포함하는 Secret 오브젝트의 키입니다.
8
데이터베이스 암호가 포함된 Secret 오브젝트의 키입니다.

이 구성은 OpenShift Serverless Logic Operator에 배포 시 지정된 PostgreSQL 데이터베이스 서버에 워크플로우가 연결되어야 함을 알려줍니다. OpenShift Serverless Logic Operator는 관련 JDBC 연결 매개변수를 워크플로우 컨테이너에 환경 변수로 추가합니다.

참고

PostgreSQL은 현재 지속성을 위해 지원되는 유일한 데이터베이스입니다.

프리뷰 프로필을 사용하는 SonataFlow CR 배포의 경우 OpenShift Serverless Logic 빌드 시스템에는 지속성을 자동으로 활성화하는 데 필요한 Quarkus 확장 기능이 포함되어 있습니다.

5.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의 지속성 설정을 상속하지 않습니다.

5.4. 프로필별 지속성 요구 사항

SonataFlowPlatform CR(사용자 정의 리소스) 및 SonataFlow CR 모두에 제공된 지속성 구성은 프리뷰gitops 프로필에 동일하게 적용됩니다. 그러나 이 프로필은 이를 완전히 무시하므로 dev 프로필과 함께 이러한 구성을 사용하지 않아야 합니다.

프리뷰gitops 프로필의 주요 차이점은 빌드 프로세스에 있습니다.

gitops 프로필을 사용하는 경우 빌드 프로세스 중에 다음 Quarkus 확장이 워크플로우 이미지에 포함되어 있는지 확인합니다.

Expand
groupIdartifactIdversion

io.quarkus

Quarkus-agroal

3.8.6.redhat-00004

io.quarkus

quarkus-jdbc-postgresql

3.8.6.redhat-00004

org.kie

kie-addons-quarkus-persistence-jdbc

9.102.0.redhat-00005

registry.redhat.io/openshift-serverless-1/logic-swf-builder-rhel8:1.35.0 을 사용하여 이미지를 생성하는 경우 다음 빌드 인수를 전달하여 이러한 확장을 포함할 수 있습니다.

$ QUARKUS_EXTENSIONS=io.quarkus:quarkus-agroal:3.8.6.redhat-00004,io.quarkus:quarkus-jdbc-postgresql:3.8.6.redhat-00004,org.kie:kie-addons-quarkus-persistence-jdbc:9.102.0.redhat-00005
Copy to Clipboard Toggle word wrap

5.5. 데이터베이스 스키마 초기화

PostgreSQL 지속성과 함께 SonataFlow 를 사용하는 경우 Flyway를 활성화하거나 DDL(Data Definition Language) 스크립트를 사용하여 데이터베이스 스키마를 수동으로 적용하여 데이터베이스 스키마를 초기화할 수 있습니다.

Flyway는 kie-addons-quarkus-flyway 런타임 모듈에서 관리하며 기본적으로 비활성화되어 있습니다. Flyway를 활성화하려면 다음 방법 중 하나를 사용하여 이를 구성해야 합니다.

5.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 Toggle word wrap

5.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 Toggle word wrap

5.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 Toggle word wrap

5.5.4. DDL 스크립트를 사용하여 수동 데이터베이스 초기화

수동 초기화를 선호하는 경우 kie.flyway.enabled 속성이 구성되지 않았거나 false 로 명시적으로 설정되어 있는지 확인하여 Flyway를 비활성화해야 합니다.

  • 기본적으로 각 워크플로우는 워크플로우 이름과 동일한 스키마 이름을 사용합니다. 각 워크플로우에 스키마 초기화를 수동으로 적용해야 합니다.
  • SonataFlow CR(사용자 정의 리소스) 지속성 구성을 사용하는 경우 사용자 정의 스키마 이름을 지정할 수 있습니다.

프로세스

  1. kogito-ddl-9.102.0.redhat-00005-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 버전 관리와 관련이 없습니다.

6장. 워크플로우 이벤트 시스템

SonataFlow 워크플로우에 대한 이벤트 시스템을 설정할 수 있습니다.

OpenShift Serverless Logic 설치에서는 다음 유형의 이벤트가 생성됩니다.

  • 워크플로우 비즈니스 논리와 관련된 발신 및 수신 이벤트입니다.
  • 워크플로에서 데이터 인덱스 및 작업 서비스로 전송된 이벤트입니다.
  • 작업 서비스에서 데이터 인덱스 서비스로 전송된 이벤트입니다.

OpenShift Serverless Logic Operator는 Knative Eventing 시스템을 활용하여 이러한 서비스 간의 모든 이벤트 통신을 관리하여 효율적이고 안정적인 이벤트 처리를 보장합니다.

6.1. 플랫폼 범위 이벤트 시스템 구성

플랫폼 범위 이벤트 시스템을 구성하려면 SonataFlowPlatform CR(사용자 정의 리소스)에서 spec.eventing.broker.ref 필드를 사용하여 Knative Eventing 브로커를 참조할 수 있습니다.

이 구성은 OpenShift Serverless Logic Operator가 미리 보기 또는 gitops 프로필을 사용하여 지정된 네임스페이스에 배포된 모든 워크플로우를 자동으로 연결하여 정의된 브로커를 통해 이벤트를 생성 및 사용하도록 지시합니다.

사용자 정의 이벤트 구성없이 네임스페이스에 배포된 지원 서비스도 이 브로커에 연결됩니다.

참고

프로덕션 환경에서는 확장성 및 안정성 향상을 위해 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 Toggle word wrap
1
Knative Eventing Broker 이름을 지정합니다.
2
선택 사항: Knative Eventing 브로커의 네임스페이스를 지정합니다. 값을 분리하지 않으면 매개변수의 기본값은 SonataFlowPlatform CR의 네임스페이스입니다. SonataFlowPlatform 과 동일한 네임스페이스에 브로커를 생성하는 것이 좋습니다.

6.2. 워크플로우 범위 이벤트 시스템 구성

워크플로우 범위의 이벤트 시스템 구성을 사용하면 특정 워크플로우에서 생성 및 사용하는 이벤트를 세부적으로 사용자 지정할 수 있습니다. SonataFlow CR에서 spec.sink.refspec.sources[] 필드를 사용하여 발신 및 수신 이벤트를 구성할 수 있습니다.

6.2.1. 발신 이벤트 시스템 구성

발신 이벤트를 구성하려면 SonataFlow CR에서 spec.sink.ref 필드를 사용할 수 있습니다. 이 구성을 사용하면 워크플로우에서 시스템 이벤트 및 워크플로우 비즈니스 이벤트를 포함하여 지정된 Knative Eventing 브로커를 사용하여 이벤트를 생성할 수 있습니다.

다음 예제는 워크플로우 범위 발신 이벤트 시스템에 대해 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 Toggle word wrap
1
SonataFlow 시스템 이벤트를 포함하여 워크플로우에서 생성한 모든 이벤트에 사용할 Knative Eventing 브로커의 이름입니다.
2
Knative Eventing 브로커의 네임스페이스를 정의합니다. 값을 지정하지 않으면 매개변수의 기본값은 SonataFlow 네임스페이스입니다. SonataFlow 와 동일한 네임스페이스에 브로커를 생성하는 것이 좋습니다.
3
SonataFlow CR의 흐름 정의 필드입니다.
4
SonataFlow CR의 이벤트 정의 필드입니다.
5
발신 이벤트 outEvent1 정의의 예.
6
outEvent1 발신 이벤트의 이벤트 유형입니다.

6.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 Toggle word wrap
1
지정된 Knative Eventing 브로커를 사용하여 in-event-type1 유형의 이벤트를 사용하도록 워크플로우를 구성합니다.
2
이 워크플로우로 전송된 type in-event-type1 유형의 이벤트 사용에 사용할 Knative Eventing 브로커의 이름입니다.
3
선택 사항: 값을 지정하지 않으면 매개변수의 기본값은 SonataFlow 네임스페이스입니다. SonataFlow 워크플로우와 동일한 네임스페이스에 브로커를 생성하는 것이 좋습니다.
4
지정된 Knative Eventing 브로커를 사용하여 in-event-type2 유형의 이벤트를 사용하도록 워크플로우를 구성합니다.
5
이 워크플로우로 전송되는 type in-event-type2 의 이벤트 사용에 사용할 Knative Eventing 브로커의 이름입니다.
6
선택 사항: 값을 지정하지 않으면 매개변수의 기본값은 SonataFlow 네임스페이스입니다. SonataFlow 워크플로우와 동일한 네임스페이스에 브로커를 생성하는 것이 좋습니다.
7
SonataFlow CR의 흐름 정의 필드입니다.
8
SonataFlow CR의 이벤트 정의 필드입니다.
9
이벤트 inEvent1 정의의 예.
10
들어오는 이벤트 inEvent1 의 이벤트 유형입니다. 해당 spec.sources[] 항목이 있는 워크플로우 이벤트의 링크는 이벤트 유형 이름 in-event-type1 을 사용하는 것입니다.
11
이벤트 inEvent2 정의의 예.
12
들어오는 이벤트 inEvent2 의 이벤트 유형입니다. 해당 spec.sources[] 항목이 있는 워크플로우 이벤트 링크는 이벤트 유형 이름 in-event-type2를 사용하여 생성됩니다.

6.3. 클러스터 범위 이벤트 시스템 구성

SonataFlowClusterPlatform 설정에서 워크플로우는 연결된 SonataFlowPlatform CR에 지정된 브로커에 자동으로 연결됩니다. 이 링크는 Eventing 시스템 구성 우선순위 규칙을 따릅니다.

적절한 통합을 보장하기 위해 SonataFlowPlatform CR에서 참조하는 BrokerSonataFlowClusterPlatform CR에서 구성할 수 있습니다.

다음 예제는 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 Toggle word wrap
참고

SonataFlowClusterPlatform CR은 이미 배포된 모든 SonataFlowPlatform CR을 참조할 수 있습니다.

6.4. Eventing 시스템 구성 우선순위 규칙

OpenShift Serverless Logic Operator는 정의된 우선순위 순서를 따라 워크플로우의 이벤트 시스템 구성을 결정합니다.

Eventing 시스템 구성 우선순위 규칙은 다음과 같습니다.

  1. 워크플로우 범위 발신 또는 들어오는 이벤트 시스템 구성을 사용하여 워크플로우에 정의된 이벤트 시스템이 있는 경우, 구성 선택이 다른 구성보다 우선하여 워크플로에 적용됩니다.
  2. 워크플로우에 플랫폼 범위 이벤트 시스템이 포함된 SonataFlowPlatform CR에 플랫폼 범위 이벤트 시스템이 구성된 경우 이 구성이 다음 단계에 적용됩니다.
  3. 현재 클러스터가 클러스터 범위 이벤트 시스템으로 구성된 경우 워크플로우 범위 또는 플랫폼 범위 구성이 없는 경우 적용됩니다.
  4. 위의 구성이 정의되지 않은 경우 다음 정보를 검토합니다.

    • 워크플로우는 직접 HTTP 호출을 사용하여 지원 서비스에 SonataFlow 시스템 이벤트를 제공합니다.
    • 워크플로우 서비스 루트 경로 / 에서 HTTP POST 호출에 의해 들어오는 이벤트를 사용합니다.
    • 워크플로우 비즈니스 이벤트를 생성하도록 이벤트 시스템이 구성되지 않았습니다. 이러한 이벤트를 생성하려고 하면 실패가 발생할 수 있습니다.

6.5. 이벤트 시스템에 워크플로우 연결

OpenShift Serverless Logic Operator는 Knative Eventing, SinkBindings 및 트리거를 사용하여 이벤트 시스템과 워크플로우를 연결합니다. 이러한 오브젝트는 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 Toggle word wrap
1
example-broker 오브젝트는 Data Index, Jobs Service 및 example-workflow 워크플로에서 사용됩니다.
2
데이터 인덱스는 임시 구성으로 배포됩니다.
3
작업 서비스는 임시 구성으로 배포됩니다.

example-broker 오브젝트는 Kafka 클래스 Broker이며 해당 구성은 kafka-broker-config 구성 맵에 정의되어 있습니다.

다음 예제는 SonataFlowPlatform과 함께 사용할 Kafka Knative 브로커를 구성하는 방법을 보여줍니다.

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 Toggle word wrap
1
Kafka 클래스는 example-broker 오브젝트를 생성하는 데 사용됩니다.

다음 예제에서는 example-workflow 가 이벤트 프로덕션 및 소비를 위해 example-brokerexample- 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 Toggle word wrap
1
example-workflow 발신 이벤트는 example-workflow-sb 라는 SinkBinding 을 사용하여 생성됩니다.
2
유형 in-event-type1 의 이벤트는 example-workflow-inevent1-b40c067c-595b-4913-81a4-c8efa980bc11 트리거를 사용하여 사용됩니다.
3
유형 in-event-type2 의 이벤트는 example-workflow-inevent2-b40c067c-595b-4913-81a4-c8efa980bc11 트리거를 사용하여 사용됩니다.

다음 명령을 사용하여 example-workflow-sb 라는 자동으로 생성된 SinkBinding 을 나열할 수 있습니다.

$ oc get sinkbindings -n example-namespace
Copy to Clipboard Toggle word wrap

출력 예

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

다음 명령을 사용하여 이벤트 사용을 위해 자동으로 생성된 트리거를 나열할 수 있습니다.

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

출력 예

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 Toggle word wrap

7장. 업그레이드 관리

이 섹션에서는 OpenShift Serverless Logic Operator를 버전 1.34.0에서 1.35.0으로 업그레이드하는 단계별 지침을 제공합니다. 업그레이드 프로세스에는 기존 워크플로우 및 서비스를 준비하고 Operator를 업데이트하고 업그레이드 후 워크플로우를 복원해야 합니다.

참고

워크플로우 프로필마다 다른 업그레이드 단계가 필요합니다. 각 프로필에 대한 지침을 주의해서 따르십시오.

7.1.1. 업그레이드 준비

업그레이드 프로세스를 시작하기 전에 OpenShift Serverless Logic 환경을 준비해야 합니다. 이 섹션에서는 버전 1.34.0에서 1.35.0으로 업그레이드하는 데 필요한 단계를 간략하게 설명합니다.

준비 과정에는 다음이 포함됩니다.

  • 프로필에 따라 워크플로우 삭제 또는 스케일링.
  • 필요한 모든 데이터베이스 및 리소스를 백업합니다.
  • 모든 사용자 지정 구성의 레코드가 있는지 확인합니다.
  • 지속성을 사용하여 워크플로우에 필요한 데이터베이스 마이그레이션 스크립트 실행.

사전 요구 사항

  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.
  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • Operator 업그레이드를 위해 OpenShift 관리 콘솔에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
7.1.1.1. dev 프로필을 사용하여 워크플로우 삭제

Operator를 업그레이드하기 전에 dev 프로필로 실행 중인 워크플로우를 삭제하고 업그레이드가 완료된 후 다시 배포해야 합니다.

프로세스

  1. SonataFlow CRD(사용자 정의 리소스 정의), ConfigMaps 또는 기타 관련 사용자 정의 구성을 포함하여 필요한 모든 Kubernetes 리소스의 백업이 있는지 확인합니다.
  2. 다음 명령을 실행하여 워크플로우를 삭제합니다.

    $ oc delete -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard Toggle word wrap
7.1.1.2. 프리뷰 프로필을 사용하여 워크플로우 삭제 및 마이그레이션

Operator를 업그레이드하기 전에 Preview 프로필로 실행되는 워크플로우를 삭제하고 지속되는 데이터를 마이그레이션해야 합니다. 업그레이드가 완료되면 워크플로우를 재배포해야 합니다.

프로세스

  1. 지속성을 사용하는 경우 워크플로우 데이터베이스를 백업하고 백업에 데이터베이스 오브젝트와 테이블 데이터가 모두 포함되어 있는지 확인합니다.
  2. SonataFlow CRD, ConfigMaps 또는 기타 관련 사용자 정의 구성을 포함하여 필요한 모든 Kubernetes 리소스의 백업이 있는지 확인합니다.
  3. 다음 명령을 실행하여 워크플로우를 삭제합니다.

    $ oc delete -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard Toggle word wrap
  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 Toggle word wrap
7.1.1.3. gitops 프로필을 사용하여 워크플로우 축소

Operator를 업그레이드하기 전에 gitops 프로필로 실행되는 워크플로우를 축소하고 업그레이드가 완료된 후 다시 확장해야 합니다.

프로세스

  1. 다음 예와 같이 my-workflow.yaml CRD를 수정하고 각 워크플로우를 0 으로 축소합니다.

    spec:
      podTemplate:
        replicas: 0
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 업데이트된 CRD를 적용합니다.

    $ oc apply -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard Toggle word wrap
  3. (선택 사항) 다음 명령을 실행하여 워크플로우를 0 으로 스케일링합니다.

    $ oc patch sonataflow <my-workflow> -n <target_namespace> --type=merge -p '{"spec": {"podTemplate": {"replicas": 0}}}'
    Copy to Clipboard Toggle word wrap
7.1.1.4. 데이터 인덱스 데이터베이스 백업

데이터 손실을 방지하기 위해 업그레이드하기 전에 Data Index 데이터베이스를 백업해야 합니다.

프로세스

  • Data Index 데이터베이스의 전체 백업을 수행하여 다음을 확인합니다.

    • 백업에는 테이블 데이터뿐만 아니라 모든 데이터베이스 개체가 포함됩니다.
    • 백업은 안전한 위치에 저장됩니다.
7.1.1.5. 작업 서비스 데이터베이스 백업

작업 스케줄링 데이터를 유지하려면 업그레이드하기 전에 작업 서비스 데이터베이스를 백업해야 합니다.

프로세스

  • 작업 서비스 데이터베이스의 전체 백업을 가져와서 다음을 확인합니다.

    • 백업에는 테이블 데이터뿐만 아니라 모든 데이터베이스 개체가 포함됩니다.
    • 백업은 안전한 위치에 저장됩니다.

7.1.2. OpenShift Serverless Logic Operator 업그레이드

OpenShift Serverless Logic Operator (OSL) 버전 1.34.0에서 1.35.0으로 전환하려면 Red Hat OpenShift Serverless 웹 콘솔을 사용하여 OSL을 업그레이드해야 합니다. 이 업그레이드는 최신 기능과의 호환성과 워크플로우의 적절한 기능을 보장합니다.

사전 요구 사항

  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.
  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • Operator 업그레이드를 위해 OpenShift 관리 콘솔에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.

프로세스

  1. 웹 콘솔에서 Operator → OperatorHub 설치된 Operator 페이지로 이동합니다.
  2. 설치된 네임스페이스에서 openshift-serverless-logic 네임스페이스 를 선택합니다.
  3. 설치된 Operator 목록에서 OpenShift Serverless Logic Operator를 찾아 클릭합니다.
  4. Operator 세부 정보 페이지에서 서브스크립션 탭을 클릭합니다. 서브스크립션 편집을 클릭합니다.
  5. Upgrade 상태에서 사용 가능한 업그레이드 링크를 클릭합니다.
  6. 프리뷰 설치 계획승인을 클릭하여 업데이트를 시작합니다.
  7. 업그레이드 프로세스를 모니터링하려면 다음 명령을 실행합니다.

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

    예상 출력

    $ logic-operator-rhel8.v1.35.0
    Copy to Clipboard Toggle word wrap

검증

  1. 새 Operator 버전이 설치되었는지 확인하려면 다음 명령을 실행합니다.

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

    예상 출력

    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 Toggle word wrap

7.1.3. 업그레이드 완료

OpenShift Serverless Logic Operator를 버전 1.35.0으로 업그레이드한 후 워크플로우를 복원하거나 확장하고 이전 서비스를 정리하여 업그레이드 프로세스를 완료해야 합니다. 이렇게 하면 시스템이 새 버전에서 완전히 실행되고 모든 종속 구성 요소가 올바르게 구성됩니다.

워크플로우 및 서비스의 프로필에 따라 아래 적절한 단계를 따르십시오.

사전 요구 사항

  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.
  • OpenShift Serverless Logic Operator가 클러스터에 설치되어 있어야 합니다.
  • OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한으로 OpenShift Serverless Logic 프로젝트에 액세스할 수 있습니다.
  • Operator 업그레이드를 위해 OpenShift 관리 콘솔에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
7.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 Toggle word wrap
  2. 이전 데이터 인덱스 ReplicaSet(버전 1.34.0)을 식별하고 삭제합니다.

    $ oc delete replicaset <old_replicaset_name> -n <target_namespace>
    Copy to Clipboard Toggle word wrap
7.1.3.2. 작업 서비스 업그레이드 완료

버전 1.35.0 구성 요소의 배포를 트리거하려면 이전 버전에서 작업 서비스 구성 요소를 수동으로 정리해야 합니다.

프로세스

  1. 다음 명령을 실행하여 이전 작업 서비스 배포를 삭제합니다.

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

    이렇게 하면 이전 Pod 및 ReplicaSet의 자동 정리가 트리거되고 버전 1.35.0을 사용하여 새 배포를 시작합니다.

7.1.3.3. dev 프로필을 사용하여 워크플로우 재배포

업그레이드 후 dev 프로필 및 관련 Kubernetes 리소스를 사용하는 워크플로우를 재배포해야 합니다.

프로세스

  1. SonataFlow CRD, ConfigMaps 또는 기타 관련 사용자 정의 구성을 포함하여 필요한 모든 리소스가 복원되었는지 확인합니다.
  2. 다음 명령을 실행하여 워크플로우를 재배포합니다.

    $ oc apply -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard Toggle word wrap
7.1.3.4. 프리뷰 프로필을 사용하여 워크플로우 복원

프리뷰 프로필이 있는 워크플로우에는 재배포되기 전에 추가 구성 단계가 필요합니다.

프로세스

  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 Toggle word wrap
  2. SonataFlow CRD, ConfigMaps 또는 기타 관련 사용자 정의 구성을 포함하여 필요한 모든 리소스가 다시 생성되었는지 확인합니다.
  3. 다음 명령을 실행하여 워크플로우를 재배포합니다.

    $ oc apply -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard Toggle word wrap
7.1.3.5. gitops 프로필을 사용하여 워크플로우 확장

이전에 축소된 gitops 프로필이 있는 워크플로우는 계속 작동하도록 확장해야 합니다.

프로세스

  1. my-workflow.yaml CRD를 수정하고 다음 예와 같이 업그레이드하기 전에 각 워크플로우를 하나로 확장합니다.

    spec:
      podTemplate:
        replicas: 1
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 업데이트된 CRD를 적용합니다.

    $ oc apply -f <my-workflow.yaml> -n <target_namespace>
    Copy to Clipboard Toggle word wrap
  3. (선택 사항) 다음 명령을 실행하여 워크플로우를 1 로 다시 스케일링합니다.

    $ oc patch sonataflow <my-workflow> -n <target_namespace> --type=merge -p '{"spec": {"podTemplate": {"replicas": 1}}}'
    Copy to Clipboard Toggle word wrap
7.1.3.6. 업그레이드 확인

워크플로우와 서비스를 복원한 후에는 업그레이드가 성공했으며 모든 구성 요소가 예상대로 작동하는지 확인하는 것이 중요합니다.

프로세스

  1. 다음 명령을 입력하여 모든 워크플로우 및 서비스가 실행 중인지 확인합니다.

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

    워크플로우, 데이터 인덱스 및 작업 서비스와 관련된 모든 Pod가 Running 또는 Completed 상태인지 확인합니다.

  2. 다음 명령을 입력하여 OpenShift Serverless Logic Operator가 올바르게 실행 중인지 확인합니다.

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

    예상 출력

    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 Toggle word wrap

  3. 다음 명령을 입력하여 Operator 로그에 오류가 있는지 확인합니다.

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

법적 공지

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

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동