헬름 (Helm)
쿠버네티스는 파드를 생성하는 Deployment, ReplicaSet, Pod, StatefulSet, DaemonSet, Job, CronJob 만으로 구성할 수 있지만, Service 나 ConfigMap 그리고 Secret, Claim 등 과 함께 구성되는 경우가 많다.
그러나, 이렇게 여러 개의 객체를 별도로 관리하게 되면 관리가 어렵다.
다양한 리소스를 각각 관리하지 않고 하나의 패키지로 관리하는 도구가 Helm이다.
리눅스에서 yum, apt 이나 Python의 pip 등 과 유사한 개념으로, 많은 프레임워크 개발 업체들이 쿠버네티스 환경에서 헬름을 사용해 애플리케이션을 설치하도록 헬름 파일을 제공한다.
1. 헬름의 주요 구성 요소
1) 헬름 차트
애플리케이션 설치에 사용되는 네트워크, 스토리지, 보안과 관련된 여러 쿠버네티스 리소스를 묶어놓은 패키지다.
애플리케이션을 설치할 때 쿠버네티스에 하나의 디렉토리에 관련 파일을 묶어놓고, 디렉터리를 실행하듯이 헬름 차트를 이용해서 한 번에 설치한다.
디렉터리 구성
Chart.yaml
: 차트에 대한 정보가 담긴 파일
LICENSE
: 라이선스 정보가 담긴 텍스트 파일
README.md
: 설명
values.yaml
: 차트의 기본 템플릿 변수 파일
charts/
: 차트에 종속된 차트들을 포함하는 디렉토리
crds/
: 커스텀 자원
templates/
: 유효한 쿠버네티스 매니페스트 파일
templates/NOTES.txt
: 차트 사용법
헬름 레포지토리
헬름 차트를 저장하고 있는 장소로,
솔루션 업체들이 직접 헬름 레포지토리를 제공하는데 없는 경우에는 ArtifactHub에서 찾을 수 있다.
여러 원격 레포지토리를 등록해서 사용하는 것이 가능하다.
헬름 템플릿
별도의 파일에 값을 저장하고 다른 파일에서 사용하는 기능이다.
values.yaml
파일에 키와 값 형태로 데이터를 저장하고, 다른 파일에서 가져다 사용한다.
values.yaml
favoriteDrink: coffee
manifest.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.favoriteDrink }}
2. 헬름 차트를 이용한 nginx 웹 서버 설치 실습
과정
- 애플리케이션 설치에 사용되는 헬름 레포지토리 등록
- 헬름 차트 다운로드
- 애플리케이션 설치
- 필요한 경우 재배포
- 헬름 차트 삭제
1) 헬름 설치
다음의 명령어를 통해 다운로드할 수 있다.
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
스크립트 파일을 다운로드 받아 bash로 명령문을 수행해서 /usr/local/bin/helm
에 설치한다.
삭제하고자 하면 설치된 디렉터리의 파일을 삭제하면 된다.
버전 확인
helm version
2) 주요 명령어
helm repo add
: 애플리케이션 설치에 사용되는 헬름 레포지토리를 로컬 환경에 추가한다.helm pull
: 헬름 차트 파일을 로컬 호스트로 내려받는다.cp 파일경로1 파일경로2
: 파일경로1을 파일경로2로 복사한다.helm install {helm이름} -f 환경설정 파일
helm ls
: 설치된 헬름 차트 목록을 출력한다.helm get manifest
: 현재 실행 중인 헬름 차트의 전체 YAML 파일 목록 및 설정을 확인helm upgrade
: 재배포helm delete
: 헬름 차트 삭제
3) nginx 설치
레포지토리 등록
helm repo add bitnami https://charts.bitnami.com/bitnami
로컬 레포지토리의 캐시를 업데이트
helm repo update
nginx 헬름 차트 검색
helm search repo nginx
nginx 헬름 차트 다운로드
helm pull bitnami/nginx
압축 해제
압축된 파일이 다운로드 되었으므로 압축을 해제한다.
tar xvfz nginx-18.2.4.tgz
원본 파일 삭제
rm -rf nginx-18.2.4.tgz
버전 관리를 하고자 하는 경우 디렉토리 이름을 수정한다.
mv nginx nginx-18.2.4
압축을 해제한 디렉터리
templates 디렉터리에 쿠버네티스 관련 파일이 만들어지고 values.yaml 파일에 환경 변수를 기재하는데 이 파일의 내용을 변경해서 배포한다.
압축을 해제한 디렉터리로 이동해서 실행한다.
cd nginx-18.2.4/
helm install nginx -f values.yaml .
다음과 같이 nginx 파드가 1개 생성된 것을 확인할 수 있다.
만들어진 helm 삭제
helm delete nginx
설정을 변경해서 설치
아래 명령어로 values.yaml 파일을 복사한다.
cp values.yaml my-values.yaml
복사한 my-values.yaml 파일에서 replicaCount 값을 3으로 변경한다. (스크롤을 좀 내리다 보면 보인다.)
nano my-values.yaml
변경한 파일로 재실행
압축을 해제한 디렉터리에서 다음 명령어를 실행한다.
helm install nginx -f my-values.yaml .
다음 명령어로 helm과 파드가 잘 만들어졌는지 확인한다.
helm ls
kubectl get pods
이번에는 파드가 3개 생성되어 실행되고 있는 것을 확인할 수 있다.
참고) 이제 사용하지 않는 디플로이먼트를 삭제하려면 다음 명령어를 이용한다.
파드만 삭제를 하면 재생성될 수 있기 때문에, 특정 파드를 재생성하지 않도록 하려면 해당 파드를 관리하는 Deployment, ReplicaSet, 혹은 StatefulSet 자체를 삭제해야 한다.
kubectl delete deployment <디플로이먼트-이름>
헬름 삭제
helm delete nginx
헬름을 삭제하면, 관련 deployment와 파드들이 모두 삭제된다.
4) kiamol/vweb 설치 실습
kiamol.net 레포지토리의 kiamol/vweb을 설치하는 실습을 진행해보겠다.
레포지토리 등록
helm repo add kiamol "https://kiamol.net"
레포지토리 업데이트(로컬 레포지토리 캐시 업데이트)
helm repo update
vweb 헬름 차트 검색
helm search repo vweb
Helm을 이용해 애플리케이션 vweb
의 차트 파일을 로컬에 다운로드할 수도 있다.
helm pull kiamol/vweb
명령어로kiamol
저장소에서vweb
애플리케이션의 Helm 차트를 받아vweb-2.0.0.tgz
파일로 저장한다.- 이 차트 파일은 Kubernetes에서 애플리케이션을 배포하기 위한 설정 파일 모음이다.
환경 변수를 values.yaml 파일에 기록해두기도 하지만, 기본값을 변경해서 설치하기도 한다.
기본값 확인
기본값을 확인하기 위해서는 다음 명령어를 이용한다.
helm show values kiamol/vweb
다음 명령어를 사용할 수도 있다:kiamol
저장소의 vweb
차트에서 버전 1.0.0_에 해당하는 기본 값(_values)을 확인한다.
helm show values kiamol/vweb --version 1.0.0
이 명령어는 해당 차트가 사용하는 기본 설정값을 출력하여, 사용자 정의 설정을 추가하거나 수정할 때 참고할 수 있게 해준다.
동작 방식:
helm show values
: Helm에서 차트의 기본 설정값을 표시하는 명령어다.kiamol/vweb
: Helm 저장소kiamol
에서vweb
애플리케이션 차트를 지정한다.--version 1.0.0
:vweb
차트의 특정 버전인 _1.0.0_에 해당하는 설정값을 출력한다.
기본값을 수정해서 배포
기본값을 수정해서 배포한다.
helm install --set servicePort=8010 --set replicaCount=1 ch10-web kiamol/vweb --version 1.0.0
디플로이먼트와 레플리카셋 확인
만들어진 디플로이먼트와 레플리카셋을 확인한다.
kubectl get deploy,replicaset
디플로이먼트와 레플리카셋이 정상적으로 만들어져 작동하는 것을 확인할 수 있다.