쿠버네티스

[클라우드] 13. kubernetes Helm Template 작성하기

트리스탄1234 2023. 8. 25. 07:40
728x90
반응형

 

chart 내 template 파일을 작성하는 부분에 대해 알아 봅니다.

template 파일명에는 엄격한 규칙이 없으며, 확장자만 .yaml을 사용하고, helper에 대해서는 .tpl을 사용합니다.

helper는 chart 전체에서 재사용 가능한 object를 정의할 수 있습니다. template directive(지시문)은 {{ 와 }} 으로 감싸야 합니다 예를 들어, template directive {{ .Release.Name }} 은 template에 release명을 대입합니다.

built-in object

Release : 릴리스 자체를 지정합니다.
Release.Name: Release 이름
Release.Namespace: Release될 네임스페이스 (manifest에서 오버라이드하지 않은 경우) Release.IsUpgrade: 현재 작업이 업그레이드 또는 롤백인 경우 true 로 설정
Release.IsInstall: 현재 작업이 설치일 경우 true 로 설정
Release.Revision: 이 Release의 리비전 번호. 처음 설치시에는 이 값이 1이며 업그레이드나 롤백을 수행할 때마다 증가
Release.Service: 현재 템플릿을 렌더링하는 서비스. Helm 에서는 항상 Helm
Values : values.yaml 파일 및 사용자 제공 파일에서 템플릿으로 전달된 값입니다. 기본적으로 Values 자체는 비어 있습니다.
Chart : Chart.yaml 파일의 내용입니다. Chart.yaml 안의 모든 데이터는 여기서 접근 가능하다. 예를 들어 {{ .Chart.Name }}-{{ .Chart.Version }} 은 mychart-0.1.0 를 출력한다.
Files : 차트 내의 모든 특수하지 않은(non-special) 파일에 대한 접근을 제공합니다. 템플릿에 접근하는 데에는 사용할 수 없지만, 차트 내의 다른 파일에 접근하는 데에는 사용할 수 있습니다.
Files.Get 은 이름으로 파일을 가지고 오는 함수. (.Files.Get config.ini)
Files.GetBytes 는 파일의 내용을 문자열이 아닌 바이트 배열로 가져오는 함수. 이미지 같은 것을 다룰 때 유용.
Files.Glob 는 이름이 주어진 shell glob 패턴과 매치되는 파일 목록을 반환하는 함수.
Files.Lines 는 파일을 한 줄씩 읽는 함수. 이것은 파일 내의 각 행을 순회(iterate)하는데 유용.
Files.AsSecrets 은 파일 본문을 Base64로 인코딩된 문자열(secret)로 반환하는 함수.
Files.AsConfig 는 파일 본문을 configmap으로 반환하는 함수.
Capabilities : Kubernetes Cluster가 지원하는 기능에 대한 정보를 제공합니다.
Capabilities.APIVersions 는 버전의 집합
Capabilities.APIVersions.Has $version 은 버전(예: batch/v1) 이나 리소스(예: apps/v1/Deployment) 를 클러스터에서 사용할 수 있는지 여부를 의미
Capabilities.KubeVersion 과 Capabilities.KubeVersion.Version 는 Kubernetes 버전
Capabilities.KubeVersion.Major 는 Kubernetes 메이저 버전
Capabilities.KubeVersion.Minor 는 Kubernetes 마이너 버전
Template : 실행 중인 현재 템플릿에 대한 정보를 포함한다.
Template.Name: 현재 템플릿에 대한 네임스페이스 파일 경로 (예: mychart/templates/mytemplate.yaml)
Template.BasePath: 현재 차트의 템플릿 디렉토리에 대한 네임스페이스 경로 (예: mychart/templates)

Built-in object는 항상 대문자로 시작합니다.

Value file

Values object는 chart에 전달되는 value에 대한 접근를 제공하며, 보통 Chart 내에 있는 values.yaml파일을 통해 전달됩니다.

물론, helm install 시 -f 옵션을 통해 전달된 별도의 yaml 파일도 Values object를 통해 접근이 가능합니다. 또한 --set 을 통해 전달된 개별 value도 동일하게 접근이 가능합니다.

values.yaml 파일에 아래와 같은 값이 설정된 예를 가지고 설명하도록 하겠습니다.

favoriteDrink: coffee

template에서는 위의 value를 아래와 같이 활용할 수 있습니다

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

이 template은 chart를 설치할 때, 아래와 같이 렌더링 됩니다. (release 명은 myconfig로 설치)

apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig-configmap
data:
myvalue: "Hello World"
drink: coffee

Template function & Pipline

built-in object는 변경되지 않는 value를 Template에 대입시켜 줍니다. 하지만, 실제로는 값을 그대로 쓰는것이 아니라 가공하여 사용해야 하는 경우도 많이 있습니다. 이를 위해서 사용하는 것이, function과 pipline 입니다.

이전에 사용했던 values.yaml 파일을 그대로 쓰면서, template에 함수를 사용해 보겠습니다

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

template 함수는 함수명 인수1 인수2 ... 과 같이 사용합니다.

template에서 사용할 수 있는 다양한 함수들(Template Function List )이 있으며, 다양한 조건 처리(Flow Control)도 가능합니다.

pipline

template의 강력한 기능 중 하나는 pipline 개념입니다. unix 의 pipline 개념을 바탕으로 template 함수들을 연결하여 컴팩트하게 표현할 수 있는 도구 입니다.

위의 예를 pipline으로 표현하면 다름과 같습니다.

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

pipline을 사용하면 순서가 변경됩니다. 앞의 인수를 뒤쪽에 있는 함수로 전송하게 됩니다.

pileline을 통해 함수를 연결하는 예는 다음과 같습니다,.

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

이를 렌더링하면 아래와 같은 결과가 나옵니다.

apiVersion: v1
kind: ConfigMap
metadata:
name: myconfig-configmap
data:
myvalue: "Hello World"
drink: "COFFEE"

favoriteDrink value인 coffee를 대문자로 변환한 뒤, 따옴표로 감싸주게 됩니다

728x90
반응형