Helm이란?
helm은 deployment, service, ingress 등 yaml 파일들을 하나의 package로 관리하고자할 때 사용하는 도구이다.
기본적으로 배포한 애플리케이션을 삭제하기 위해선 deployment.yaml, service.yaml, ingress.yaml 등 따로 삭제해주어야하지만, helm을 사용하게 되면 설치와 삭제 모두 한번에 가능해서 간편하다.
주요 개념 3가지
1. Chart: helm package에 해당하는 부분으로, 이 패키지에는 Kubernetes Cluster 내에서 애플리케이션, 툴, 서비스를 구동하는데 필요한 모든 Resource가 정의되어있다. 즉, Chart는 templates으로 설치하고자 하는 쿠버네티스 리소스의 설치 스크립트라고 볼 수 있다.
2. Repository: Chart를 모아두고 공유하는 공간이다.
3. Release: Kubernetes Cluster에서 구동되는 Chart의 인스턴스이다. 일반적으로 하나의 Chart는 동일한 Cluster 내에 여러 번 설치될 수 있다. 이때 설치될 때마다 새로운 Release가 생성된다.
Helm 설치 및 설정
Helm 설치
$ cd ~
$ curl -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
Helm Chart Repository 초기화
$ helm repo add stable https://charts.helm.sh/stable
Helm 사용하기
Chart를 Repository에서 조회해서 설치한 뒤에 사용하는 방법과, 직접 Chart를 create해서 사용하는 방법이 있다.
1. Repository를 통한 Chart 설치
1) Repository 업데이트
$ helm repo update
2) Repository에서 Chart 조회
// Helm chart 목록 조회
$ helm search repo stable
// Helm chart 검색
$ helm search repo <word>
NAME CHART VERSION APP VERSION DESCRIPTION
aaa-stab… 8.4.1 2.1.1 the community ..
// Repository 추가
$ helm repo add [레포지토리 이름] [레포지토리 주소]
3) 로컬에 등록된 Repository 조회 및 삭제
// local에 등록된 repository 조회
$ helm repo list
// 등록했던 repository 삭제
$ helm repo remove <name>
4) Repository에서 조회한 Chart를 이용한 Package 설치 및 삭제
// [RELEASE-NAME]은 사용자가 정의하는 이름, [CHART-NAME]는 Repository에서 확인한 Chart 이름
$ helm install [RELEASE-NAME] [CHART-NAME] [flags]
// [NAME]을 따로 지정하지 않고 helm이 자동으로 생성해주는 이름으로 사용하고 싶은 경우
$ helm install [CHART-NAME] --generate-name
// Package 삭제
$ helm uninstall [RELEASE-NAME]
2. 사용자가 직접 Chart를 만들 경우
1) Helm Chart 생성
$ helm create [RELEASE-NAME]
ex) helm create test-chart
위 명령어를 입력하면 현재 위치에 다음과 같은 파일이 자동으로 생성된다.
.
└── test-chart
├── Chart.yaml - Chart의 정보를 정의하는 파일로 Chart의 이름, 버전 등을 정의
├── charts - dependency chart 파일들이 해당 디렉토리 아래에 생기게 된다.
├── templates - Kubernetes 리소스 템플릿이 보관되는 디렉토리
│ ├── NOTES.txt - Chart를 설치 후 출력되는 내용을 정의
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── service.yaml
│ ├── serviceaccount.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml - templates에 사용될 변수들을 모아놓은 파일
templates
Kubernetes 애플리케이션 배포를 위해 작성해두었던 deployment.yaml, service.yaml, ingress.yaml 파일들을 helm templates 폴더 내부에 넣어주면 된다.
참고로, 각각의 deployment.yaml, service.yaml, ingress.yaml 파일이 아닌 deployment.yaml 하나의 파일 내에 --- 로 구분하여 모든 내용을 작성해도 된다.
values.yaml
values.yaml은 templates 디렉터리 내부에 있는 yaml 파일들을 작성할 때 동일한 값들을 하드코딩하지 않고 values.yaml에 설정한 변수를 통해 일괄적으로 사용할 수 있다.
예를 들어, values.yaml을 다음과 같이 작성했을 때,
name: testapp
image:
repository: nginx
service:
type: ClusterIP
port: 80
templates 디렉터리 내부 yaml 파일에서 testapp을 {{ .Values.name }}으로, nginx란 값을 {{ .Values.image.repository }}로 대체하여 작성할 수 있다. 또한, ClusterIP의 경우 {{ .Values.service.type }} 으로 작성하면 된다.
deployment, service, ingress 등 yaml 파일을 작성할 때 동일한 값이 많이 존재하는데, 이러한 값들을 values.yaml에 정의해놓으면 값을 모두 찾아 수정할 필요 없이 values.yaml에서의 값만 바꿔주면 되므로 편리하다.
2) Helm Release
$ helm install [RELEASE-NAME] [Chart 생성 경로]
ex) helm install testhelm ./testapp
3) 적용 여부 확인
kubernetes pod, service 조회하여 잘 적용되었는지 확인
$ helm ls
$ kubectl get pods --all-namespaces
$ kubectl get svc --all-namespaces
4) Helm upgrade
$ helm upgrade [RELEASE-NAME] [Chart 생성 경로]
5) Helm Delete
$ helm uninstall -n [namespace] [RELEASE-NAME]
'Kubernetes' 카테고리의 다른 글
[Kubernetes] kubectl 명령어 정리 (0) | 2022.04.08 |
---|---|
Kubernetes 이론과 설치 방법 알아보기 (0) | 2022.04.05 |