Search
Duplicate

HELM 차트 맛보기

Created By
Status
완료
Type
Created
2022/12/13 23:24
Last Edited Time
2022/12/13 23:24
Last Edited By
Date
Week
0
kubernetes 에 앱을 올리려면 yaml 파일을 작성할 필요
앱이 커지면 app 마다 yaml 파일을 생성해야함
리소스가 많아지면 yaml 파일에 대한 유지보수가 힘들어지기 때문에 template을 통해 yaml 파일을 동적으로 생성해서 관리하는게 helm
helm 설치는 여기서
템플릿이 비슷하고, 특정 값만 바꿔줘야하는 상황이 될 수 있는 경우, helm을 사용하면 위와 같이 사용 가능
helm repo update ← 이 명령어는 로컬에 있던 레포지토리의 차트 내용들을 원격의 내용으로 업데이트 하고자 하는 명령어
helm list로 현재 돌아가고 있는 서비스 리스트들을 확인하고, helm status ‘서비스’ 를 통해 배포했던 서비스의 상태를 확인할 수 있음
k3d로 실습한 결과 서비스 엄청 늦게 뜸;;;;;;;;;;;;;;

helm 템플릿 가이드

helm create ‘차트명’ 을 실행하면 templates 폴더와 values.yaml, chart.yaml 파일이 생성됨
helm show values ‘경로’ 를 실행하면 values.yaml 파일을 출력해주며, values를 다른 파일 명으로 바꾸면 다른 파일을 보여줌 but cat 명령어랑 다른게 없음
deployment.yaml 파일에 replicas 설정을 할 수 있는데 이를 values.yaml파일에 있는 변수로 사용 가능 {{.Values.replicaCount}}
helm template mychart {경로} 는 변수를 실제값으로 치환해서 확인할 수 있는 명령어
built in 객체로 Values와 Chart 등등이 있음
yml파일의 변수 순서보단 -set 으로 주입하는 변수값이 더 우선임
차트만들기 실습
helm create ‘이름’ 을 입력하면 이름대로 차트가 생성
helm show values . 이나 cat values.yaml파일이나 동일한 결과를 보여줌
helm show chart . 을 하면 cat chart와 다르게 주석 내용을 제거함
helm template mychart . 를 통해 template.yml 파일에 값을 채워서 보여줌
helm get manifest mychart 는 위의 명령과 다르게 이미 배포된 helm chart에 대한 값을 보여줌. 인스턴스에 대한 정보를 보여주는게 위의 정보이고 template은 템플릿에 대한 정보를 보여주는 개념이기 때문이다
helm upgrade mychart . -n default 를 하면 삭제후 재배포를 하지 않아도 , values 변경한 것을 반영할 수 있다.
heml 에선 {{함수 }} 형태로 함수를 쓸수 있다.
또한 {{- if}} 를 통해 조건문을 사용할 수 있다. number일 땐 0, string 일땐 “”, list일 땐 [], object 는 {}, 어떤 자료형이든 null이면 false이다.
{{-with 부모값}} 을 쓰면 그 범위안의 값은 부모값을 사용
{{-range 부모값}} 을 쓰면 부모값을 순회함
{{- range}}
2.
helm 차트 오픈소스 분석
helm repo add bitnami https://charts.bitnami.com/bitnami
helm pull bitnami/tomcat --version 7.1.2 tar -xf tomcat-7.1.2.tgz
Plain Text
복사
위의 명령어를 통해 tomcat 차트 파일을 다운로드
_helpers.tpl
dict 라는 키워드를 통해서 key value 형태를 저장할 수 있음. value의 타입은 여러개가 올 수 있음
typeIs 라는 함수는 타입을 체크할 때 사용
{- if typeIs "string" .value }}
Java
복사
tpl 이라는 함수를 이용하여 변수의 값을 가져올 수 있음
{{- tpl .value .context }}
Java
복사
coalesce는 넘어온 인자중에 null이 아닌 값을 반환해주는 함수
{{- if .Values.fullnameOverride -}} {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} {{- else -}} {{- $name := default .Chart.Name .Values.nameOverride -}}
Java
복사
values.yaml에서
# fullnameOverride:
Java
복사
fullnameOverride이 기본으로 주석처리가 되어있기 때문에 null이라 else 문이 동작하게됨. name에는 tomcat이라는 단어가 들어가게됨
{{- define "tomcat.chart" -}} {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
Java
복사
여기에선 차트의 이름인 tomcat과 version인 7.1.2가 출력하게됨
deployment.yaml
metadata: name: {{ template "tomcat.fullname" . }}
Java
복사
template키워드를 통해 tomcat.fullname의 값을 가져오게됨
labels: {{- include "tomcat.labels" . | nindent 4 }}
Java
복사
그다음라인에선 include를 통해 tomcat.labels값들을 가져오고 이 값들을 nindent 함수를 통해 4칸 들여써서 작성한다.
{{- if .Values.affinity }} affinity: {{- include "tomcat.tplValue" (dict "value" .Values.affinity "context" $) | nindent 8 }} {{- end }} {{- if .Values.nodeSelector }} nodeSelector: {{- include "tomcat.tplValue" (dict "value" .Values.nodeSelector "context" $) | nindent 8 }} {{- end }} {{- if .Values.tolerations }} tolerations: {{- include "tomcat.tplValue" (dict "value" .Values.tolerations "context" $) | nindent 8 }}
Java
복사
기본적으로 값들이 없어서 라인이 무시가 되지만, 만약 toleration에 값이 있을 경우, dict 함수를 통해 값을 주입

prometheus 분석

prometheus차트는 기본적인 레이아웃은 비슷하며 templates하위에 모듈별로 필요한 yaml파일들이 구성되어있다. 만약 모든 모듈을 다 설치하고 싶지 않았을때 이 기능을 지원하고자 한다면, values.yaml파일에 활성화 플래그를 넣고, 여기의 enabled 값에 따라 각 모듈별로 if문 처리를 했을 것이다.
그리고 이 프로메테우스 차트안에는 종속되어있는 다른 헬름 차트가 들어있음
만약 프로메테우스 차트 내에 다른 종속되어있는 차트가 있을 경우, 프로메테우스의 chart.yaml에 dependencies 를 추가해서 여기에 종속된 차트를 추가를 한다. 그리고 helm dependency update를 하게 되면 종속성이 업데이트가 된다.
yaml파일에서 splitLIst “구분자” 를 입력하면 구분자로 split을 하여 배열을 제작할 수 있다.
split을 대신 사용하면 list형태가 아니라 index가 key인 map 객체가 만들어짐
index 함수를 사용하면 해당인덱스의 값을 반환한다
ex) {{index .Values.colors 0 }} ⇒ colors안에 있는 첫번째 원소의 값
grafana helm 차트 분석
ci 폴더의 yaml파일들은 values.yaml파일외에 목적에 따라 추가할 수 있는 values를 모아둔 폴더
tests 폴더는 health 체크를 하기 위한 폴더
제대로 실행되지 않으면 test pod가 terminate error로 종료가 되며 phase가 fail로 떨어짐