Judaeng

Helm 알아보기(2) - Chart 본문

DevOps/Helm

Helm 알아보기(2) - Chart

Judaeng 2022. 6. 16. 09:00

이번 게시물에서는 Helm Chart가 무엇인지, Helm Chart 구조는 어떻게 되어 있는지, Chart 생성은 어떻게 하는지, Chart Release는 무엇인지에 대해서 알아보고 실습해보자.

 

Helm Chart란?


차트는 헬름 패키지이다. 
이 패키지에는 쿠버네티스 클러스터 내에서 애플리케이션, 도구, 서비스를 구동하는데 필요한 모든 리소스 정의가 포함되어 있다.
쿠버네티스에서의 Homebrew 포뮬러, Apt dpkg, YUM RPM 파일과 같은 것으로 생각할 수 있다.
- Helm 공식문서 중

Helm은 공식문서 소개에서 패키지 관리 매니저라고 소개한다.
패키지라는 것은 템플릿(templates)과 기타 파일로 구성된 파일을 의미한다. 

오늘날 패키지징 된 압축파일helm 차트(chart)라고 부른다.

즉, Helm에서의 Chart는 애플리케이션 하나를 배포하기 위해 필요한 일련의 쿠버네티스 리소스들을 포함한다.

 

Helm의 Package Format.

Chart는 Kubernetes에서 설치하고자 하는 리소스들의 설치 스크립트이다.

Chart는 디렉터리 안에 있는 파일들의 집합으로 디렉터리 이름이 바로 Chart의 이름이 된다.

이러한 Helm Chart는 Repository에 저장할 수 있다.

 

Chart 하나가 우리가 생각하는 애플리케이션 하나라고 볼 수도 있다.

Helm 차트쿠버네티스 YAML 파일을 그룹화 한 템플릿(Templates)과 기타 파일을 압축한 파일이다.

사진으로 한번 확인해보자.

출처:https://coffeewhale.com/kubernetes/gitops/helm/2020/05/13/helm-operator/

위처럼 YAML 파일을 생성하고 templates라는 디렉터리에 이동시켜 차트를 생성하는 과정을 거친다.

그렇다면 아래에선 차트 생성과 Helm Chart Release에 대해서 알아보자.

 

Helm Repository


Chart들이 저장되어있는 공간이며 Helm Repository를 통해 다양한 Chart들을 공유할 수 있다.

Git Hub, Docker Hub와 비슷한 역할을 한다.

 

Helm Release


Git Hub, Docker Hub의 버전 관리와 마찬가지로 Helm도 배포된 서비스에 대한 version을 관리하기 위해 Helm Release라는 개념이 존재한다.

일반적으로 yaml파일만 사용해서 kubernetes를 관리하면 여러 yaml파일에 변경 사항이 있으면 rollback 및 update가 힘들겠지만 Helm 은 Release가 있어서 버전 관리가 가능해지므로 update, rollback 관리가 수훨해진다.

또한 언제 update가 이루어졌는지 날짜 확인도 가능하다.

 

Helm Chart 생성해보기 (실습 시작)


템플릿 생성 메뉴얼은 [Chart Template Guide -> Getting Started] 문서에 설명되어 있다고 한다. (모르겠다면 여기!)

어떻게 Helm Chart를 만들 수 있는지에 대한 설명이 적혀있다.

아래는 Helm Chart의 구조를 적어 놓은 사진이다. 확인하면서 천천히 만들어보자.

Chart 구조 Tree

위에 templates/ 디렉터리 안에는 deployment.yaml, service.yaml 2개의 YAML 파일을 넣을 것이다.

 

Chart.yaml, values.yaml에 대해서 알아보자.

공식문서에 Chart.yaml, values.yaml에 대한 설명은 잘 설명되어 있다. 잘 읽어보는 것도 방법이다.

위에 사진의 구조 중 설치에 필요한 필수 파일이 2가지 있는데 그것이 Chart.yaml, values.yaml 파일이다.

 

Chart.yaml

Chart.yaml은 Helm 차트의 버전, 이름 등 메타정보를 저장한 파일이라고 한다.

 

values.yaml

values.yaml은 templates의 있는 값을 동적으로 변경하고 싶을 때 사용하는 파일이라고 한다.

 

둘 다 설명하기가 애매하지만 내 생각대로 설명해보겠다.

chart.yaml은 정말 메타정보를 저장한 파일이다.

필수 조건 3가지를 적어야 되는데 그것은 apiVersion, name, version 등이 있다. (사진 첨부 설명) 

아래 사진을 보면 (required)라고 적혀 있는 것이 필요한 정보들인 것이다.

values.yaml은 이 파일에 변경하고 싶은 내용을 변수명과 값을 여기에다가 적어놓으면 templates/ 디렉터리 안에 내용도 동적으로 변경할 수 있는 파일을 만든다는 것이다.

이 정도만 내 생각으로 적어보았다. 틀리다고 생각한다면 당신이 맞다;ㅎ 댓글 부탁합니다^^

 

 

우리도 만들어보자. 나는 그전에 만들었던 Git Repo인 GitOps-ArgoCD를 사용하도록 하겠다.

난 원래 Git Repo에 README.md와 YAML 파일 deployment.yaml, service.yaml 파일 2개가 끝이었다.

하지만 여기에 templates/라는 디렉터리를 생성해서 거기에 위에 2개의 YAML 파일을 넣어준 것이다.

 

