라이브러리 차트
라이브러리 차트
라이브러리 차트(Library Chart)는 다른 차트들이 공유하고 재사용할 수 있는 헬퍼나 프리미티브를 정의하는 Helm 차트의 한 종류예요. 라이브러리 차트는 템플릿을 정의하는 Helm 차트인데, 서로 다른 차트들에서 공유할 수 있는 "재사용 가능한 템플릿의 모음"으로 이해할 수 있어요. 이를 통해 차트 작성자/개발자는 템플릿을 복사해서 필요한 모든 차트에 붙여 넣는 대신 공유할 수 있어요. 이는 유지보수 비용과 잠재적인 버그를 줄여 줘요.
출처: 문서
본문
라이브러리 차트는 어떻게 동작하나요
왜 라이브러리 차트를 사용하나요
라이브러리 차트를 설치하려면 직접 설치하거나 다른 차트의 의존성으로 설치할 수 있어요. 의존성으로 사용될 때는 차트의 Chart.yaml에 나열된 의존성이 먼저 처리돼요.
설치를 실행하면 의존성이 기본 차트보다 먼저 로드되고 템플릿 처리돼요. 아래 my-app 차트에서 my-library 의존성을 내려 받아 풀고 charts/ 디렉터리에 주입해요.
my-app/
Chart.yaml
charts/
my-library-0.1.0.tgz
templates/
examples/
example.yaml
그러면 Helm이 my-app 차트를 처리할 때 my-app/templates의 템플릿뿐 아니라 의존하는 라이브러리의 템플릿도 렌더링해요. 리소스로 생성해야 하는 템플릿(즉 {{- if not .Capabilities.APIVersions.Has ... }} 조건이 없거나 _로 시작하지 않는 템플릿)은 건너뛰는데, 이것들이 "라이브러리 템플릿"으로 간주되기 때문이에요.
서로 다른 하위 차트를 가진 라이브러리 차트를 의존성으로 선언하는 예제를 볼게요:
dependencies:
- name: my-library
version: 0.1.0
repository: https://my-charts.example.com
- name: my-library2
...
라이브러리 차트를 의존성으로 선언하는 것은 평범하게 이루어지며, 평소 방식으로 설치돼요. 설치되면 라이브러리 차트는 아무 리소스도 만들지 않아요. 라이브러리 차트는 단순히 템플릿의 모음이에요.
Helm이 차트와 의존성의 템플릿을 렌더링할 때, 먼저 의존성의 templates/_helpers.tpl 템플릿을 렌더링하고 그다음 차트의 템플릿을 렌더링해요. 의존성의 템플릿이 먼저 렌더링되고, 나중에 helpers.tpl이 이후에 사용될 정의를 덮어쓰거나 추가해요. 이것이 의존성이 부모 차트에 값을 추가하거나 헬퍼를 제공하는 방식이에요.
{ width: 50% }{{< mermaid >}}try{mermaid}catch(e){} {{< /mermaid >}}
라이브러리 기능
라이브러리 차트는 유용하게 만드는 여러 기능을 지원해요:
-
함수 재사용성
-
일관된 출력
-
단순화된 유지보수
이런 기능은 라이브러리 차트를 공유 도구에 좋은 선택으로 만들어 줘요.
라이브러리 차트 사용
앞서 언급했듯이, 라이브러리 차트를 의존성으로 사용할 때 Helm이 그것을 어떻게 처리하는지 이해하는 것이 도움이 돼요. 부모 차트가 설치되면 라이브러리 차트의 _helpers.tpl과 기타 템플릿을 가져오고, Helm이 그것들을 먼저 렌더링해요.
오버라이드
오버라이드는 라이브러리 차트 템플릿의 동작을 수정하는 데 사용해요.
# In the parent chart's values.yaml
overrides:
example.fullname:
prefix: "my-prefix-"
overrides 섹션은 부모 차트의 values.yaml에서 라이브러리 차트의 _helpers.tpl에 정의된 값을 재정의할 수 있게 해 줘요.
overrides:
example.fullname:
prefix: "my-prefix-"
라이브러리 차트의 _helpers.tpl이 이미 prefix 매개변수로 example.fullname을 정의하고 있다면, 오버라이드가 그것을 교체해요.
예제: 완전한 라이브러리 차트
재사용 가능한 템플릿 집합을 정의하는 완전한 라이브러리 차트의 예제예요.
# _helpers.tpl for a library chart
{{- define "example.fullname" -}}
{{- printf "%s-%s" .Release.Name .Chart.Name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "example.labels" -}}
helm.sh/chart: {{ include "example.fullname" . }}
{{- end -}}
결론
라이브러리 차트는 중복 없이 차트 간에 템플릿을 공유할 수 있게 해 줘요. 여러 차트를 유지보수하는 차트 작성자에게 핵심 기능이에요.
더 알아보기 (Learn more)
- Helm 차트 개요 — 차트 형식 개요
- 차트 훅 — 차트 훅을 사용하는 방법