티스토리 뷰
[Helm] 2. Helm 차트 만들기 - 내장 객체/변수주입 우선순위/사용자 정의 변수
KimDoubleB 2021. 10. 1. 09:54helm 차트 생성
- helm create <chart-name>
- template, test, values.yaml, Chart.yaml, README.md 등 파일들이 chart-name 디렉토리에 생성된다.
helm 차트에 대한 조회
- helm show <조회하고 싶은 대상>
- 해당 차트에 대한 리소스를 조회할 수 있다. 근데, 사실 직접 파일 찾아서 cat으로 조회하는 것과 큰 차이가 없어서 별로 사용하지 않는다고 한다.
- cat 과의 차이라면 cat은 주석을 포함해 보여주지만, show를 사용하면 주석은 포함되지 않고 보여준다고 함.
helm template에 values 넣어서 출력해보기
- helm template <chart-name> <chart-directory>
- helm chart 설치 전에 values가 들어간 상태로 결과를 출력해보고 싶을 때 사용한다. 설치 전, values가 제대로 들어가는지 확인하는 용도로 많이 사용된다고 한다. 콘솔에 출력됨.
helm install 을 통해 배포가 되면 그걸 release 되었다고 한다.
release 대상으로 조회하는 명령어들이 존재한다.
- show 와 비슷하게 각 나눠진 파일들에 대한 데이터들을 조회할 수 있다. 다른 점이라면 get 명령어를 사용하고 release 이름을 사용해야 한다.
release 한 차트에 대해 적용된 values 만 보고 싶은 경우
- helm get values <release-name>
template 에서는 {{ .Values.value }} 를 통해 values 값을 가져올 수 있다.
- go lang의 template 문법이라고 함.
Values, Chart, Template, Release 등을 지원해서 사용할 수 있다.
- Values 의 값을 가져올 때만 소문자고, 나머진 대문자를 사용한다. 뭐 어차피 이거 틀리면 컴파일 오류 나오니깐, 그 때 고쳐도 된다.
차트 배포시에 기본적으로 values 를 물고 간다고 함.
- 즉, helm install <chart-name> . -f values.yaml 을 안해줘도 되고, helm install <chart-name> . 만 해줘도 된다. 단, values 라는 이름을 사용한다는 전제 하에.
다양한 환경의 values를 사용하고 있다면, default 속성은 values 에 명시하고, 환경마다 변경하고 싶은 속성만 해당 환경 values yaml에 명시하면 된다.
- prod 환경에서만 적용해야 할 속성만 따로 values-prod.yaml 을 통해 명시하면 먼저 values.yaml 을 적용하고 그 위에 values-prod.yaml 로 overriding 한다.
- 이렇게 하고 싶은 경우엔 -f values-prod.yaml 을 명시해줘야만 한다.
제일 후순위로 overriding 되는 것은 -set 옵션이다. -set 옵션을 통해 속성 값을 명시해주면 제일 마지막에 overriding 되어서 (거의) 무조건 적용된다고 보면 될 듯?
helm 생성 시, templates 디렉토리에는 _helpers.tpl 이라는 파일이 있다. 이 파일은 사용자 정의 키워드를 생성하는데 사용된다.
기존에 정의되어져 있는 키워드는 Chart, Values, Template 이 있었다. 이러한 키워드는 template resources(yaml)에서 go lang의 template 문법을 사용해 활용할 수 있다.
- 예를 들어, {{ .Values.replicaCount }}, {{ .Chart.Name }} 같이 활용해서 값을 가져와 사용할 수 있다.
이런 미리 정의되어 있는 것 말고, 사용자가 helm chart에서 자주 사용되어질 만한 것들을 정의해놓아 사용하고자 한다면 _helpers.tpl에 정의해 사용할 수 있다.
- 정의하는 법은 나중에 알아보도록 하고, 사용하는 것을 주의해야하는데 기본적으로 정의된 것을 사용하는 것과 방법이 조금 다르다.
- {{ include "정의한 키워드" . }} 으로 사용할 수 있다. 여기서 맨 마지막에 comma(.)이 있는데 scope을 정하는 의미로 사용된다. 따로 scope을 정할 수도 있지만, 거의 일반적으로 comma를 사용한다. 없으면 오류가 나니, 잊지말고 넣어주도록 하자.
'Development > Docker & Kubernetes (K8s)' 카테고리의 다른 글
Kubernetes Spec / Status - CRD 와 Operator 개발 中 (0) | 2021.12.16 |
---|---|
Kubernetes Events 에 대하여 (1) | 2021.12.16 |
[Helm] 1. Helm 바로 사용해보기 (0) | 2021.10.01 |
[Kubernetes/k8s] kubernetes logs 데이터는 어디에 저장될까 ? (2) | 2021.09.03 |
[Docker] docker logs 데이터는 어디에 저장될까 ? (MacOS) (1) | 2021.09.03 |
- Total
- Today
- Yesterday
- hexagonal architecture
- Clean Architecture
- 비동기
- 로그
- 하루
- k8s
- 쿠버네티스
- 백준
- Spring boot
- 일상
- HTTP
- Algorithm
- container
- java
- MySQL
- 알고리즘
- Log
- Intellij
- 클린 아키텍처
- Kubernetes
- python
- docker
- Spring
- jasync
- boj
- WebFlux
- tag
- Istio
- gradle
- c++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |