티스토리 뷰
helm chart 를 이용해서 구성하다보면, 환경설정을 파일로 따로 관리하고 이를 로딩하고 싶은 경우가 종종있다.
실제 등록될 kubernetes yaml 의 구성은 configMap 기반으로 하고, 환경설정값에 따라 다른 파일을 include 하고 싶은 경우...
파일을 include 하기
아래와 같이 파일을 분리하고, 이를 configMap 에서 로딩한다는 가정을 해보겠다.
공통된 설정값은 ConfigMap 에 정의하고, 환경별로 다른 설정만 따로 관리한다는 개념이다.
apiVersion: v1
kind: ConfigMap
metadata:
name: airflow-variable
namespace: airflow-{{ .Values.profile }}
data:
AIRFLOW__CORE__DEFAULT_TIMEZONE: "Asia/Seoul"
AIRFLOW__WEBSERVER__DEFAULT_UI_TIMEZONE: "Asia/Seoul"
AIRFLOW__WEBSERVER__INSTANCE_NAME: "Airflow [{{ .Values.profile }}]"
{{ printf "configs/%s/config.yaml" .Values.profile | .Files.Get | indent 2 }}
이렇게 하면 values.yaml 의 profile 값에 따라 해당 폴더의 파일을 로딩하는것이 가능하다.
하지만, 이렇게 했을때 문제가 "configs/{{ .Values.profile }}/config.yaml" 안에서는 값을 바인딩 할수 없다는 문제가 있다.
쉽게 말해서 configs/dev/config.yaml 의 파일이 아래와 같이 구성되어있다면?
values.yaml 에 airflow.core.max_active_tasks 설정이 존재한다고 해도 값이 바인딩 안되는 문제가 존재한다.
- values.yaml
profile: dev
airflow:
core:
max_active_tasks: 4
- configs/dev/config.yaml
AIRFLOW__CORE__PARALLELISM: 32
AIRFLOW__CORE__MAX_ACTIVE_RUNS_PER_DAG: 6
AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG: {{ .Values.airflow.core.max_active_tasks }}
- 결과물
include 된 파일의 결과는 values 값이 바인딩이 안된 문자열 그대로 출력되는 문제가 있다.
apiVersion: v1
kind: ConfigMap
metadata:
name: airflow-variable
namespace: airflow-dev
data:
AIRFLOW__CORE__DEFAULT_TIMEZONE: "Asia/Seoul"
AIRFLOW__WEBSERVER__DEFAULT_UI_TIMEZONE: "Asia/Seoul"
AIRFLOW__WEBSERVER__INSTANCE_NAME: "Airflow [dev]"
AIRFLOW__CORE__PARALLELISM: 32
AIRFLOW__CORE__MAX_ACTIVE_RUNS_PER_DAG: 6
AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG: {{ .Values.airflow.core.max_active_tasks }}
파일을 include 하고 바인딩까지 되려면?
사실 이 문제는 공식 문서에 잘 다루고 있었다.
https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function
아래와 같인 표현한걸
{{ printf "configs/%s/config.yaml" .Values.profile | .Files.Get | indent 2 }}
아래와 같이 tpl 로 표현하면 바인딩처리된 결과를 확인할 수 있다.
{{ tpl (printf "configs/%s/config.yaml" .Values.profile | .Files.Get | indent 2) . }}
즉, 아래와 같이 values.yaml 의 값이 바인딩된 결과를 포함시킬 수 있게 된다.
apiVersion: v1
kind: ConfigMap
metadata:
name: airflow-variable
namespace: airflow-dev
data:
AIRFLOW__CORE__DEFAULT_TIMEZONE: "Asia/Seoul"
AIRFLOW__WEBSERVER__DEFAULT_UI_TIMEZONE: "Asia/Seoul"
AIRFLOW__WEBSERVER__INSTANCE_NAME: "Airflow [dev]"
AIRFLOW__CORE__PARALLELISM: 32
AIRFLOW__CORE__MAX_ACTIVE_RUNS_PER_DAG: 6
AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG: 4
삽질을 했는데 역시 답은 문서에 있는 경우가 많다.
'docker & k8s > helm chart' 카테고리의 다른 글
[Helm 2.x] ConfigMap 에 서브폴더가 있는 파일을 마운트하기 (1) | 2024.10.18 |
---|---|
[helm chart] range 하위에서 include 사용시 오류 해결 방법 : error calling include (0) | 2024.08.21 |
[Helm Chart] 문자열에서 "파일명" 혹은 "파일경로" 만 추출하기 (0) | 2024.06.21 |
[Helm Chart] 파일에 선언한 값을 dict 로 만들어 사용하기 (0) | 2024.06.20 |
[Helm Chart] couldn't parse image reference 문제 : float64 문제 (0) | 2024.06.10 |