Spinnaker의 전체 구조도

좀 더 간단한 버전의 구조도 - 현재 rush는 deprecate됨

주요 컴포넌트
공식 문서에 따르면 다음 컴포넌트들이 마이크로 서비스로 구성되어 있다고 함
- Deck: 웹 UI
- Gate: API 게이트웨이
- Orca: 오케스트레이션 엔진
- Clouddriver: 클라우드 공급자에 대한 변형(mutation/adaptation)과 배포된 자원에 대한 캐싱/인덱싱
- Front50: 메타데이터를 관리하는 저장소
- Rosco: 이미지 또는 이미지 템플릿 생성
- Igor: CI 빌드 결과에 따라 파이프라인을 트리거하는 역할
- Echo: 외부로 보낼 이벤트 버스
- Fiat: 인가(authorization) 서비스
- Kayenta: 자동화된 canary 분석
- Keel: Managed Delivery
- Halyard: 설정(configuration) 서비스
주요 기능 시퀀스
Bake의 시퀀스
participant Igor
participant Jenkins
participant ArtifactRepo
participant Echo
participant Front50
participant Orca
participant Rosco
participant Packer
participant Redis
participant Cloud
Echo -> Front50: 파이프라인 트리거들의\n캐시를 빌드함
Jenkins -> ArtifactRepo: 새로 생산된\n배포가능한\n자산(아티팩트)을 공개함
note left: 아티팩트를 아카이브함
Igor -> Jenkins: Jenkins가 빌드를 완료했는지 폴링함
Igor -> Echo: 완료된 빌드 정보를\n이벤트 버스로 공개함
Echo -> Orca: 일치된 트리거에 기반하여\n파이프라인 실행을 시작함
activate Orca
Orca -> Redis: 새로운 실행을 저장함
note left: Orca는 트리거로부터\n받은 아티팩트 상세를\n사용해서 버전 정보로\n패키지 이름을 장식함
Orca -> Rosco: 설치할 버전의 패키지를 전달하여\n(이미지) 굽기를 요청함
deactivate Orca
Rosco -> Redis: 새로운 굽기를 저장함
Rosco -> Packer: 설정에서 받은 저장소 주소와\n패키지/버전을 전달하여\n굽기 작업을 시작함
Packer -> ArtifactRepo: 저장소로부터 배포가능한\n자산을 당겨옴
Packer -> Cloud: 머신 이미지를 공개함
loop 백그라운드 쓰레드에서
Rosco -> Packer: 작업 완료까지 폴링함
Rosco -> Redis: 굽기를 완료로 마킹함
end
loop 워커 쓰레드에서
Orca -> Rosco: 작업 종료까지 폴링함
Rosco -> Redis: 굽기 상황을 질의함
Orca -> Redis: 실행 상태를 업데이트함
end
Deploy의 시퀀스
participant Deck
participant Gate
participant Orca
participant Clouddriver
participant Redis
participant Cloud
Deck -> Gate: 배포 오케스트레이션을 시작함
activate Gate
Gate -> Orca: 배포 오케스트레이션을 시작함
activate Orca
Orca -> Redis: 새로운 실행을 저장함
Orca --> Gate: 오케스트레이션 ID를 가지고 응답함
deactivate Orca
Gate --> Deck: 오케스크레이션 ID를 가지고 응답함
deactivate Gate
Orca -> Clouddriver: 배포 연산을 시작함
activate Clouddriver
note left: 워커 쓰레드에서
Clouddriver ->Redis: 새로운 태스크를 저장함
Clouddriver --> Orca: 태스크 ID로 응답함
deactivate Clouddriver
Clouddriver -x Cloud: 호출을 변형함
activate Clouddriver
Clouddriver -> Redis: 태스크를 완료로 마킹함
deactivate Clouddriver
loop 워커 쓰레드에서
Orca -> Clouddriver: 태스크 완료까지 폴링함
Clouddriver -> Redis: 태스크 상황을 질의함
Orca -> Redis: 실행 상태를 업데이트함
end
loop 워커 쓰레드에서
Orca -> Clouddriver: 인스턴스가 올라올 때까지 폴링함
Clouddriver -> Redis: 서버 그룹/인스턴스\n상태를 캐시에서 질의함
Orca -> Redis: 실행 완료로 마킹함
end
loop 백그라운드 쓰레드에서
Deck -> Gate: 오케이스트레이션 완료까지 폴링함
Gate -> Orca: 오케스트레이션 상황을 질의함
Orca -> Redis: 실행 상황을 질의함
end