이 프로젝트는 100% 실험적입니다. 생산 및/또는 공유 환경에 컨트롤러를 설치하려고 시도하지 마십시오.
임시 작업자 컨트롤러의 목표는 작업자 버전 관리를 활용하면서 Kubernetes에서 작업자를 쉽게 실행할 수 있도록 하는 것입니다.
Temporal의 결정적 제약 조건은 워크플로 코드 변경 사항을 롤아웃하거나 롤백할 때 골치 아픈 문제를 일으킬 수 있습니다.
워크플로 결정론에 대한 전통적인 접근 방식은 버전 관리 확인 뒤에 새로운 동작을 제어하는 것입니다. 시간이 지남에 따라 이러한 검사는 기술적 부채의 원인이 될 수 있습니다. 코드베이스에서 안전하게 제거하는 것은 실행 중인 모든 워크플로를 쿼리하는 것과 관련된 신중한 프로세스이기 때문입니다.
작업자 버전 관리는 워크플로 실행이 특정 코드 개정을 실행하는 작업자에 고정되도록 하는 대체 접근 방식입니다. 이를 통해 워크플로 작성자는 코드에서 버전 확인을 생략하고 대신 작업자의 여러 버전을 병렬로 실행할 수 있으며 Temporal을 사용하여 워크플로 실행을 호환 가능한 코드를 실행하는 작업자에게 고정된 상태로 유지할 수 있습니다.
이 프로젝트의 목적은 활성 워크플로가 있는 작업자 버전 추적, 버전이 지정된 작업자 배포의 수명 주기 관리, 배포 후 기본 버전 업데이트를 위한 Temporal API 호출과 관련된 기록을 단순화하는 자동화를 제공하는 것입니다.
새로운 작업자 버전 등록
버전이 지정된 작업자 배포 리소스 생성
연결할 수 없는 작업자 배포 삭제
새 작업자 버전의 수동, 블루/그린 및 프로그레시브 출시
작업자 배포 자동 확장
호환되는 작업자 버전으로 자동 롤오버
새 작업자 버전의 카나리아 분석
이전 버전의 워크플로에 대한 시간 초과 후 선택적 취소
이전 버전의 워크플로에 ContinueAsNew
신호 전달
이 컨트롤러와 호환되려면 다음 표준 환경 변수를 사용하여 작업자를 구성해야 합니다.
WORKER_BUILD_ID
TEMPORAL_HOST_PORT
TEMPORAL_TASK_QUEUE
TEMPORAL_NAMESPACE
이들 각각은 포드 템플릿의 환경에 자동으로 설정되며 TemporalWorker
사양 외부에서 수동으로 지정할 필요가 없습니다.
모든 TemporalWorker
리소스는 하나 이상의 표준 Deployment
리소스를 관리합니다. 각 배포는 해당 버전에 고정된 작업에 대해 Temporal을 폴링하는 Pod를 관리합니다.
흐름도 TD
wd[임시작업자]
하위 그래프 "최신/기본 작업자 버전"
d5["배포 v5"]
rs5["ReplicaSet v5"]
p5a["Pod v5-a"]
p5b["Pod v5-b"]
p5c["Pod v5-c"]
d5 --> RS5
RS5 --> p5a
RS5 --> p5b
RS5 --> p5c
끝
하위 그래프 "더 이상 사용되지 않는 작업자 버전"
d1["배포 v1"]
rs1["ReplicaSet v1"]
p1a["Pod v1-a"]
p1b["Pod v1-b"]
d1 --> RS1
RS1 --> p1a
RS1 --> p1b
dN["배포 ..."]
끝
WD --> d1
wd --> dN
WD --> D5
p1a -. "폴링 버전 v1" .-> 서버
p1b -. "폴링 버전 v1" .-> 서버
p5a -. "폴링 버전 v5" .-> 서버
p5b -. "폴링 버전 v5" .-> 서버
p5c -. "폴링 버전 v5" .-> 서버
서버["임시 서버"]
로드 중새 작업자 버전이 배포되면 작업자 컨트롤러는 임시에서 새 기본 작업자 버전 등록을 자동화합니다.
이전 워크플로의 실행이 완료되고 더 이상 사용되지 않는 작업자 버전이 필요하지 않으면 작업자 컨트롤러도 이전 배포를 삭제하여 리소스를 확보합니다.
시퀀스 다이어그램
일련번호
개발자로서의 참가자 개발자
참여자 K8을 Kubernetes로 사용
참가자 Ctl을 WorkerController로 사용
일시적인 참가자 T
Dev->>K8s: TemporalWorker "foo" 생성(v1)
K8s-->>Ctl: TemporalWorker "foo"가 생성되었음을 알림
Ctl->>K8s: "foo-v1" 배포 생성
Ctl->>T: v1을 새로운 기본값으로 등록
Dev->>K8s: TemporalWorker "foo"(v2) 업데이트
K8s-->>Ctl: TemporalWorker "foo" 업데이트 알림
Ctl->>K8s: "foo-v2" 배포 생성
Ctl->>T: v2를 새로운 기본값으로 등록
Ctl->>Ctl: v1과 v2 사이의 주요 변경 감지 실행
Ctl->>T: 버전이 호환되는 경우 v1과 v2를 병합합니다.
루프 폴 임시 API
Ctl-->>T: v1 워크플로 실행이 닫힐 때까지 기다립니다.
끝
Ctl->>K8s: "foo-v1" 배포 삭제
로드 중이 프로젝트는 매우 초기 단계에 있습니다. 따라서 외부 코드 기여는 아직 요청되지 않습니다.
버그 보고서와 기능 요청을 환영합니다! 문제를 제기해 주세요.
질문이나 제안이 있거나 다른 기여에 관심이 있는 경우 Temporal Slack에서 @jlegrone
에 문의할 수도 있습니다.