- Helm 소개
- Helm 설치
- Helm 구성
- Helm 사용
- Helm 차트 구조
1. Helm 소개
Helm
Helm - The Kubernetes Package Manager.
helm.sh
Helm은 쿠버네티스 패키지 매니저다.
Helm을 통해 애플리케이션을 가져와서 실행하고, 내가 만들어서 배포하는 등 Repository로써의 역할을 한다.
Repository라고 하면 우리가 잘아는 CentOS와 같은 RedHat 계열의 yum 저장소, Ubuntu와 같은 Debian 계열의 apt 저장소가 대표적인 예라고 할 수 있다.
Helm은 Kubernetes에서 가장 많이 사용되는 Repository(저장소)로 배포, 업데이트, 버전 관리, 등 애플리케이션을 효과적으로 패키지화하고 관리할 수 있는 강력한 도구로 널리 사용되고 있다.
더군다나 Helm은 CNCF 프로젝트 중 하나로서 개발과 지원이 커뮤니티에 의해 활발히 이루어지고 있다.
2. Helm 설치
https://helm.sh/ko/docs/intro/install/
헬름 설치하기
헬름 설치하고 작동하는 방법 배우기.
helm.sh
Helm도 다양한 운영체제에서 설치하도록 지원한다.
Script, hombrew(MacOS), chocolatey/Scoop(Windows), Apt(Debian, Ubuntu), dnf/yum(Fedora), Snap, pkg(freeBSD) 등 여러 버전을 지원하니 자신에게 맞는 방법을 이용하여 설치하면 된다.
나는 Script를 활용하여 설치할 것이다.
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
설치 후 버전 정보가 나오면 성공이다.
helm version

