전공영역 공부 기록

argo workflow archive

악분 2022. 7. 10. 19:08
반응형

이 글은 영상으로도 만나 볼 수 있습니다.

영상: https://youtu.be/7l-SIyZ1H2U

 

1. archive란?

실행한 workflow를 영구적으로 저장하기 위한 저장소입니다. workflow를 실행하면 쿠버네티스 리소스로 남기 때문에, 쿠버네티스 클러스터 자원을 낭비할 수 있습니다. argo workflow는 낭비되는 자원을 줄이기 위해 RDMS(mysql 또는 postgresql)에 workflow을 저장하는 기능이 추가되었습니다. 이 저장소를 archive라고 합니다.

 

2. archive 기능 활성화

archive 기능을 사용하려면 별도 설정이 필요합니다. ②, ③은 configmap workflow-controller-configmap에 설정해야 합니다. 

① RDMS(mysql 또는 postgresql) 설치

② RDMS연동 설정

③ archive: true 설정

 

argo workflow quick-start.yaml파일을 보시면 설정 예제가 있으니 참고바랍니다.

출처: https://github.com/argoproj/argo-workflows/blob/master/manifests/quick-start-postgres.yaml#L1311

 

3. workflow 조회

quick-start로 argo workflow를 설치했더라면 argo namespace에 지금까지 실행한 workflow 목록이 보입니다.

 

이 목록은 argo 웹 UI에서 workflows메뉴 결과와 같습니다.

 

4. archive조회

archive는 DB에 직접 들어가서 조회할 수 있습니다. 감사하게도 직접 sql를 실행하지 않아도 웹 UI에서 조회할 수 있습니다. archive는 지금까지 실행했던 모든 workflow 목록이 조회됩니다.

 

5. workflows와 archive 차이점

실행한 workflow를 workflows와 archive에 모두 조회되는 것처럼 보입니다. 하지만, workflows에서는 모든 workflows가 보이지 않습니다.

 

[챕터 1]에서 말씀드린 것처럼 쿠버네티스 클러스터 자원 사용을 최소화하기 위해, workflow 리소스는 일정조건에 부합되면 삭제됩니다. 삭제된 workflow 리소스를 저장하기 위해 archive가 탄생하게 되었습니다. 결국은, workflow는 조건에 맞지 않아 삭제되지 않는 workflow만 보이고 archive가 전체 workflow가 보입니다.

 

6. workflow 삭제 조건

workflow는 TTL, POD GC와 retentionPolicy에 의해 삭제됩니다. 해당 내용은 공식문서(https://argoproj.github.io/argo-workflows/cost-optimisation/#limit-the-total-number-of-workflows-and-pods)에 자세히 설명되어 있습니다.

 

6.1 TTL

workflow의 생명주기를 설정하여 생명주기가 끝나면 workflow리소스를 삭제합니다. workflow가 종료되면 completed, error상태를 갖습니다. completed는 success, failed상태로 분리됩니다. 사용자는 completed, success, failed이 후에 몇초뒤에 workflow를 삭제할지 설정할 수 있습니다.

 

아래 예제는 공식 예제입니다. 이 예제를 실행 한 후, 약 5초뒤에 workflow리소스가 삭제됩니다. 실습영상은 제 유투브(https://youtu.be/7l-SIyZ1H2U?t=333)를 참고하시길 바랍니다.

# reference: https://github.com/argoproj/argo-workflows/blob/master/examples/gc-ttl.yaml

# This example shows the ability to automatically delete workflows after a specified time period
# after the workflow completes. The TTLStrategy sets the strategy for how long workflows that are
# successful, not successful, or completed should live.
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: gc-ttl-
spec:
  ttlStrategy:
    secondsAfterCompletion: 10 # Time to live after workflow is completed, replaces ttlSecondsAfterFinished
    secondsAfterSuccess: 5     # Time to live after workflow is successful
    secondsAfterFailure: 5     # Time to live after workflow fails
  entrypoint: whalesay
  templates:
  - name: whalesay
    container:
      image: docker/whalesay:latest
      command: [cowsay]
      args: ["hello world"]

 

6.2 POD GC

POD의 종료 상태를 기준으로 workflow를 삭제할지 말지 결정하는 정책입니다. 아래는 공식문서 예제입니다.

# reference: https://github.com/argoproj/argo-workflows/blob/master/examples/pod-gc-strategy.yaml

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: pod-gc-strategy-
spec:
  entrypoint: pod-gc-strategy

  podGC:
    # Pod GC strategy must be one of the following:
    # * OnPodCompletion - delete pods immediately when pod is completed (including errors/failures)
    # * OnPodSuccess - delete pods immediately when pod is successful
    # * OnWorkflowCompletion - delete pods when workflow is completed
    # * OnWorkflowSuccess - delete pods when workflow is successful
    strategy: OnPodSuccess

  templates:
  - name: pod-gc-strategy
    steps:
    - - name: fail
        template: fail
      - name: succeed
        template: succeed

  - name: fail
    container:
      image: alpine:3.7
      command: [sh, -c]
      args: ["exit 1"]

  - name: succeed
    container:
      image: alpine:3.7
      command: [sh, -c]
      args: ["exit 0"]

 

6.3 retentionpolicy

동일한 workflow의 갯수로 workflow리소스를 삭제하는 정책입니다. TTL로 workflow삭제 정책을 적용한다면, 짧은 시간안에 수많은 동일 workflow실행된다면, workflow리소스는 삭제되지 않습니다. 이 단점을 보완하기 위한 정책이지 않을 까 생각해봅니다.

 

quick-start로 argo workflow를 설치했다면 기본으로 retentionpolicy이 설정되어 있습니다. 동일한 workflow는 completed상태는 최대 10개, failed 3개, errored 3개만 workflow리소스를 유지합니다. 실습영상은 제 유투브(https://youtu.be/7l-SIyZ1H2U?t=499)를 참고하시길 바랍니다.

https://github.com/argoproj/argo-workflows/blob/master/manifests/quick-start-postgres.yaml#L1330

 

참고자료

1. archive 공식문서: https://argoproj.github.io/argo-workflows/workflow-archive/

2. quick-start.yaml github: https://github.com/argoproj/argo-workflows/blob/master/manifests/quick-start-postgres.yaml

공백

반응형