Kubernetes Helm 쿠버네티스 헬름 - Chart 생성하고 배포하기(버전 관리 및 Release 관리)

salgu·2023년 8월 10일
0

kubernetes

목록 보기
16/16
post-thumbnail

용어 설명

  • template : Deployment, Service 등 정의되어 있는 Manifest
  • Chart : helm으로 application이 패키지 형태로 구성되어 있음
  • release : Chart로 배포되어 있는 하나 하나의 application (배포)

해당 포스팅에서 Chart는 salgu-auth이고 release 명은 test-auth로 진행하였습니다.


폴더 구조

  • /auth
    • /templates
      • salgu-auth.yaml
    • Chart.yaml
    • values.yaml

위 구조로 폴더 구조가 되어 있습니다.

salgu-auth.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을 따라가게 해줍니다.

values.yaml

name: auth
namespace: auth
version: v2
replicas: 1
profiles: dev

values.yaml에서 지정한 값들이 salgu-auth.yaml에 주입되어 실행되게 됩니다.

Chart.yaml

apiVersion: v1
appVersion: "1.0"
description: A salgu-auth Helm chart for Kubernetes
name: salgu-auth
version: v2

Chart를 만들때 Helm Chart에 대한 메타데이터 등을 정의합니다.


Chart 배포 전 테스트

helm lint

helm lint . 명령어를 이용하여 기본적인 문법적인 오류를 검사해줍니다.

helm template

helm template . 명령어로 salgu-auth.yaml 템플릿에 Value들이 정상적으로 주입이 되었고 원하는대로 template이 적용이 되었는지 확인할 수 있습니다.

helm install

helm install {Release 명} . --dry-run --debug
위의 테스트를 거치고 helm chart를 적용 시키기 전에 마지막으로 dry-run을 해줍니다.

dry-run은 Helm 차트를 설치하는 시뮬레이션을 실행하여 실제로 차트를 설치하지 않고도 어떤 작업이 수행되는지 미리 확인할 수 있는 유용한 기능입니다.

예를 들어, 이미 존재하는 리소스와 충돌하는 경우나 권한 부족 등의 문제가 있는지 확인할 수 있고 Pod, Service, ConfigMap 등의 리소스가 어떻게 생성
되는지 확인할 수 있습니다.


Chart 배포

helm install test-auth .
위 명령어를 입력하여 Helm Chart를 이용하여 리소스를 설치해줍니다.

확인

helm ls 명령어로 helm chart가 정상적으로 배포되었는지 확인합니다.
Chart는 salgu-auth-v2이고 release는 test-auth로 정상적으로 되었습니다.

Helm Chart로 설치된 Resource 조회

쿠버네티스 클러스터에 정상적으로 리소스가 배포되었는지 확인해줍니다. 정상적으로 deployment와 service가 배포된것을 확인할 수 있습니다.

values.yaml에서 replicas를 1로 설정해주었기 때문에 Pod도 한개만 배포가 된것을 확인할 수 있습니다.


Chart upgrade

replicas를 1에서 2로 변경한 후 upgrade를 해보겠습니다.

values.yaml 수정

name: auth
namespace: auth
version: v2
replicas: 2 # 기존에 1로 배포했던걸 2로 변경
profiles: dev

values.yaml파일에서 replicas를 1에서 2로 변경하고 똑같이 위의 테스트를 진행합니다.

upgrade 적용

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 상태로 존재하는 것을 확인할 수 있습니다.


Release rollback

RIVISION을 활용하여 replicas가 2로 배포되었던 Chart 버전을 처음 배포하였던 replicas가 1이었던 Chart로 롤백해보겠습니다.

Release 버전 확인

helm history {Release 명} 명령어를 이용하여 해당 Release의 Revision을 확인해줍니다.

Release Rollback

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 :

profile
https://github.com/leeeesanggyu, leeeesanggyu@gmail.com

1개의 댓글

comment-user-thumbnail
2023년 8월 10일

좋은 글 감사합니다.

답글 달기