Values 파일

Values 파일 (Values Files)

이 문서는 Helm 템플릿의 Values 객체와 values 파일의 사용법을 다뤄요. 여러 소스의 값이 어떻게 병합되고 우선순위가 적용되는지, 기본 키를 삭제하는 방법을 설명해요.

출처: 문서

본문

⚠️ 이 페이지는 아직 Helm 4용으로 업데이트되지 않았어요. 일부 내용이 부정확하거나 Helm 4에 적용되지 않을 수 있어요. Helm 4의 새 기능, 개선 사항, 호환성 깨짐 변경에 대한 자세한 내용은 Helm 4 개요를 참조하세요.

이전 섹션에서 Helm 템플릿이 제공하는 내장 객체를 살펴봤어요. 내장 객체 중 하나가 Values예요. 이 객체는 차트에 전달된 값에 접근할 수 있게 해줘요. 그 내용은 여러 소스에서 옵니다:

  • 차트의 values.yaml 파일

  • 서브차트라면 부모 차트의 values.yaml 파일

  • -f 플래그로 helm install 또는 helm upgrade에 전달된 values 파일 (helm install -f myvals.yaml ./mychart)

  • --set으로 전달된 개별 매개변수 (예: helm install --set foo=bar ./mychart)

위 목록은 특수성(specificity) 순서예요: values.yaml이 기본이고, 부모 차트의 values.yaml이 이를 오버라이드할 수 있고, 사용자 제공 values 파일이 그다음 오버라이드하고, --set 매개변수가 마지막으로 오버라이드해요.

Values 파일은 평범한 YAML 파일이에요. mychart/values.yaml을 편집한 다음 ConfigMap 템플릿을 편집해 봐요.

values.yaml의 기본값을 제거하고 하나의 매개변수만 설정할게요:

favoriteDrink: coffee

이제 템플릿 안에서 이것을 사용할 수 있어요:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favoriteDrink }}

마지막 줄에서 favoriteDrinkValues의 속성으로 접근하는 것에 주목하세요: {{ .Values.favoriteDrink }}.

이것이 어떻게 렌더링되는지 봐요.

$ helm install geared-marsupi ./mychart --dry-run=client --debug
install.go:158: [debug] Original chart version: ""
install.go:175: [debug] CHART PATH: /home/bagratte/src/playground/mychart

NAME: geared-marsupi
LAST DEPLOYED: Wed Feb 19 23:21:13 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}

COMPUTED VALUES:
favoriteDrink: coffee

HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: geared-marsupi-configmap
data:
  myvalue: "Hello World"
  drink: coffee

favoriteDrink가 기본 values.yaml 파일에 coffee로 설정되어 있기 때문에 템플릿에 표시되는 값이 그 값이에요. helm install 호출에 --set 플래그를 추가해 쉽게 오버라이드할 수 있어요:

$ helm install solid-vulture ./mychart --dry-run=client --debug --set favoriteDrink=slurm
install.go:158: [debug] Original chart version: ""
install.go:175: [debug] CHART PATH: /home/bagratte/src/playground/mychart

NAME: solid-vulture
LAST DEPLOYED: Wed Feb 19 23:25:54 2020
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
favoriteDrink: slurm

COMPUTED VALUES:
favoriteDrink: slurm

HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: solid-vulture-configmap
data:
  myvalue: "Hello World"
  drink: slurm

--set은 기본 values.yaml 파일보다 우선순위가 높으므로 템플릿이 drink: slurm을 생성해요.

Values 파일은 더 구조화된 내용도 포함할 수 있어요. 예를 들어 values.yaml 파일에 favorite 섹션을 만들고 그 안에 여러 키를 추가할 수 있어요:

favorite:
  drink: coffee
  food: pizza

이제 템플릿을 약간 수정해야 해요:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink }}
  food: {{ .Values.favorite.food }}

이런 식으로 데이터를 구조화하는 것이 가능하지만, 권장 사항은 values 트리를 얕게 유지하고 평탄함을 선호하는 것이에요. 서브차트에 값을 할당하는 방법을 볼 때 값이 트리 구조를 사용해 어떻게 이름이 붙는지 알게 될 거예요.

기본 키 삭제하기 (Deleting a default key)

기본 값에서 키를 삭제해야 한다면 키의 값을 null로 오버라이드할 수 있어요. 그러면 Helm이 오버라이드된 값 병합에서 키를 제거해요.

예를 들어 안정(stable) Drupal 차트는 커스텀 이미지를 구성할 때 liveness 프로브를 구성할 수 있게 해줘요. 기본 값은 다음과 같아요:

livenessProbe:
  httpGet:
    path: /user/login
    port: http
  initialDelaySeconds: 120

--set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt]로 livenessProbe 핸들러를 httpGet 대신 exec로 오버라이드하려 하면 Helm은 기본 키와 오버라이드된 키를 함께 병합해서 다음 YAML이 됩니다:

livenessProbe:
  httpGet:
    path: /user/login
    port: http
  exec:
    command:
    - cat
    - docroot/CHANGELOG.txt
  initialDelaySeconds: 120

하지만 Kubernetes는 하나 이상의 livenessProbe 핸들러를 선언할 수 없기 때문에 실패할 거예요. 이를 극복하려면 livenessProbe.httpGet을 null로 설정해 삭제하도록 Helm에 지시할 수 있어요:

helm install stable/drupal --set image=my-registry/drupal:0.1.0 --set livenessProbe.exec.command=[cat,docroot/CHANGELOG.txt] --set livenessProbe.httpGet=null

이 시점에서 몇 가지 내장 객체를 살펴보고 템플릿에 정보를 주입하는 데 사용했어요. 이제 템플릿 엔진의 또 다른 측면인 함수와 파이프라인을 살펴볼 거예요.

더 알아보기 (Learn more)