helm 명령어 자동 완성을 위한 명령
source <(helm completion bash)
echo "source <(helm completion bash)" >> ~/.bashrc
helm의 사용 방법에 대한 자세한 정보는 --help를 통해 확인 가능하다.
helm --help
3. Helm 구성
- Charts : helm 패키지. k8s application, tool, service를 구동하는데 필요한 resource의 집합(mariadb, nginx, redis 등)
- Repository : helm chart를 모아두고 공유하는 저장소
- bitnami(https://bitnami.com/stacks)
- https://bitnami.com/stacks/helm
- Bitname는 가상 어플라이언스 및 웹 애플리케이션, 개발 스택용 소프트웨어 패키지 및 설치 라이브러리
Repository 추가/제거/확인하는 법
helm repo [add|remove|list] [Name] [URL]
Helm Repository를 확인하는 명령
helm repo list

뭘 추가한 것이 없으니 아무것도 없다.
리포지토리를 추가해보자.
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo list

https://bitnami.com/stacks/helm
Helm Charts
Redmine Bug Tracking,Project Management,Developer Tools,Ruby on Rails,Phusion Passenger,Apache,MariaDB,redmine
bitnami.com
참고로 Bitnami는 우리가 잘 아는 대부분의 애플리케이션이 포함된 리포지토리다.
궁금하면 helm search repo를 입력하면 전체 목록을 볼 수 있다.
생성한 리포지토리 삭제하는 법
helm repo remove bitnami
4. Helm 사용
Helm 하위 명령어
| 명령어 | 의미 |
| helm search | Helm Hub 및 Helm Repositories에서 차트 검색 |
| helm install | Kubernetes에 차트 설치 |
| helm uninstall | 실행중인 차트 삭제 |
| helm list | 주어진 kubernetes 네임 스페이스의 모든 릴리즈 나열 |
| helm show | 차트에 대한 정보 출력 |
| helm inspect | 차트에 대한 상세 구성 정보 출력 |
| helm upgrade | 릴리스를 기본 차트의 새 버전으로 업그레이드 |
| helm pull | Helm 허브 또는 Helm 저장소에서 차트 다운로드 및 추출 |
| helm create | 새로운 Helm 차트를 기본 차트 구조 형태로 생성 |
| helm lint | 차트의 유효성 검증 |
| helm upgrade | 실행중인 차트를 업그레이드 |
| helm rollback | 실행중인 차트를 이전 버전으로 복구 |
| helm repo | 차트 저장소 추가, 업데이트, 색인 생성, 나열 또는 제거 |
| helm package | 현재 폴더에 차트 아카이브 생성 |
리포지토리에서 nginx 차트가 있는 지 확인하는 방법
helm search repo nginx

차트에 대한 정보를 보는 방법
helm show chart bitnami/nginx

nginx차트의 values.yaml파일의 구성 정보를 보여주는 명령
helm inspect values bitnami/nginx

inspect의 하위 명령들
- all : 차트의 전체 정보 출력
- chart : 차트의 definition을 출력
- crds : 차트의 CRDs를 출력
- readme : 차트의 README를 출력
- values : 차트의 값을 출력
values 로 정보를 출력하면 bitnami/nginx에 대한 모든 세부적인 설정과 service, configmap, secret 등 기본으로 구성되어 있는 리소스들의 정보를 볼 수 있다.
이러한 정보를 바탕으로 helm install로 해당 애플리케이션 차트 아카이브를 Kubernetes에서 실행할 수 있다.
helm install webserver bitnami/nginx
values에 의하면 bitnami/nginx 내부에 service 기본 타입이 LoadBalancer로 되어있다.
하지만 나는 다르게 값을 조정하여 사용하고 싶다면 그것도 가능하다.
helm install webserver --set service.type=NodePort bitnami/nginx

실행을 하면 어떻게 내부에서 실행되고 있는지 정보를 화면에 출력한다.
내부에서 무엇이 실행되었는지 확인하면 다음과 같다.

차트를 실행하면 deployment와 ClusterIP, NodePort가 각각 생성된 것을 볼 수 있다.

생성된 NodePort로 접속을 시도했을 때 해당 포트로 잘 접속이 되는 것을 볼 수 있다.
여기서 실행중인 차트 정보를 확인하는 방법은 다음과 같다.
helm list

revision 정보가 있는 것으로 보아 버전을 업데이트하거나 rollback하는 일도 가능할 것이라 예측이 가능하다.
실행한 helm 차트 삭제
helm uninstall webserver
values.yaml파일을 수정하여 실행하는 방법
helm inspect values bitnami/nginx > nginx_values.yaml
해당 리소스 정보를 파일로 생성했으면 vim 에디터로 556라인에 있는 type을 NodePort로 변경하여 저장한다.
변경된 정보로 차트 실행
helm install webserver -f nginx_values.yaml bitnami/nginx


이전과 동일하게 실행이 된다.
하지만 이번에는 값을 커맨드라인에서 바꾸지 않고 수정된 yaml 파일을 적용하여 실행시켰다.
단순히 한두가지의 정보만 수정한다면 커맨드라인에서 수정하는 것이 편하지만 변경할 부분이 많다면 방금과 같은 방식으로 yaml파일 자체를 수정하여 실행하는 것이 더 편하다.
리소스 정리
helm uninstall webserver
5. Helm 차트 구조
helm pull bitnami/nginx
차트를 내려 받으면 다음과 같은 .tgz 파일이 생긴다.

압축을 해제한다.
tar zxvf nginx-15.9.1.tgz


해당 디렉토리의 구조를 tree 명령으로 확인한다.
tree nginx

우리가 inspect 명령으로 알아본 values.yaml파일의 정보와 그 외 모든 리소스들의 정보들이 들어있다.
아래 영상을 참조하였습니다.
https://youtube.com/playlist?list=PLApuRlvrZKohLYdvfX-UEFYTE7kfnnY36&si=QfnuyP_2OpoDOsX1
[따배쿠 Advance] 쿠버네티스 심화 시리즈
www.youtube.com
'Kubernetes' 카테고리의 다른 글
| Kubernetes 기초 - Helm(3) (0) | 2024.01.30 |
|---|---|
| Kubernetes 기초 - Helm(2) (0) | 2024.01.27 |
| Kubernetes 기초 - Custom Resources (0) | 2024.01.24 |
| kubernetes 기초 - RBAC(2) (0) | 2024.01.24 |
| Kubernetes 기초 - RBAC(1) (0) | 2024.01.23 |