Helm 차트의 배포 전략과 타임아웃
Apollo의 helm-chart-operator는 Helm 차트 변경을 Kubernetes에 적용합니다. 배포 전략은 리소스를 적용한 뒤 준비 상태까지 기다릴지 결정하며, 타임아웃은 Helm 작업, 리소스 준비와 이미지 사전 다운로드에 각각 적용됩니다.
배포 전략
| 전략 | 성공 판단 | 변경 적용 실패 | 리소스 준비 실패 또는 준비 시간 초과 | 주된 용도 |
|---|---|---|---|---|
manageRollout | 리소스 변경을 적용하고 모든 리소스가 준비된 뒤 계획 성공 | 변경을 롤백하고 계획 실패 | 변경을 롤백하고 계획 실패 | 기본 전략. 운영 환경에 권장 |
applyChangesNoWait | 리소스 변경을 적용하면 준비 상태를 기다리지 않고 계획 성공 | 변경을 롤백하고 계획 실패 | 준비 상태를 성공 조건으로 기다리지 않음 | 새 서비스의 구성을 반복해서 조정하는 초기 개발과 문제 분석 |
manageRollout에서는 Deployment의 모든 Pod가 준비되지 않는 경우처럼 리소스가 준비 조건을 충족하지 못하면 계획이 실패합니다. 서비스 가용성에 영향을 주는 변경을 가능한 한 빠르게 롤백할 수 있어 운영 환경에 권장됩니다.
applyChangesNoWait에서는 리소스 적용이 성공하면 생성한 리소스를 남겨 두므로, Pod가 준비되지 않는 원인을 클러스터에서 조사하기에 유용합니다. 다만 Helm 설치와 업그레이드 자체에는 5분의 타임아웃이 있습니다. 오래 실행되는 Helm hook은 준비 상태를 기다리지 않는 전략에서도 작업을 시간 초과로 만들 수 있습니다.
설정 위치
- 전역 기본값:
helm-chart-operator구성의capabilities.defaultRolloutStrategy를 재정의합니다. - 개별 차트: 제품 매니페스트 확장의
rollout-strategy를 지정합니다. 예를 들어rollout-strategy: applyChangesNoWait를 사용할 수 있습니다. - Apollo CLI: 새 Helm 차트 제품을 초기화할 때
--rollout-strategy옵션을 사용할 수 있습니다.
새 배포 환경에서 서비스를 조정하는 동안 전역 기본값을 바꿀 수 있습니다. 운영 환경으로 전환하기 전에는 기본 관리형 전략으로 복원하고, 그 이후에는 필요한 개별 차트에서만 재정의하는 방법이 권장됩니다.
리소스 준비 타임아웃
리소스 준비 타임아웃은 manageRollout에서 Kubernetes에 변경을 적용한 뒤 리소스가 준비될 때까지 기다리는 시간입니다. Helm이 변경을 적용하거나 hook을 실행하는 시간과는 별도이며, Helm 작업 자체의 타임아웃은 5분입니다.
helm-chart-operator 배포 개체의 설정 재정의에서 계획 종류별 기본 대기 시간을 지정할 수 있습니다.
| 설정 키 | 적용 대상 |
|---|---|
capabilities.scopedResourceReadinessTimeouts.install | 설치 계획 |
capabilities.scopedResourceReadinessTimeouts.upgrade | 버전 변경 또는 구성 변경 계획 |
개별 Helm 차트 제품에서는 매니페스트 확장 resource-readiness-timeout으로 재정의할 수 있습니다. 예를 들어 resource-readiness-timeout: 1h는 해당 제품의 준비 대기 시간을 1시간으로 지정합니다. 제품 수준의 값이 있으면 helm-chart-operator 자체 설정보다 항상 우선합니다.
Apollo CLI로 새 Helm 차트 제품을 초기화할 때는 --resource-readiness-timeout 옵션을 사용할 수도 있습니다. 이 옵션의 허용 범위는 최소 3분에서 최대 4시간이며, 준비 상태를 기다리지 않는 applyChangesNoWait 전략과 함께 사용할 수 없습니다.
컨테이너 이미지 사전 다운로드
helm-chart-operator는 Helm 차트를 적용하기 전에 컨테이너 이미지를 미리 다운로드합니다. Pod 시작 시 이미지 다운로드가 오래 걸려 서비스 중단 시간이 늘어나는 일을 줄이기 위한 기능입니다.
배포 개체 구성의 capabilities.imagePrePullEnsurer에서 다음 값을 설정합니다.
| 키 | 의미 |
|---|---|
enabled | 이미지 사전 다운로드 기능의 활성 여부 |
timeout | 사전 다운로드를 시도할 최대 시간. 이 시간 안에 완료하지 못하면 계획이 실패 |
기본값은 활성화 상태이며 타임아웃은 15분입니다.
capabilities:
imagePrePullEnsurer:
enabled: true
timeout: 15m
제품마다 다른 타임아웃이 필요하면 Helm 차트 매니페스트의 image-pre-pull-config 확장에서 timeout을 지정합니다. 제품 수준의 값은 최소 1분, 최대 90분이어야 합니다.
다음은 특정 제품에 3분을 지정하는 설정 예시입니다.
manifest-extensions:
image-pre-pull-config:
timeout: "3m"
이미지 사전 다운로드, Helm 작업 실행과 리소스 준비는 서로 다른 단계입니다. 준비 타임아웃을 늘리는 것으로 이미지 사전 다운로드 타임아웃이나 Helm 작업의 5분 제한이 바뀌지는 않습니다.