배포 환경과 배포 개체의 설정
배포 환경의 Settings 탭에서는 해당 배포 환경과 그 안의 관리 대상 배포 개체 설정을 조회하고 편집할 수 있습니다. 설정을 편집하면 변경 요청이 생성되며, 배포 환경의 Editor 권한을 가진 사용자가 요청을 승인하거나 거절할 수 있습니다.
Apollo가 제공하는 개별 설정 작업을 우선 사용하고, 필요한 경우에만 YAML을 직접 편집합니다.
일반 설정과 아티팩트 레지스트리
General에서는 배포 개체를 설치하거나 제거하고, 제거한 배포 개체를 복원하며, 외부 의존성을 편집할 수 있습니다.
Artifact Registries에서는 배포 환경에 아티팩트 레지스트리를 할당할 수 있습니다.
유지보수와 변경 억제 시간대 조회
Maintenance and Suppressions에서는 배포 환경과 배포 개체의 유지보수 시간대 및 변경 억제 시간대를 조회하고 관리합니다. Actions에서 유지보수 시간대를 편집하거나, 유지보수 시간대 재정의와 변경 억제 시간대를 만들 수 있습니다.
Maintenance Overrides 표에는 배포 환경과 배포 개체의 유지보수 시간대 재정의가 표시됩니다. 배포 환경 수준인지 개별 배포 개체 수준인지, 현재 활성 상태인지 과거 이력인지에 따라 필터링할 수 있습니다.
Suppressions 표에서는 변경 억제 시간대를 확인합니다. 이 목록도 배포 환경과 개별 배포 개체, 활성 상태와 과거 이력을 기준으로 필터링할 수 있습니다.
유지보수 시간대는 정기적으로 변경을 허용할 구간을 정합니다. 일회성으로 변경을 허용하려면 임시 유지보수 시간대 재정의를 사용합니다. 변경 억제 시간대는 변경을 막는 설정이며 유지보수 시간대보다 우선합니다.
표시 이름, 설명과 README
Display metadata에서 화면에 표시할 이름, 설명과 README를 수정할 수 있습니다.
| 항목 | 표시 위치와 용도 |
|---|---|
| 표시 이름 | 배포 환경 페이지의 머리글과 배포 환경을 참조하는 드롭다운, 목록 등에 표시됩니다. |
| 설명 | 페이지 제목 아래에 표시됩니다. 배포 환경의 목적처럼 전체적인 정보를 기록합니다. |
| README | Overview 탭에 표시됩니다. 마이그레이션 계획이나 운영 설명처럼 상세한 정보를 기록합니다. |
README는 Markdown을 렌더링하며 외부 링크, 표와 목록 등을 표시할 수 있습니다.
YAML 직접 편집
Edit settings manually를 선택하면 배포 환경의 설정 YAML을 직접 편집할 수 있습니다. 이하의 YAML은 가상의 배포 환경에 WordPress, Keycloak 등의 소프트웨어를 배치하는 설정 예시입니다. 실제 환경에서는 제품, 배포 개체 이름과 Kubernetes 네임스페이스를 해당 배포 대상에 맞추어 지정합니다.
기본 릴리스 채널과 개체별 재정의
배포 환경의 release-channel은 기본 릴리스 채널입니다. 특정 배포 개체에만 다른 채널을 적용하려면 해당 배포 개체 항목에도 release-channel을 지정합니다. 이 필드는 entity-locator와 같은 수준에 둡니다.
release-channel: RELEASE
managed-helm-charts:
- entity-locator:
name: wordpress
k8s-namespace: namespace2
product: com.bitnami.repos:wordpress
- entity-locator:
name: keycloak
k8s-namespace: customer-namespace
product: com.bitnami.repos:keycloak
release-channel: DEV
이 구성에서 wordpress는 배포 환경의 기본 채널인 RELEASE를 따릅니다. keycloak은 자신의 설정으로 기본값을 재정의하여 DEV를 따릅니다. 개별 배포 개체의 채널 재정의는 필요한 경우에만 사용하는 것이 권장됩니다.
정기 유지보수 시간대
유지보수 시간대는 Helm 차트 업그레이드, 구성 변경, 새 배포 개체 설치 등의 작업을 허용하는 반복 시간 구간입니다. 배포 환경의 편집자는 설정 파일의 maintenance-windows에 이름이 있는 시간대를 선언하고, global-maintenance-windows에서 배포 환경에 적용할 시간대를 선택할 수 있습니다.
기본 제공 시간대인 all-time은 언제든 변경을 허용하며 새 배포 환경의 기본값입니다.
global-maintenance-windows에는 no-downtime과 downtime 키가 모두 필요합니다. Apollo는 둘 중 어느 시간대에서도 Helm 차트를 변경할 수 있으므로 두 키에 같은 시간대를 지정해야 합니다.
개별 배포 개체의 시간대를 재정의하려면 그 개체 항목에 maintenance-windows를 추가하는 변경 요청을 제출합니다. 이 경우에도 no-downtime과 downtime을 함께 지정합니다. 한쪽 키만 지정하면 나머지 키는 배포 환경의 시간대를 계속 사용합니다.
global-maintenance-windows:
downtime: all-time
no-downtime: all-time
maintenance-windows:
schedule-a:
time-intervals:
- WEDNESDAY/00:00-SUNDAY/23:59
time-zone-name: US/Pacific
schedule-b:
time-intervals:
- WEDNESDAY/19:00-WEDNESDAY/19:30
time-zone-name: US/Pacific
managed-helm-charts:
- entity-locator:
name: wordpress
k8s-namespace: namespace2
product: com.bitnami.repos:wordpress
maintenance-windows:
downtime: schedule-a
no-downtime: schedule-a
- entity-locator:
name: keycloak
k8s-namespace: customer-namespace
product: com.bitnami.repos:keycloak
release-channel: DEV
maintenance-windows:
downtime: schedule-b
no-downtime: schedule-b
time-intervals는 반복할 요일과 시간 구간을 지정하고, time-zone-name은 그 구간을 해석할 시간대를 지정합니다. 이 예시에서는 wordpress에 schedule-a, keycloak에 schedule-b를 지정합니다.
실제 적용할 시간대의 결정
유지보수 제약 조건은 배포 개체에 최종적으로 적용되는 시간대를 기준으로 평가합니다. Apollo는 배포 개체의 시간대 설정과 제품의 시간대를 함께 고려합니다.
제품에 유지보수 시간대가 지정되어 있고 제품 시간대를 무시하도록 설정하지 않았다면 제품의 시간대를 사용합니다. 그렇지 않으면 배포 개체의 재정의 시간대를 사용하고, 재정의가 없으면 배포 환경의 기본 시간대를 사용합니다. 임시 유지보수 시간대 재정의를 사용하면 반복 일정 외에 변경을 허용할 구간을 만들 수 있습니다.
제품의 유지보수 시간대 무시
override-product-maintenance-windows의 기본값은 false입니다. 이를 true로 설정하면 배포 환경 안의 배포 개체에 대해 제품의 유지보수 시간대를 고려하지 않습니다.
override-product-maintenance-windows: true
제품이 별도로 지정한 운영 시간대 대신 배포 환경 쪽에서 정한 유지보수 정책을 적용해야 할 때 사용하는 선택 사항입니다.
회수된 릴리스에서 전환할 때의 시간대
Apollo는 기본적으로 유지보수 시간대 밖에서도 회수된 릴리스에서 다른 버전으로 전환합니다. 문제가 있는 릴리스에서 벗어나는 작업이 정기 유지보수 시각까지 지연되지 않도록 하는 동작입니다.
다음 설정의 기본값은 false입니다. true로 바꾸면 해당 배포 환경의 모든 제품에서 회수된 릴리스로부터의 전환에도 유지보수 시간대를 요구합니다.
require-maintenance-windows-for-no-downtime-recalled-release-roll-offs: true
이 설정을 바꾸지 않는 것이 강하게 권장됩니다. 회수된 버전에서 전환하는 작업을 늦추어야 할 충분한 이유가 있을 때만 true를 사용합니다.
무시할 제품 의존성
배포 환경의 편집자는 개별 배포 개체에 ignored-dependencies를 추가하여 특정 제품의 의존성 제약 조건을 재정의할 수 있습니다. 이 필드에는 제품을 여러 개 지정할 수 있습니다.
managed-helm-charts:
- entity-locator:
name: wordpress
k8s-namespace: namespace2
product: com.bitnami.repos:wordpress
ignored-dependencies:
- com.bitnami.repos:nginx
- com.bitnami.repos:mariadb
이 예시는 wordpress 배포 개체에서 nginx와 mariadb 제품에 대한 의존성 제약 조건을 무시하도록 설정합니다.
의존성 그룹
의존성 그룹(Dependency group)은 같은 배포 환경 안의 배포 개체를 논리적인 묶음으로 나누는 설정입니다. 배포 환경 편집자가 구성할 수 있습니다.
그룹을 구성하면 다음 기준이 적용됩니다.
- 제품 릴리스의 의존성을 충족하려면 의존하는 배포 개체와 의존 대상 배포 개체가 하나 이상의 그룹을 공유해야 합니다.
- 제품 릴리스의 비호환성이 활성화되려면 해당 배포 개체와 비호환 대상 배포 개체가 하나 이상의 그룹을 공유해야 합니다.
별도로 운영하는 인스턴스 분리
가상의 제품 A가 제품 B에 의존하고, 두 제품을 각각 두 벌씩 실행한다고 가정하겠습니다. 운영용 A1은 B1에 의존하고, 별도로 설치할 A2는 B2에 의존해야 합니다.
A1과 B1을 production 그룹에 넣고 A2를 staging 그룹에 넣으면, 이미 설치된 B1이 A2의 의존성을 충족하지 않습니다. A2는 자신과 같은 staging 그룹에 B2가 설치되기를 기다립니다. 같은 제품의 인스턴스가 여러 개 있어도 어떤 인스턴스를 의존 대상으로 사용할지 그룹으로 분리할 수 있습니다.
그룹 지정
배포 개체 항목의 dependency-groups에 그룹을 지정합니다. 하나의 배포 개체에 여러 그룹을 지정할 수 있습니다.
managed-helm-charts:
- entity-locator:
name: wordpress
k8s-namespace: namespace
product: com.bitnami.repos:wordpress
dependency-groups:
- group-1
- entity-locator:
name: mariadb
k8s-namespace: namespace
product: com.bitnami.repos:mariadb
dependency-groups:
- group-1
이 예시에서 두 배포 개체는 group-1을 공유합니다.
특정 제품을 찾을 그룹 재정의
dependency-group-overrides는 특정 제품의 의존성을 해결할 때 검색할 그룹을 지정합니다. 배포 개체가 속한 그룹과 다른 그룹에서 공유 서비스를 찾아야 할 때 사용할 수 있습니다.
managed-helm-charts:
- entity-locator:
name: wordpress
k8s-namespace: namespace
product: com.bitnami.repos:wordpress
dependency-groups:
- group-1
dependency-group-overrides:
com.bitnami.repos:shared-database:
- default
- shared-services
이 구성에서 wordpress는 group-1에 속하지만, com.bitnami.repos:shared-database에 대한 의존성을 해결할 때는 default와 shared-services를 검색합니다.
모든 그룹 허용
특정 제품의 의존성을 어느 그룹에서든 충족할 수 있도록 하려면 와일드카드 "*"를 사용합니다.
managed-helm-charts:
- entity-locator:
name: shared-service
k8s-namespace: shared
product: com.example:shared-service
dependency-groups:
- shared-services
dependency-group-overrides:
com.example:monitoring:
- "*"
이 예시는 shared-service가 com.example:monitoring 의존성을 찾을 때 그룹을 제한하지 않도록 구성합니다.
그룹 설정의 기본 동작
| 설정 | 적용 결과 |
|---|---|
dependency-groups를 지정하지 않음 | default 그룹에 속함 |
dependency-groups에 빈 목록을 지정 | ["default"]로 취급 |
dependency-group-overrides를 지정하지 않음 | 배포 개체가 속한 그룹 안에서 의존성을 해결 |