해당 포스팅에서 Chart는 salgu-auth
이고 release 명은 test-auth
로 진행하였습니다.
- /auth
- /templates
- salgu-auth.yaml
- Chart.yaml
- values.yaml
위 구조로 폴더 구조가 되어 있습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{.Chart.Name}}-{{.Release.Name}}
namespace: {{.Values.namespace}}
labels:
app: {{.Values.name}}
spec:
replicas: {{.Values.replicas}}
selector:
matchLabels:
app: {{.Values.name}}
template:
metadata:
labels:
app: {{.Values.name}}
spec:
containers:
- name: {{.Values.name}}
image: salgu-{{.Values.name}}:{{.Values.version}}
resources:
limits:
memory: "256Mi"
cpu: "250m"
ports:
- containerPort: 18080
env:
- name: PROFILE
value: {{.Values.profiles}}
- name: API_URL
value: api.core.svc.cluster.local:18080
---
apiVersion: v1
kind: Service
metadata:
name: {{.Chart.Name}}-{{.Release.Name}}
namespace: {{.Values.namespace}}
labels:
app: {{.Values.name}}
spec:
type: NodePort
selector:
app: {{.Values.name}}
ports:
- port: 18080
targetPort: 18080
salgu-auth.yaml
내용에는 Deployment와 Service가 정의 되어 있습니다.
여기서 중요한 점은 Deployment와 Service의 명을 동적으로 변경되게 설정해야됩니다.
왜냐하면 같은 Chart로 여러번 배포가 될 수 있기 때문에 Resource의 이름이 중복되는 문제가 생길 수 있기 때문에 Resource 이름은 .Release.Name
을 따라가게 해줍니다.
name: auth
namespace: auth
version: v2
replicas: 1
profiles: dev
values.yaml
에서 지정한 값들이 salgu-auth.yaml
에 주입되어 실행되게 됩니다.
apiVersion: v1
appVersion: "1.0"
description: A salgu-auth Helm chart for Kubernetes
name: salgu-auth
version: v2
Chart를 만들때 Helm Chart에 대한 메타데이터 등을 정의합니다.
helm lint .
명령어를 이용하여 기본적인 문법적인 오류를 검사해줍니다.
helm template .
명령어로 salgu-auth.yaml
템플릿에 Value들이 정상적으로 주입이 되었고 원하는대로 template이 적용이 되었는지 확인할 수 있습니다.
helm install {Release 명} . --dry-run --debug
위의 테스트를 거치고 helm chart를 적용 시키기 전에 마지막으로 dry-run을 해줍니다.
dry-run은 Helm 차트를 설치하는 시뮬레이션을 실행하여 실제로 차트를 설치하지 않고도 어떤 작업이 수행되는지 미리 확인할 수 있는 유용한 기능입니다.
예를 들어, 이미 존재하는 리소스와 충돌하는 경우나 권한 부족 등의 문제가 있는지 확인할 수 있고 Pod, Service, ConfigMap 등의 리소스가 어떻게 생성
되는지 확인할 수 있습니다.
helm install test-auth .
위 명령어를 입력하여 Helm Chart를 이용하여 리소스를 설치해줍니다.
helm ls
명령어로 helm chart가 정상적으로 배포되었는지 확인합니다.
Chart는 salgu-auth-v2
이고 release는 test-auth
로 정상적으로 되었습니다.
쿠버네티스 클러스터에 정상적으로 리소스가 배포되었는지 확인해줍니다. 정상적으로 deployment와 service가 배포된것을 확인할 수 있습니다.
values.yaml
에서 replicas를 1로 설정해주었기 때문에 Pod도 한개만 배포가 된것을 확인할 수 있습니다.
replicas를 1에서 2로 변경한 후 upgrade를 해보겠습니다.
name: auth
namespace: auth
version: v2
replicas: 2 # 기존에 1로 배포했던걸 2로 변경
profiles: dev
values.yaml
파일에서 replicas를 1에서 2로 변경하고 똑같이 위의 테스트를 진행합니다.
helm upgrade {Release 명} .
명령어를 이용하여 replicas가 1에서 2로 변경된 Chart로 새로 배포를 해줍니다.
출력된 로그를 보시면 REVISION이 2가 된것을 확인할 수 있습니다.
REVISION은 해당 Release의 버전입니다.
replicas를 1로 배포했던 REVISION은 1
replicas를 2로 배포했던 REVISION은 2
다시 replicas를 1로 롤백한 REVISION은 3
이렇게 순차적으로 REVISION이 올라가게 됩니다.
upgrade가 정상적으로 되고 쿠버네티스 클러스터의 Resource를 살펴보면 정상적으로 salgu-auth-test-auth
이름을 가진 Pod 2개가 Running 중이고 정상적으로 Chart가 업그레이드 된것을 확인 할 수 있습니다.
helm history {Release 명}
명령어로 보시면 버전이 하나가 더 생겼고 1버전은 superseded
상태가 되었고 새로운 버전이 deployed
상태로 존재하는 것을 확인할 수 있습니다.
RIVISION을 활용하여 replicas가 2로 배포되었던 Chart 버전을 처음 배포하였던 replicas가 1이었던 Chart로 롤백해보겠습니다.
helm history {Release 명}
명령어를 이용하여 해당 Release의 Revision을 확인해줍니다.
helm rollback {release 명} {revision}
명령어를 이용하여 롤백해줍니다.
release의 history를 보시면 롤백된 새로운 Revision이 생긴걸 확인할 수 있고 Pod의 갯수가 1개로 돌아온것을 확인할 수 있습니다.
Error unable to check Chart.yaml file in chart: stat Chart.yaml: no such file or directory
또는
[INFO] Chart.yaml: icon is recommended
[INFO] values.yaml: file does not exist
[ERROR] templates/salgu-auth.yaml: unable to parse YAML: error converting YAML to JSON: yaml: line 23: mapping values are not allowed in this context
[ERROR] templates/salgu-auth.yaml: unable to parse YAML: error converting YAML to JSON: yaml: line 23: mapping values are not allowed in this context
Chart.yaml 파일이나 values.yaml 파일 등의 확장자를 yaml
이 아닌 yml
으로 적용하면 정상적으로 동작하지 않습니다!!!!!!!!!
reference :
좋은 글 감사합니다.