본문으로 건너뛰기

Custom Chart 만들기

Chart 생성하기

helm create <chartName> [flags]
<chartName>/
├── Chart.yaml
├── LICENSE # optional
├── README.md # optional
├── values.yaml
├── values.schema.json # optional
├── charts/
├── crds/ # optional
├── templates/
│ ├── NOTES.txt # optional
│ ├── _helpers.tpl # optional
│ └── ...
└──

hooks 사용하기

References

훅 리소스는 템플릿이 렌더링된 후 특정 이벤트에서만 관리되는 리소스입니다. 따라서 릴리즈로 관리되지 않습니다.

apiVersion: batch/v1
kind: Job
metadata:
annotations:
helm.sh/hook: pre-install,pre-upgrade
helm.sh/hook-weight: "1"
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
  • helm.sh/hook: <hookType>[,<hookType>...]
    • 실행 시점을 지정합니다.
    • <hookType>
      • pre-install
      • post-install
      • pre-upgrade
      • post-upgrade
      • test
      • pre-rollback
      • post-rollback
      • pre-delete
      • post-delete
  • helm.sh/hook-weight: "<weight>"
    • 동일한 훅 타입 내에서 실행 순서를 결정하기 위한 값입니다.
    • 값이 낮을수록 먼저 실행됩니다.
  • helm.sh/hook-delete-policy: <policyType>[,<policyType>...]
    • 훅 리소스가 삭제되는 시점을 지정합니다.
    • <policyType>
      • before-hook-creation
        • 새로운 훅 리소스가 생성되기 전에 기존 훅 리소스를 삭제합니다.
        • 기본값입니다.
      • hook-succeeded
      • hook-failed

Dependency 추가하기

추가하고자 하는 차트의 정보를 <chartPath>/Chart.yaml 파일의 dependencies 항목에 추가합니다.

<chartPath>/Chart.yaml
dependencies:
- name: <name>
version: <version>
repository: <repository>
  • alias: <name>
    • 같은 차트를 여러 번 추가하거나 values에서 <name> 대신 사용하고싶은 이름을 지정할 때 사용합니다.
  • repository
    • https://...
    • file://...
    • oci://...
  • condition: <key>
    • 일반적으로 <name>.enabled 또는 <alias>.enabled을 사용합니다.

추가한 차트가 application 타입인 경우 <chartPath>/values.yaml 파일에 <name> 항목을 추가하여 서브차트의 값을 설정할 수 있습니다.

<chartPath>/values.yaml
global: {}

<name>: # <alias>:
enabled: true
# subchart values
helm dependency update [<chartPath>]

update 명령어는 Chart.yaml파일을 바탕으로 charts/ 디렉토리를 업데이트합니다.

helm dependency list [<chartPath>]
helm dependency build [<chartPath>]

build 명령어는 Chart.lock파일을 바탕으로 charts/ 디렉토리를 업데이트합니다.

Chart 패키징

helm package <chartPath> --version <version>
helm pull <repositoryName/chartName> --version <version>
helm pull <chartURL> --version <version>
helm pull --repo <repoURL> <chartName> --version <version>