Apollo의 배포 개체와 상태
배포 개체(Entity)는 배포 환경 안에 있는 소프트웨어 또는 인프라의 개별 대상입니다. 스포크 제어 플레인은 이 대상의 상태를 보고받고, 관리 설정이 있는 대상에 대해서는 설치, 업그레이드나 구성 변경을 수행합니다.
배포 개체는 제품(Product)의 개별 인스턴스를 나타냅니다. 예를 들어 같은 제품을 서로 다른 환경에 설치했다면 각 환경의 설치 대상은 별도의 배포 개체로 다룹니다. 각 배포 개체는 하나의 환경에만 속합니다.
배포 개체 유형
배포 개체 유형(Entity Type)은 해당 종류의 대상들이 공유하는 특성을 식별합니다. Helm chart가 한 가지 예입니다. Apollo의 제품 유형에는 Helm charts와 Assets가 있습니다.
배포 대상의 유형에 따라 보고하는 상태 필드와 관리에 사용하는 구성이 달라집니다.
보고된 상태
보고된 상태(Reported State)는 에이전트가 관측하여 스포크 제어 플레인에 보고한 대상의 정보입니다. 이름은 보고 동작의 성공 여부가 아니라 보고된 대상의 실제 상태를 뜻합니다.
Helm 차트의 경우에는 다음과 같은 정보가 포함될 수 있습니다.
- 이름과 버전.
- Helm 릴리스 이름.
- Kubernetes 네임스페이스.
- 적용된 설정 재정의.
이 상태들을 모으면 운영자는 여러 환경에서 어떤 소프트웨어가 실행되고 있는지 한 화면에서 확인할 수 있습니다. 다만 보고된 상태는 관측 결과이므로, 관리자가 원하는 구성이나 앞으로 적용할 변경과 구분해야 합니다.
배포 개체 설정
배포 개체 설정(Entity settings)은 Apollo가 특정 대상을 어떻게 관리할지 지정하는 정보입니다. 유형별로 필요한 설정이 다르지만, 릴리스 채널과 유지보수 시간대처럼 여러 유형에 공통으로 적용되는 항목도 있습니다.
Helm 차트의 배포 개체에는 구독할 릴리스 채널이나 개별 유지보수 시간대를 설정할 수 있습니다. 개별 배포 개체 설정은 환경의 기본 설정에 우선하여 적용됩니다.
예를 들어 환경 전체의 유지보수 시간이 정해져 있어도 특정 서비스에 별도 시간대를 설정할 수 있습니다. 실제 계획 실행 시에는 적용되는 다른 제약 조건과 예외 설정도 함께 평가해야 합니다.
관리되는 대상과 보고만 되는 대상
Apollo에 표시되는 모든 배포 개체가 자동 관리되는 것은 아닙니다.
| 상태 정보 | 관리 설정 | 분류 | Apollo의 동작 |
|---|---|---|---|
| 있음 | 있음 | 관리되는 배포 개체(Managed Entity) | 대상에 대한 변경 계획을 발행할 수 있다. |
| 있음 | 없음 | 관리되지 않는 배포 개체(Unmanaged Entity) | 상태를 표시하지만 대상에 대한 변경 계획을 발행하지 않는다. |
관리되지 않는 배포 개체를 Apollo에서 추가하여 관리 설정을 제공하면 관리되는 대상으로 전환할 수 있습니다.
상태와 설정을 함께 읽는 방법
가상의 서비스가 1.1.0 버전으로 실행 중이고, 관리 설정에서는 특정 릴리스 채널을 구독하도록 되어 있다고 가정하겠습니다.
- 보고된 상태는 현재 관측된
1.1.0을 보여 줍니다. - 관리 설정은 어떤 제품과 채널, 구성 및 제약을 사용할지 정합니다.
- 변경 계획은 사용할 수 있는 릴리스와 제약 조건을 평가하여 이후에 실행할 작업을 나타냅니다.
채널에 새 릴리스가 들어와도 유지보수 시간대나 의존 관계 등의 조건을 충족해야 변경 계획을 실행할 수 있습니다. 계획이 실패하면 실제 상태가 변경 전과 같을 수도 있고 일부 변경이 이미 반영되었을 수도 있으므로 실행 결과와 보고된 상태를 함께 조사합니다.
온톨로지 객체와의 차이
온톨로지의 객체(Object)는 고객, 주문, 항공편처럼 업무에서 사용하는 대상이나 사건을 표현합니다. Apollo의 배포 개체는 소프트웨어와 인프라의 배포 및 관리 대상을 표현합니다.
따라서 Apollo에서 배포 개체의 버전을 변경하는 일과 Foundry에서 업무 객체의 속성값을 액션으로 바꾸는 일은 다른 작업입니다. 통합된 플랫폼을 설명할 때에는 업무 객체와 배포 개체를 구분하여 어느 계층의 상태를 바꾸는지 명확히 해야 합니다.