안녕하세요, 오늘은 SRE실 안은경 님이 작성해 주신 ‘Helm Chart 와 Helm template’에 대해 알아보겠습니다.
궁금한 부분이 있으시면 댓글을 달아주세요:)
Helm chart
- 쿠버네티스의 패키지 관리자입니다.
- Helm은 오픈소스 소프트웨어로, 많은 chart(패키지와 유사)를 보유하고 있습니다.
- 쿠버네티스에 최적화된 설정으로 사용할 수 있다는 장점이 있습니다.
Helm 저장소 추가
- helm에는 많은 chart가 제공되고 있습니다.
- helm chart는 헬름 저장소에서 제공됩니다.
- helm chart는 Github에서 관리되고 있으며, 헬름 저장소에서 제공됩니다.
- Stable 저장소 추가
$ helm repo add stable https://charts.helm.sh/stable
- Bitnami가 제공하는 helm 저장소 추가
$ helm repo add stable https://charts.helm.sh/stable
- 등록된 helm 저장소 확인
$ helm repo list
- helm 저장소 변경
$ helm repo update
Helm 차트 검색
- 저장소에서 모든 helm chart 검색
$ helm search repo
- 저장소에서 특정 helm chart 검색
$ helm search repo [chart명]
- helm hub에서 chart 검색
$ helm search hub [chart명]
Helm 차트 설치
- 파라미터 확인
$ helm show values [저장소명]/[chart명]
- README 표시
$ helm show readme [저장소명]/[chart명]
- 설치 명령어에 파라미터 지정하여 설치
$ helm install example-wordpress [저장소명]/[chart명] --version 10.9.2 \
--set wordpressUsername=example-user \
--set wordpressPassword=example-pass \
--set wordpressBlogName="example BLOG" \
--set persistence.size=5Gi
- value 파일 생성하여 설치
vim values.yaml
wordpressUsername: sample-user
wordpressPassword: sample-pass
wordpressBlogName: "Sample Blog"
persistence:
size: 5Gi
- 생성한 value 파일을 사용하도록 –values 옵션 지정하여 설치
$ helm install example-wordpress [저장소명]/[chart명] --version 10.02 \
--values values.yaml
설치한 Helm chart 테스트
- 설치한 chart 테스트
$ helm test example-wordpress
Helm Template
- helm을 사용하여 Template과 설정 값으로 manifest를 생성합니다.
- 생성된 manifest를 출력 후, kubectl 명령어를 통해 apply 하는 방식입니다.
Helm Template으로 Manifest 파일 생성
- Template 파일과 설정값 파일을 통해 manifest를 생성합니다.
- Chart를 신규로 생성할 경우, Deployment, Service, Ingress, ServiceAccount, HPA 리소스 Template이 자동으로 생성됩니다.
- Template 예시
apiVersion: v1
Kind: Secret
metadata:
name: {{ template "wordpress.fullname" . }}
labels: {{- include "wordpress.labels" . | nindent 4 }}
type: Opaque
data:
{{- if .Values.wordpressPassword }}
wordpress-password: {{ . Values.wordpressPassword | b64enc | quote }}
{{- else }}
wordpress-password: {{ randAlphaNum 10 | b64enc | quote }}
{{- end }}
- values.yaml 파일 예시
wordpressUsername: sample-user
wordpressPassword: sample-pass
...
- 생성된 manifest 파일 예시
apiVersion: v1
kind: Secret
metadata:
name: example-wordpress
labels:
app.kubernetes.io/instance: example-wordpress
app.kubernetes.io/managed-by: Helm
app.kuernetes.io./name: wordpress
helm.sh/chart: wordpress-10.9.2
type: Opaque
data:
wordpress-password: c2FtcGxlLXBhc3M=
- values 파일로 template에서 manifest 생성
$ helm template example-wordpress [저장소]/[chart명] --version 10.9.1 \
--values values.yaml
Helm Chart 릴리스 확인 및 삭제
- Helm chart 설치 후 릴리스 확인
$ helm list
- Helm chart 설치 후 릴리스 지정하여 삭제
$ helm uninstall example-wordpress
Custom Chart
- 신규 커스텀 차트 양식 생성
$ helm create example-charts
- 신규 커스텀 차트 양식 생성
$ cd example-charts
$ tree
.
├─ Chart.yaml
├─ charts
├─ templates
│ ├─ NOTES.txt
│ ├─ _helpers.tpl
│ ├─ deployment.yaml
│ ├─ hpa.yaml
│ ├─ service.yaml
│ ├─ serviceaccount.yaml
│ └─ tests
│ └─ tests-connection.yaml
└─ values.yaml
- 신규 커스텀 차트 양식 생성
- templates/*.yaml : 설치하는 manifest 템플릿
- templates/tests/*.yaml : 설치한 차트가 정상적으로 동작하는지 테스트하는 manifest 템플릿
- values.yaml : 사용자가 나중에 덮어 쓸 수 있는 기본값 정의 리소스 제한, 사용 이미지, 포트 번호 등을 제공
- templates/NOTES.txt : helm install 시 출력되는 메시지
- requirements.yaml : 의존하는 차트와 해당 버전 기록
- templates/_helpers.tpl : 릴리스 이름으로 변수를 정의하는 등의 헬퍼 변수 정의
- Chart.yaml : 차트 메타데이터
- 자동 생성된 서비스 템플릿
- template에 추가되는 값은 values.yaml로 지정됨
apiVersion: v1
kind: Service
metadata:
name: {{ include "example-charts.fullname: . }}
labels:
{{- include "example-charts.labels . | nindent 4 }}
spec:
type: {{ Values.service.type }}
ports:
- port : {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "example-charts.selectorLabels" . | nident 4 }}
- 생성한 helm chart 설치
helm install example-helm example-charts
감사합니다.
Written by 안 은경 / Eunkyung An
Cloud Engineer