Helm Chart Template

김신영·2023년 4월 18일
0

helm chart

목록 보기
2/2
post-thumbnail

Helm Chart Template

차트 구성도

mychart/
	Chart.yaml
	values.yaml
	charts/
	templates/
  ...
  • templates/
    • 디렉토리는 템플릿 파일을 위한 것이다. 헬름이 차트를 평가할 때, templates/
      디렉토리의 모든 파일을 템플릿 렌더링 엔진으로 전달한다. 그리고 나서 처리 결과를 모아 쿠버네티스로 보낸다.

Chart.yaml

  • Helm 차트의 주 구성 파일입니다.
  • 이름, 버전 및 설명과 같은 차트에 대한 메타데이터를 포함합니다.
apiVersion: v2
name: mychart
version: 0.1.0
description: A Helm chart for my app

values.yaml

  • 차트 구성의 기본 값을 포함합니다.
  • 이러한 값은 설치 또는 업그레이드 중에 재정의할 수 있습니다.
replicaCount: 1
image:
  repository: nginx
  tag: stable
  pullPolicy: IfNotPresent

templates

  • 헬름이 차트를 평가할 때, templates/디렉토리의 모든 파일을 템플릿 렌더링 엔진으로 전달한다.
  • 그리고 나서 처리 결과를 모아 쿠버네티스로 보낸다.
  • 배포할 리소스를 설명하는 Kubernetes 매니페스트 파일이 포함됩니다.
  • 이러한 파일은 values.yaml의 값에 따라 동적으로 구성을 생성하기 위해 Go 템플릿을 사용할 수 있습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-nginx
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: 80

빌트인 객체

Release

이 객체는 릴리스 자체를 서술한다.

  • Release.Name : 릴리스 이름
  • Release.Namespace : 릴리스 네임스페이스
  • Release.IsUpgrade : 현재 작업이 업그레이드 또는 롤백인 경우 true
  • Release.IsInstall : 현재 작업이 설치일 경우 ture
  • Release.Revision : 릴리스 리비전 번호
  • Release.Service : 현재 템플릿을 렌더링하는 서비스. Helm에서는 항상 Helm

Values

values.yaml파일 및 사용자 제공 파일에서 템플릿으로 전달된 값. 기본적으로 비어 있다.

Files

차트 내의 모든 특수하지 않은(non-special) 파일에 대한 접근을 제공한다. 템플릿에 접근하는 데에는 사용할 수 없지만, 차트 내의 다른 파일에 접근하는 데에는 사용할 수 있다

  • Files.Get : 이름으로 파일을 가지고 오는 함수이다.
    • .Files.Get config.ini
  • Files.GetBytes : 파일의 내용을 문자열이 아닌 바이트 배열로 가져오는 함수이다. 이미지 같은 것을 다룰 때 유용하다.
  • Files.Glob : 이름이 주어진 shell glob 패턴과 매치되는 파일 목록을 반환하는 함수이다.
  • Files.Lines : 파일을 한 줄씩 읽는 함수이다. 이것은 파일 내의 각 행을 순회(iterate)하는데 유용하다.
  • Files.AsSecrets : 파일 본문을 Base64로 인코딩된 문자열로 반환하는 함수이다.
  • Files.AsConfig : 파일 본문을 YAML 맵으로 반환하는 함수이다.

Capabilities

쿠버네티스 클러스터가 지원하는 기능에 대한 정보를 제공한다.

  • Capabilities.APIVersions : 버전의 집합이다.
  • Capabilities.APIVersions.Has $version : 버전이나 리소스를 클러스터에서 사용할 수 있는지 여부를 나타낸다.
  • Capabilities.KubeVersion.Capabilities.KubeVersion.Version : 쿠버네티스 버전이다.
  • Capabilities.KubeVersion.Major : 쿠버네티스 메이저 버전이다.
  • Capabilities.KubeVersion.Minor : 쿠버네티스 마이너 버전이다

Template

  • Name: 현재 템플릿에 대한 네임스페이스 파일 경로
    • mychart/templates/mytemplate.yaml
    • BasePath: 현재 차트의 템플릿 디렉토리에 대한 네임스페이스 경로
    • mychart/templates

Go Template 언어

template package - text/template - Go Packages

템플릿 함수와 파이프라인

Helm | 템플릿 함수와 파이프라인

  • quote
  • repeat
  • default
  • upper
  • lower
  • lookup
    • apiVersion
    • kind
    • namespace
    • name
  • 연산자
    • eq
    • ne
    • lt
    • gt

템플릿 함수 목록

Helm | 템플릿 함수 목록

흐름 제어

  • values.yaml
favorite:
  drink: coffee
  food: pizza
pizzaToppings:
- mushrooms
- cheese
- peppers
- onions

if

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink | default "tea" | quote }}
  food: {{ .Values.favorite.food | upper | quote }}
  {{ if eq .Values.favorite.drink "coffee" }}mug: true{{ end }}
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: eyewitness-elk-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "PIZZA"
  mug: true

White Space 제어

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink | default "tea" | quote }}
  food: {{ .Values.favorite.food | upper | quote }}
  {{- if eq .Values.favorite.drink "coffee" }}
  mug: true
  {{- end }}
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: telling-chimp-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "PIZZA"
  mug: true

with

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  {{- with .Values.favorite }}
  drink: {{ .drink | default "tea" | quote }}
  food: {{ .food | upper | quote }}
  {{- end }}

range

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  {{- with .Values.favorite }}
  drink: {{ .drink | default "tea" | quote }}
  food: {{ .food | upper | quote }}
  {{- end }}
  toppings: |-
    {{- range .Values.pizzaToppings }}
    - {{ . | title | quote }}
    {{- end }}
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: edgy-dragonfly-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "PIZZA"
  toppings: |-
    - "Mushrooms"
    - "Cheese"
    - "Peppers"
    - "Onions"

변수

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  {{- $relname := .Release.Name -}}
  {{- with .Values.favorite }}
  drink: {{ .drink | default "tea" | quote }}
  food: {{ .food | upper | quote }}
  release: {{ $relname }}
  {{- end }}
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "BANANA"
  release: test
profile
Hello velog!

0개의 댓글