태스크

태스크 정보

앱(장기 실행 프로세스)과 달리 태스크는 일정 시간 동안 실행된 후 중단됩니다. 태스크는 상위 앱의 구성에 따라 자체 컨테이너에서 실행되며 제한된 리소스(예: CPU/메모리/이페머럴 디스크 스토리지)를 사용하도록 구성할 수 있습니다.

태스크 사용 사례

  • 데이터베이스 마이그레이션
  • 일괄 작업(예약됨/예약되지 않음) 실행
  • 이메일 보내기
  • 데이터 변환(ETL)
  • 데이터 처리(업로드/백업/다운로드)

태스크 작동 방식

태스크는 비동기식으로 실행되며 상위 앱 또는 동일한 앱에서 실행되는 다른 태스크와 독립적으로 실행됩니다. 태스크를 실행하기 위해 만든 앱에는 생성되거나 할당된 경로가 없으며 실행 수명 주기를 건너뜁니다. 소스 코드 업로드빌드 수명 주기는 계속 작동하며 앱을 푸시한 후 태스크를 실행하는 데 사용되는 컨테이너 이미지에 결과가 나타납니다(애플리케이션 배포 시 앱 수명 주기 참조).

태스크의 수명 주기는 다음과 같습니다.

  1. kf push APP_NAME --task 명령어를 사용하여 태스크를 실행하기 위해 앱을 푸시합니다.
  2. kf run-task APP_NAME 명령어를 사용하여 앱에서 태스크를 실행합니다. 태스크는 앱에 결합된 환경 변수, 서비스 결합, 리소스 할당, 시작 명령어, 보안 그룹을 상속합니다.
  3. Kf는 앱의 값과 run-task 명령어의 매개변수를 사용하여 Tekton PipelineRun을 만듭니다.
  4. Tekton PipelineRun은 앱과 태스크의 구성을 기반으로 컨테이너를 시작하는 Kubernetes Pod를 만듭니다.
  5. 태스크 실행이 중지되고(태스크 종료 또는 수동 종료) 기본 Pod가 중지되거나 종료됩니다. 중지된 태스크의 Pod가 보존되므로 kf logs APP_NAME --task 명령어를 통해 태스크 로그에 액세스할 수 있습니다.
  6. 태스크가 중지하기 전에 종료하면 Tekton PipelineRun이 취소되며(PipelineRun 취소 참조) 로그와 함께 기본 Pod가 삭제됩니다. 종료된 태스크의 로그는 구성된 경우 클러스터 수준 로깅 스트림으로 전달됩니다(예: Stackdriver, Fluentd).
  7. 앱에서 실행되는 태스크 수가 500개를 초과하면 오래된 태스크가 자동으로 삭제됩니다.

태스크 보관 정책

태스크는 Kubernetes 클러스터에서 커스텀 리소스로 생성되므로 기본 etcd 데이터베이스의 공간을 소진하지 않는 것이 중요합니다. 기본적으로 Kf는 각 앱마다 최신 500개의 태스크만 유지합니다. 태스크 수가 500개에 도달하면 가장 오래된 태스크(기본 Pod 및 로그 포함)가 자동으로 삭제됩니다.

태스크 로깅 및 실행 기록

STDOUT 또는 STDERR에 태스크가 출력하는 모든 데이터 또는 메시지는 kf logs APP_NAME --task 명령어를 사용하여 사용할 수 있습니다. 클러스터 수준 로깅 메커니즘(예: Stackdriver, Fluentd)은 구성된 로깅 대상에 태스크 로그를 제공합니다.

태스크 예약

위에서 설명한 것처럼 kf run-task APP_NAME 명령어를 사용하면 태스크를 비동기적으로 실행할 수 있습니다. 또는 먼저 kf create-job 명령어를 사용하여 작업을 만든 후 kf schedule-job JOB_NAME 명령어로 예약하여 실행할 태스크를 예약할 수 있습니다. 지정된 unix-cron 일정에 따라 태스크가 자동으로 실행되도록 작업을 예약할 수 있습니다.

태스크 예약 방법

태스크를 실행할 작업을 만들고 예약합니다. 작업은 실행할 태스크를 설명하고 태스크 생성을 자동으로 관리합니다.

이전에 실행한 태스크가 여전히 실행 중이더라도 일정에 따라 태스크가 생성됩니다. 어떤 이유로든 실행이 누락될 경우 시스템이 복구되면 가장 최근에 누락된 실행만 실행됩니다.

작업을 삭제하면 연결된 모든 태스크가 삭제됩니다. 연결된 태스크가 아직 진행 중이라면 완료될 때까지 실행되지 않고 강제로 삭제됩니다.

예약된 작업으로 생성된 태스크에는 태스크 보관 정책이 그대로 적용됩니다.

PCF Scheduler와의 차이점

PCF Scheduler는 단일 작업에 여러 일정을 허용하지만 Kf는 작업당 단일 일정만 지원합니다. 일정당 하나씩 여러 개의 작업을 만들면 PCF Scheduler의 동작을 복제할 수 있습니다.