Apollo의 구성과 정보 흐름
Apollo는 허브(Hub)와 스포크(Spoke)로 구성된 배포 환경을 관리합니다. 허브는 여러 환경의 정보를 모아 변경을 조정하고, 스포크의 에이전트는 해당 환경에서 상태를 보고하고 변경 계획을 실행합니다.
그림의 CI/CD 도구, 아티팩트 저장소와 관측 도구는 연결 구성을 설명하는 예입니다.
소프트웨어 산출물과 관리 정보의 분리
CI/CD 과정에서는 코드와 설정으로 소프트웨어 산출물을 만들고 아티팩트 저장소에 게시합니다. Apollo에는 제품과 릴리스에 관한 관리 메타데이터를 등록합니다.
이 두 경로는 역할이 다릅니다.
- 아티팩트 저장소는 Helm 차트나 컨테이너 이미지처럼 실제 실행에 필요한 산출물을 제공합니다.
- 제품 카탈로그(Product catalog)는 사용할 수 있는 릴리스와 그 의존 관계, 회수 상태와 릴리스 채널 등의 정보를 제공합니다.
스포크는 배포할 산출물을 지정된 저장소에서 가져옵니다. 허브에 릴리스 메타데이터를 등록한 것과 모든 스포크가 해당 산출물을 내려받을 수 있는 상태가 된 것은 구분해야 합니다.
허브가 관리하는 정보
허브의 오케스트레이션 엔진(Orchestration Engine)은 여러 종류의 입력을 사용하여 시스템을 조정합니다.
| 입력 | 포함하는 정보 | 판단에 사용하는 이유 |
|---|---|---|
| 제품 카탈로그 | 사용 가능한 제품 릴리스, 채널, 회수 여부, 의존 관계와 지원 스키마 | 적용할 수 있는 소프트웨어 후보와 제품의 제약을 판단 |
| 환경과 개체의 관리 설정 | 설치할 제품, 구독 채널, 시간 제약과 기타 설정 | 해당 환경에서 허용하는 관리 조건을 판단 |
| 현재 관측 상태 | 실행 중인 버전, 보고된 상태, 상태 점검과 관측 데이터 | 실제 환경이 어떤 상태이며 변경할 수 있는지 판단 |
제품 카탈로그의 릴리스는 자동 승격 파이프라인이나 권한을 가진 사용자의 수동 승격으로 채널에 추가될 수 있습니다. 환경의 관리 설정을 바꾸는 일은 변경 관리 과정과 필요한 승인을 거칩니다.
고정된 목표 버전보다 조건을 관리하기
배포 개체에 제품과 릴리스 채널을 지정하면 Apollo는 채널에 들어 있는 릴리스와 현재 상태 및 제약 조건을 함께 평가하여 적용할 버전을 결정합니다.
제품 카탈로그와 관리 설정은 판단에 사용할 규칙을 형성하고, 관측 상태는 지금 그 규칙을 어떻게 적용할 수 있는지를 알려 줍니다. 오케스트레이션 엔진은 제약을 위반하지 않는 변경 계획을 제안하고 발행합니다.
구독 채널, 제품 의존 관계, 유지보수 시간대, 억제 시간대와 실제 상태에 따라 현재 실행 가능한 변경이 없을 수 있습니다. 버전 차이를 조사할 때는 이 조건들을 함께 확인합니다.
스포크 제어 플레인
각 스포크에는 스포크 제어 플레인(Spoke Control Plane)이 있습니다. 이는 Apollo가 해당 환경의 상태를 파악하고 변경을 수행하는 데 필요한 구성 요소들의 집합입니다.
에이전트는 다음 역할을 수행합니다.
- 환경과 배포 개체의 상태를 관측하여 허브로 보고합니다.
- 허브에 새 변경 계획이 있는지 주기적으로 확인합니다.
- 발행된 계획을 환경 안에서 실행합니다.
- 계획의 진행과 성공 또는 실패를 보고합니다.
변경 결과를 확인할 때는 계획의 실행 상태와 이후 에이전트가 보고한 상태를 함께 확인합니다.
중앙 관측과 환경별 관측
스포크에서는 실행 중인 대상의 상태, 상태 점검 결과, 관측 데이터와 로그를 수집합니다. 허브는 이 정보를 여러 환경에 걸쳐 살펴보고 변경 판단에 사용합니다.
그림에서 구분한 관측 항목은 다음과 같습니다.
Reported State: 소프트웨어의 버전과 구성 등 보고된 상태.Probes: 생존 상태나 준비 상태 등을 확인한 점검 결과.Telemetry & Logs: 지표와 로그 등 실행을 조사하는 데 필요한 자료.
이 정보는 Apollo의 관리 기능과 함께 사용되며, Splunk, Prometheus, Datadog 같은 관측 도구와 연결하는 구성도 가능합니다. 관측 데이터는 실제 상태와 계획의 결과, 릴리스의 상태를 판단하는 근거가 됩니다.
관리 관계의 확장
허브 하나는 여러 스포크를 관리할 수 있습니다. 허브가 자신의 환경을 관리하도록 구성할 수도 있고, 다른 허브가 그 환경을 관리하도록 구성할 수도 있습니다.
이 관계를 통해 여러 위치와 인프라의 소프트웨어를 중앙에서 조정할 수 있습니다. 환경이 지속적으로 연결되지 않는 경우에는 마지막으로 보고된 상태와 현재 연결 가능성을 구분해야 합니다. 환경의 구분과 설정은 배포 환경, 개별 대상의 관리 여부는 배포 개체에서 설명합니다.