3.4. JobSink


이벤트 처리는 일반적으로 몇 분과 같은 짧은 기간 내에 완료됩니다. 이렇게 하면 HTTP 연결이 열려 있고 서비스가 조기에 축소되지 않습니다.

장기 실행 연결을 유지 관리하면 오류가 발생할 위험이 발생하여 다시 시작되고 반복적인 요청 재시도가 발생할 수 있습니다.

JobSink를 사용하여 전체 Kubernetes 배치/v1 작업 리소스 및 기능 및 Kubernetes 작업 큐레이션 시스템을 사용하여 장기 실행 비동기 작업 및 작업을 지원할 수 있습니다.

3.4.1. JobSink 사용

이벤트가 Job Sink 로 전송되면 Eventing에서 작업을 생성하고 수신된 이벤트를 /etc/jobsink-event/event 에서 JSON 파일로 마운트합니다.

프로세스

  1. JobSink 오브젝트 정의를 YAML 파일로 생성합니다.

    JobSink YAML

    apiVersion: sinks.knative.dev/v1alpha1
    kind: JobSink
    metadata:
      name: job-sink-logger
    spec:
      job:
        spec:
          completions: 1
          parallelism: 1
          template:
            spec:
              restartPolicy: Never
              containers:
                - name: main
                  image: docker.io/library/bash:5
                  command: [ "cat" ]
                  args:
                    - "/etc/jobsink-event/event"
    Copy to Clipboard Toggle word wrap

  2. JobSink YAML 파일을 적용합니다.

    $ oc apply -f <job-sink-file.yaml>
    Copy to Clipboard Toggle word wrap
  3. JobSink 가 준비되었는지 확인합니다.

    $ oc get jobsinks.sinks.knative.dev
    Copy to Clipboard Toggle word wrap

    출력 예:

    NAME              URL                                                                          AGE   READY   REASON
    job-sink-logger   http://job-sink.knative-eventing.svc.cluster.local/default/job-sink-logger   5s    True
    Copy to Clipboard Toggle word wrap
  4. JobSink 를 트리거합니다. JobSink 는 이벤트 소스 또는 트리거에 의해 트리거될 수 있습니다.

    $ oc run curl --image=curlimages/curl --rm=true --restart=Never -ti -- -X POST -v \
       -H "content-type: application/json"  \
       -H "ce-specversion: 1.0" \
       -H "ce-source: my/curl/command" \
       -H "ce-type: my.demo.event" \
       -H "ce-id: 123" \
       -d '{"details":"JobSinkDemo"}' \
       http://job-sink.knative-eventing.svc.cluster.local/default/job-sink-logger
    Copy to Clipboard Toggle word wrap
  5. 작업이 생성되었는지 확인합니다.

    $ oc logs job-sink-loggerszoi6-dqbtq
    Copy to Clipboard Toggle word wrap

    출력 예:

    {"specversion":"1.0","id":"123","source":"my/curl/command","type":"my.demo.event","datacontenttype":"application/json","data":{"details":"JobSinkDemo"}}
    Copy to Clipboard Toggle word wrap
참고

JobSink는 수신하는 각 고유 이벤트에 대한 작업을 생성합니다.

이벤트는 소스 및 ID 특성의 조합으로 고유하게 식별됩니다.

해당 이벤트의 작업이 이미 존재하는 동안 동일한 속성이 있는 이벤트가 수신되면 다른 작업이 생성되지 않습니다.

3.4.2. 작업 이벤트 파일 읽기

프로세스

  • 이벤트 파일을 읽고 CloudEvents JSON deserializer를 사용하여 역직렬화합니다. 다음 예제에서는 CloudEvents Go SDK를 사용하여 이벤트를 읽고 처리하는 방법을 보여줍니다.

    package mytask
    
    import (
        "encoding/json"
        "fmt"
        "os"
    
        cloudevents "github.com/cloudevents/sdk-go/v2"
    )
    
    func handleEvent() error {
        eventBytes, err := os.ReadFile("/etc/jobsink-event/event")
        if err != nil {
            return err
        }
    
        event := &cloudevents.Event{}
        if err := json.Unmarshal(eventBytes, event); err != nil {
            return err
        }
    
        fmt.Println(event)
    
        return nil
    }
    Copy to Clipboard Toggle word wrap

3.4.3. 사용자 정의 이벤트 파일 마운트 경로 설정

JobSink 정의에 사용자 정의 이벤트 파일 마운트 경로를 설정할 수 있습니다.

프로세스

  • 컨테이너 정의 내부에 volumeMounts 구성을 포함하고 필요에 따라 설정합니다.

    apiVersion: sinks.knative.dev/v1alpha1
    kind: JobSink
    metadata:
      name: job-sink-custom-mount-path
    spec:
      job:
        spec:
          completions: 1
          parallelism: 1
          template:
            spec:
              restartPolicy: Never
              containers:
                - name: main
                  image: docker.io/library/bash:5
                  command: [ "bash" ]
                  args:
                    - -c
                    - echo "Hello world!" && sleep 5
    
                  # The event will be available in a file at `/etc/custom-path/event`
                  volumeMounts:
                    - name: "jobsink-event"
                      mountPath: "/etc/custom-path"
                      readOnly: true
    Copy to Clipboard Toggle word wrap

3.4.4. 완료된 작업 정리

JobSink 정의에 ttlSecondsAfterFinished 값을 설정하여 완료된 작업을 정리할 수 있습니다. 예를 들어 값을 600 으로 설정하면 완료된 작업 600초(10분)가 완료된 후 제거됩니다.

프로세스

  • 정의에서 ttlSecondsAfterFinished 값을 필요한 양으로 설정합니다.

    ttlSecondsAfterFinished의 예: 600으로 설정

    apiVersion: sinks.knative.dev/v1alpha1
    kind: JobSink
    metadata:
      name: job-sink-example
    spec:
      job:
        spec:
          ttlSecondsAfterFinished: 600
    Copy to Clipboard Toggle word wrap

3.4.5. FailJob 작업 시뮬레이션

프로세스

  • JobSink 정의에 버그 시뮬레이션 명령을 포함하여 FailJob 작업을 트리거합니다.

    JobSink 실패 예

    apiVersion: sinks.knative.dev/v1alpha1
    kind: JobSink
    metadata:
      name: job-sink-failure
    spec:
      job:
        metadata:
          labels:
            my-label: my-value
        spec:
          completions: 12
          parallelism: 3
          template:
            spec:
              restartPolicy: Never
              containers:
                - name: main
                  image: docker.io/library/bash:5
                  command: [ "bash" ]        # example command simulating a bug which triggers the FailJob action
                  args:
                    - -c
                    - echo "Hello world!" && sleep 5 && exit 42
          backoffLimit: 6
          podFailurePolicy:
            rules:
              - action: FailJob
                onExitCodes:
                  containerName: main      # optional
                  operator: In             # one of: In, NotIn
                  values: [ 42 ]
              - action: Ignore             # one of: Ignore, FailJob, Count
                onPodConditions:
                  - type: DisruptionTarget   # indicates Pod disruption
    Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat