deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
labels:
app: nginx-test
spec:
replicas: 1
selector:
matchLabels:
app: nginx-test
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-test
spec:
selector:
app: nginx-test
ports:
- port: 80
targetPort: 80
type: ClusterIP
Chart.yaml
작성Chart.yaml
= Helm 차트의 이름, 버전 등 메타데이터를 입력하는 파일apiVersion: v2 # 차트 API 버전 (필수)
name: nginx-test # 차트명 (필수)
version: 0.0.1 # SemVer 2 버전 (필수)
현재 파일 구성
.
├── Chart.yaml
└── templates
├── deployment.yaml
└── service.yaml
values.yaml
작성values.yaml
= /templates
내부에 쿠버네티스 YAML에 있는 값을 동적으로 지정할 때 사용하는 파일touch values.yaml
.
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
helm install <이름> <차트_경로> -n <네임스페이스>
실행 결과
# helm install nginx-test . -n test
NAME: nginx-test
LAST DEPLOYED: Sun Nov 21 05:41:08 2021
NAMESPACE: test
STATUS: deployed
REVISION: 1 # helm upgrade 반영 횟수
TEST SUITE: None
Helm 조회
# helm ls -n test
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-test test 1 2021-11-21 05:41:08.564944731 +0900 KST deployed nginx-test-0.0.1
실제 쿠버네티스 배포현황 확인
# k get deploy,svc -n test
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-test 1/1 1 1 4m3s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nginx-test ClusterIP 10.100.29.142 <none> 80/TCP 4m3s
helm delete <릴리즈된_차트명> -n <네임스페이스>
실행 결과
# helm delete nginx-test -n test
release "nginx-test" uninstalled
이후, helm ls -n test
명령어 실행시 차트가 삭제된 것을 확인할 수 있음
p13.에서 "values.yaml = /templates 내부에 쿠버네티스 YAML에 있는 값을 동적으로 지정할 때 사용하는 파일" 라고 이야기된 단계에 관한 설명
/templates
내에 deployment.yaml
에서 이미지 버전이 현재 latest
로 되어있는 것을 외부에서 바꿀 수 있게 변경을 진행/templates/*.yaml
수정...
spec:
containers:
- name: nginx
image: nginx:{{ .Values.version }}
ports:
- containerPort: 80
values.yaml
수정version: stable
helm install nginx-values-test .
실행 결과
NAME: nginx-values-test
LAST DEPLOYED: Sun Nov 21 06:11:26 2021
NAMESPACE: test
STATUS: deployed
REVISION: 1
TEST SUITE: None
배포 확인: 아래처럼 image version tag가 바뀐 것을 확인할 수 있다.
k get deploy nginx-test -o yaml
...
- image: nginx:stable
기존 .Values
템플릿 문법으로는 helm install <차트명>
에서 입력되는 차트명
까지는 가져오지 못한다.
이러한 문제를 해결해주기 위한 템플릿 문법으로 .Release
가 있다.
# 1. /templates/deployment.yaml 릴리즈 템플릿 적용
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
labels:
app: {{ .Release.Name }}
spec:
replicas: 1
selector:
matchLabels:
app: {{ .Release.Name }}
template:
metadata:
labels:
app: {{ .Release.Name }}
...
# 2. /templates/service.yaml 릴리즈 템플릿 적용
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}
spec:
selector:
app: {{ .Release.Name }}
ports:
- port: 80
targetPort: 80
type: ClusterIP
Helm Chart 설치 (.Release
문법 적용)
helm install nginx-rename-test . -n test
실행 결과
# helm install nginx-rename-test . -n test
NAME: nginx-rename-test
LAST DEPLOYED: Sun Nov 21 06:48:04 2021
NAMESPACE: test
STATUS: deployed
REVISION: 1
TEST SUITE: None
# helm ls -n test
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-rename-test test 1 2021-11-21 06:48:04.719317331 +0900 KST deployed nginx-test-0.0.1
nginx-values-test test 1 2021-11-21 06:11:26.928779655 +0900 KST deployed nginx-test-0.0.1
아래 명령을 실행하면, Helm이 최종적으로 어떤 정보로 릴리즈를 했는지 알 수 있다.
Helm 명명된 릴리스에 대한 모든 정보 조회
helm get all <RELEASE_NAME>
실행 결과
# helm get all nginx-rename-test
NAME: nginx-rename-test
LAST DEPLOYED: Sun Nov 21 06:48:04 2021
NAMESPACE: test
STATUS: deployed
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
null
COMPUTED VALUES:
version: stable
HOOKS:
MANIFEST:
---
# Source: nginx-test/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-rename-test
spec:
selector:
app: nginx-rename-test
ports:
- port: 80
targetPort: 80
type: ClusterIP
---
# Source: nginx-test/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-rename-test
labels:
app: nginx-rename-test
spec:
replicas: 1
selector:
matchLabels:
app: nginx-rename-test
template:
metadata:
labels:
app: nginx-rename-test
spec:
containers:
- name: nginx
image: nginx:stable
ports:
- containerPort: 80
helm history <릴리즈_차트명>
helm lint <차트_경로>
/templates
+ values.yaml
최종 결과를 보여준다.helm template <차트명> <차트_경로>
추후 과정에서 더 자세히 설명
helm upgrade <릴리즈_차트명> <차트_경로>
values.yaml
을 직접 작성하지 않고, 남이 작성한 파일을 가져오기 때문에 override(덮어쓰기)하여 사용이 된다.--set
인자 사용-f
옵션으로 파일을 작성--set
인자 사용helm install --set version=1.21.4 -n test nginx-set-test .
실행 결과
NAME: nginx-set-test
LAST DEPLOYED: Sun Nov 21 07:09:41 2021
NAMESPACE: test
STATUS: deployed
REVISION: 1
TEST SUITE: None
배포 결과 (values.yaml
version
값이 stable
이지만 1.21.4로 된 것을 알 수 있음)
# k get deploy -n test nginx-set-test -o yaml | grep image
...
- image: nginx:1.21.4
-f
옵션으로 파일을 작성helm install -f <파일경로> -n test nginx-file-test .
2-1. override_values.yaml
파일을 아래와 같이 작성
version: stable-alpine
차트 파일 구성
.
├── Chart.yaml
├── override_values.yaml # 추가됨
├── templates
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
1 directory, 5 files
2-2. -f
옵션으로 Helm Chart 설치
helm install -f override_values.yaml -n test nginx-file-test .
실행 결과
NAME: nginx-file-test
LAST DEPLOYED: Sun Nov 21 07:16:31 2021
NAMESPACE: test
STATUS: deployed
REVISION: 1
TEST SUITE: None
배포 결과
# k get deploy -n test nginx-file-test -o yaml | grep image
...
- image: nginx:stable-alpine
configuration
항목을 참조하여 변경 필요한 값만 지정하여 설치helm install -n test nginx-test .
helm get all nginx-test
helm upgrade --set version=stable-alpine -n test nginx-test .
REVISION
이 올라가고 이미지 배포 버전이 바뀐 것을 알 수 있음values.yaml
을 변경하고 업그레이드를 진행하여도 변경이 됨# 1
helm upgrade --set version=stable-alpine -n test nginx-test .
# 2
helm upgrade -n test nginx-test .
위 과정을 진행하면, helm 버전에 따라 values.yaml
참고가 다르다.
revision
을 그대로 따라 버전을 유지revision
버전을 유지하지 않는다. (첫 설치 values.yaml
)helm rollback <릴리즈_차트명> <REVISION>
실행 결과
[root@acc-master nginx-chart]# helm rollback -n test nginx-test 1
Rollback was a success! Happy Helming!
[root@acc-master nginx-chart]# helm ls
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-test test 3 2021-11-21 07:47:41.211560477 +0900 KST deployed nginx-test-0.0.1
[root@acc-master nginx-chart]# k get deploy -n test nginx-test -o yaml | grep image
f:image: {}
f:imagePullPolicy: {}
- image: nginx:stable
imagePullPolicy: IfNotPresent
revision
은 이력관리를 위해 증가한다.stable
로 변경된 것을 알 수 있다.