Helm 차트 훅

1 개요[ | ]

Chart Hooks
차트 훅
  • Helm 차트에서 릴리스 생명주기(lifecycle)의 특정 시점에 개입할 수 있도록 지원하는 메커니즘.
  • 일반적인 템플릿과 동일한 쿠버네티스 매니페스트이지만, 특수한 어노테이션을 지정하여 훅으로 동작한다.
  • 예를 들어 설치 전에 ConfigMap/Secret을 미리 로드하거나, 업그레이드 전·후에 Job을 실행하는 식으로 활용된다.

2 사용 목적[ | ]

  • 차트 설치 전 특정 리소스를 미리 배포
  • 차트 업그레이드 전후 데이터 백업/복구 처리
  • 릴리스 삭제 전 서비스 정상 종료 처리
  • Helm test 실행 시 검증 작업 수행

3 훅 종류[ | ]

어노테이션 값 설명
pre-install 템플릿 렌더링 후, 리소스 생성 전에 실행
post-install 모든 리소스가 생성된 후 실행
pre-delete 삭제 요청 시, 리소스 제거 전에 실행
post-delete 삭제 요청 시, 모든 리소스 제거 후 실행
pre-upgrade 업그레이드 요청 시, 리소스 갱신 전 실행
post-upgrade 업그레이드 요청 시, 모든 리소스 갱신 후 실행
pre-rollback 롤백 요청 시, 리소스 롤백 전 실행
post-rollback 롤백 요청 시, 모든 리소스 롤백 후 실행
test helm test 명령 실행 시 동작
  • 이전 버전에서 사용되던 crd-install 훅은 Helm 3에서 crds/ 디렉터리 방식으로 대체되었다.

4 훅과 릴리스 생명주기[ | ]

  • Helm은 install, upgrade, delete, rollback 등 릴리스 요청 과정에서 훅을 실행할 수 있다.
  • 훅 실행 시:
    • 리소스는 hook weight 순서에 따라 실행된다. (기본값 0, 음수·양수 가능)
    • Pod/Job 유형은 완료될 때까지 대기한다. 실패 시 릴리스 자체가 실패로 처리된다.
    • 그 외 리소스는 Kubernetes에서 로드된 시점에 Ready로 간주된다.
  • 동일 훅을 여러 리소스가 선언할 수 있으며, 서브차트에서 선언된 훅도 함께 실행된다.

5 훅 리소스 관리[ | ]

  • 훅으로 생성된 리소스는 릴리스에 의해 추적·관리되지 않는다.
  • 따라서 helm uninstall 시 자동으로 삭제되지 않는다.
  • 삭제 동작은 다음과 같은 hook delete policy로 제어 가능하다:
설명
before-hook-creation 새 훅 리소스를 만들기 전 기존 리소스 삭제 (기본값)
hook-succeeded 훅 실행 성공 시 리소스 삭제
hook-failed 훅 실행 실패 시 리소스 삭제
  • 절대 삭제되면 안 되는 리소스는 helm.sh/resource-policy: keep 어노테이션을 지정한다.

6 예시[ | ]

다음은 post-install 훅으로 동작하는 Job 템플릿이다.

apiVersion: batch/v1
kind: Job
metadata:
  name: "{{ .Release.Name }}"
  annotations:
    "helm.sh/hook": post-install
    "helm.sh/hook-weight": "-5"
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: post-install-job
        image: "alpine:3.3"
        command: ["/bin/sleep","{{ default "10" .Values.sleepyTime }}"]

7 같이 보기[ | ]

8 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}