1. templates 파일 만들기

# templates 폴더 생성
$ mkdir templates

 

2. templates 파일 안에 deployment.yaml, service.yaml 생성하기

내가 직접 작업한 shell을 캡처해서 공부하고 있었다. 

아래는 2개의 yaml 파일을 cp 명령어를 사용해서 복사하여 templates/ 디렉터리에 붙여 넣기 하고 있는 사진이다.

templates 폴더에 2개의 yaml 파일 복사하여 붙여넣기

yaml 파일을 다 복사하고 붙여 넣은 뒤 구조를 tree 명령어로 한눈에 보기 좋게 파악했다면 구조 만들기 대 성 공!

3. templates 디렉터리 말고, Global 디렉터리에 Chart.yaml, values.yaml 만들어주기

Chart.yaml 파일을 만드는 방법은 (여기)에 자세하게 적혀있으니 참고하거나 된다면 다른 사람의 Chart.yaml 파일을 보고 공부하여 적용해보길 바란다.

난 아래처럼 만들어서 적어놓았다. 필수 3가지인 apiVersion, name, version 은 포함해서 말이다.

Chart.yaml 내용

values.yaml 파일은 만들기만 했다. 나중에 되면 변경할 수 있는 내용들이 있는데 나는 아직 docker image를 변경하는데만 사용해보았기 때문에 자세하게 적지는 못한다. (나는 결국 아무것도 안 적었다. 파일만 values.yaml ㅎㅎ;)

Chart.yaml, values.yaml 만들기

4. 아래 명령어로 Helm Chart 만들어주기

  • Helm 차트 설치
$ helm install <release 이름> <차트 위치>

# 내가 입력한 명령어
$ helm install test .

명령어 입력: helm install test .

위에 명령어에 보이는 상태(STATUS)를 보면 deployed가 떴다면 성공한 것이다. 잘 배포되었고 확인해보면 된다.

helm upgrade 명령어를 입력하게 되면 위에 REVISION이 2로 변경된다고 들었지만 아직 무엇을 뜻하는지를 모른다.

위에처럼 helm list 명령어로 조회해보면 install 했던 내용들이 리스트로 보이게 된다.

helm list 명령어를 입력하게 되면 배포가 실패를 하거나 성공하거나 하는 내역들이 다 조회된다고 한다.

helm은 NAMESPACE도 지정할 수 있는데 안 하게 되면 default 기본 값으로 들어가게 된다.

 

이제 확인하면 된다. kubernetes에 배포된 po, svc 조회 명령을 통해 잘 배포되었는지 확인해보면 된다.

나는 쿠버네티스가 유료라서 로컬 쿠버네티스인 minikube로 확인해보았다.

minikube 명령어는 퍼블릭 클라우드 쿠버네티스와 다르기 때문에 따로 여기에 정리해놓진 않겠다.

 

5. minikube에 deployment, service가 잘 배포되었는지 확인

아래 사진을 보면 "test" NAME으로 잘 배포되었는지를 확인하면 된다. (잘 배포되었다😌)

minikube로 잘 배포되었는지 확인 !!!

설치했던 release 삭제 정리를 마무리로 글을 마쳐보겠다.

 

release 삭제 명령어

$ helm delete <release 이름>

# 내가 입력한 명령어
$ helm delete test

test chart 삭제

🤔 블로그 정리 후, 느낀 점

Helm이 무엇인지도 몰랐지만 유튜브 알고리즘이 나를 이끌었다😂

그래서 너무 궁금한 나머지 Helm이 무엇인지 찾아보고 어떻게 작동하는지를 유튜브로 공부하게 되었다.

그렇게 계속 공부하다 보니 이 글을 작성하게까지 되었다ㅋㅋㅋ

차트 개념이 정말 이해하기 처음엔 어려웠다.

누군가가 설명을 해주는 걸 계속 듣고 이해하고 하다가 "역시 실습하면서 배우는 거지" 생각하고 진짜 "그냥" 해봤다.

그랬더니 이해가 조금 되기 시작하고 이것을 ArgoCD 툴을 통해 "Helm으로 배포된 것을 눈으로 볼 순 없을까?" 이런 생각을 하게 되었다.

ArgoCD 툴에서 눈으로 보려면 Helm Repo를 만들면 변화하고 배포되는 것을 볼 수 있다고 하는데 아직 그 단계까지는 못해보았다...

그것은 나아아아중에 하게 될지도 모르지만 지금은 그냥 궁금할 뿐이다.

이번 글을 쓰면서 "어떻게 helm chart를 쉽게 따라 할 수 있게 글을 쓸까?" 이런 생각을 많이 하면서 썼던 것 같다ㅋㅋ

어쨌든 매우 재밌었고 다음엔 ArgoCD 툴에 눈으로 확인할 수 있는 Helm Repo를 만들어보고, 배포해보는 것이 목표다.

 

 

📝 이번 게시물을 만들기 위해 참고한 사이트

1. Helm 공식 문서 - Chart_template_guide

2. Helm 공식 문서 - Charts

3. Helm 공식 문서 - Chart Tests

4. Helm 시작하기 - 3편. helm 차트 생성(Blog)

5. Helm 시작하기 - 4편. helm 차트 설치, 조회, 삭제(Blog)

'DevOps > Helm' 카테고리의 다른 글

Helm Tutorial  (0) 2023.06.22
Helm 알아보기(1) - 설치  (0) 2022.06.16
Comments