패키지 관리 - Helm
update : 2025-01-30 /1h
Helm 소개
헬름은 쿠버네티스용 소프트웨어를 검색하거나, 공유하고 사용하기에 가장 좋은 방법입니다. 쿠버네티스 차트를 관리하기 위한 도구이며, 차트는 사전 구성된 쿠버네티스 리소스의 패키지입니다. (리눅스의 apt, yum, pip 등과 같은 플랫폼 패키지 입니다.)
주요 3가지의 개념이 있습니다.
차트는 헬름 패키지입니다. 이 패키지에는 쿠버네티스 클러스터 내에서 애플리게이션, 도구, 서비스를 구동하는데 필요한 모들 리소스 정의가 포함되어 있습니다. 쿠버네티스에서의 Homebrew 포뮬러, Apt dpkg, YUM RPM 파일과 같은 것으로 생각할 수 있습니다.
저장소는 차트를 모아두고 공유하는 장소입니다. 이것은 마치 Perl의 CPAN 아카이브나 페도라 패키지 데이터베이스와 같은데, 쿠버네티스 패키지용이라고 보면 됩니다.
릴리스는 쿠버네티스 클러스터에서 구동되는 차트의 인스턴스입니다. 일반적으로 하나의 차트는 동일한 클러스터내에 여러 번 설치될 수 있다. 설치될 때마다, 새로운 release 가 생성됩니다.
헬름은 쿠버네티스 내부에 charts를 설치하고, 각 설치에 대해 새로운 release를 생성하고, 새로운 차트를 찾기 위해 헬름 차트 repositories를 검색할 수 있습니다.

Helm Chart의 구조는 아래와 같습니다.
values.yaml : 템플릿에 사용될 변수들 정
tempates: 설치할 리소스 파일들이 존재하는 디렉토리. 해당 디렉토리 내부에 Deployment , Service 등이 존재.
Helm 설치와 간단한 배포
아래와 같은 구성으로 LAB을 진행합니다.

아래와 같은 순서대로 구성합니다.
IDE Terminal에 Helm3 최신 버전 설치
IDE Terminal에 원격 Chart Repo 구성
IDE Terminal에 Helm 명령어 자동완성 구성
Helm 을 통한 nginx 배포 및 확인.
Helm 을 통한 nginx 삭제.
1.Helm 설치
헬름은 헬름 최신 버전을 자동으로 가져와서 로컬에 설치하는 인스톨러 스크립트를 제공합니다. 이 스크립트를 받아서 로컬에서 실행할 수 있습니다. 이미 사전 구성에서 설치되어 있습니다.
정상적으로 설치되었는지 확인합니다.
출력 결과 예시
2. 차트 Repository 구성
Stable한 저장소를 다운로드하여 아래와 같이 구성합니다.
설치 한 이후에는 설치 가능한 차트를 아래와 같은 명령으로 검색할 수 있습니다.
3. Helm 명령어 자동 완성 구성
Helm 명령에 대한 Bash 자동완성을 구성합니다.
4. Helm 을 통한 nginx 배포 및 확인.
Helm Chart를 통한 간단한 nginx 배포를 위해 repo에서 nginx를 검색합니다.
출력 결과 예시
간단한 웹서비스 배포를 위해 nginx를 추가해서 구동해 봅니다. 배포도구로 인기 있는 bitnami repo를 추가해서 nginx를 설치해 봅니다.
다시 nginx를 검색해 봅니다.
출력결과 예시
helm install 명령을 통해 nginx를 설치해 봅니다.
아래와 같은 결과를 얻을 수 있습니다.
Pod와 서비스 배포를 확인합니다.
아래와 같은 결과가 출력됩니다.
ELB 주소를 확인합니다.
해당 주소로 접속해 봅니다.

EC2 대시보드에서 ELB가 정상적으로 생성된 것을 확인 할 수 있습니다.

아래 명령을 통해 배포된 내용을 확인합니다.
출력 결과 예시
5. Helm을 통한 nginx 삭제
아래 명령을 통해 생성된 Helm을 삭제합니다.
정상적으로 삭제되었는지 확인합니다.
Helm을 이용한 Microservice 배포.
아래와 같은 구성으로 LAB을 진행합니다.

6.Chart 만들기
helmdemo 라는 Chart를 생성합니다.
Helm Chart를 생성하면, 아래와 같은 디렉토리 구조를 생성되어 있습니다.
deployment.yaml: Kubernetes 배포를 만들기위한 기본 목록_helpers.tpl: 차트 전체에서 재사용 할 수있는 템플릿 도우미를 배치 할 수있는 장소ingress.yaml: service를 위한 Kubernetes ingress object 생성을 위한 기본 목록NOTES.txt: 차트의“도움말 텍스트”. 사용자가 Helm Install을 실행할 때 이 정보가 표시됩니다.serviceaccount.yaml: 서비스 계정을 만들기위한 기본 목록입니다.service.yaml: Depolyment 를 위한 서비스 엔드 포인트 작성을 기본 목록tests/: 차트 테스트가 포함 된 폴더
7. Chart 사용자 정의
새로운 Chart구성을 위해 기본 생성된 파일들을 삭제합니다.
다음 코드 블록을 실행하여 새로운 chart.yaml 파일을 생성합니다.
앞서 git에서 복제한 파일들 중에서 helm-chart-demo 폴더의 파일을 복사합니다.
아래 deploy용 yaml manifest 파일은 replica와 image 값이 helm chart의 value를 참조하도록 선언되어 있습니다. 각 파일에서 확인해 봅니다. (ecsdemo-frontend-deployment.yaml, ecsdemo-crystal-deployment.yaml, ecsdemo-nodejs-deployment.yaml)
이제 values.yaml을 생성하고, Values 들에 대한 값을 정의합니다.
helmdemo에 사용할 namespace를 생성합니다.
8. Chart 배포
Helm chart는 실제 배포하지 않고 "--dry-run" 플래그를 사용하여, 랜더링 된 템플릿을 빌드하고 출력할 수 있습니다.
출력 결과 예제
템플릿이 정상적으로 렌더링되고, 빌드 출력이 이뤄졌으므로 차트를 배포합니다.
출력 결과 예시
정상적으로 배포되었는 지 확인해 봅니다.
출력 결과 예시
9. 서비스 확인
아래 명령을 통해 service loadbalancer(ELB) 의 DNS name을 확인합니다.
출력 결과 예시
정상적으로 서비스에 접속되는 것을 확인 할 수 있습니다.

helm list에도 정상적으로 등록되어 있는지 확인합니다.
출력 결과 예
10. Rolling Back 구성
배포 중에 이슈가 발생하더라도, Helm을 사용하면 손쉽게 이전 배포 버전으로 Rolling back 할 수 있습니다. 앞서 출력결과에서 "Revision" 값이 "1"인 것을 확인했습니다. 이제 helm Chart를 변경하고 업데이트 한 이후 , 다시 Rollback 하는 과정을 수행하겠습니다.
먼저 Helm Chart로 배포한 내용을 확인합니다. REVISON:1 으로 구성된 것을 확인 할 수 있습니다.
Rolling Back 시험을 위해, 먼저 helm Chart의 Value를 변경합니다. ~/environment/helm-chart-demo/values.yaml 파을 다시 열고, Cloud9 IDE 편집기에서 replicat의 값을 아래와 같이 수정합니다.
변경 후 File 내용 확인 (values.yaml)
"values.yaml" 파일이 모두 수정되었으면, helm을 upgrade 합니다.
출력 결과 예시
helm chart로 배포한 Revision이 "2"로 변경되었습니다.
정상적으로 배포되었는 지 확인합니다.
아래와 같이 pod 의 숫자가 1개로 줄었습니다.
문제 해결을 위해 Rollback을 수행합니다.
먼저 현재 helm Chart를 통해 배포된 상태를 확인합니다.
아래와 같은 결과를 확인 할 수 있습니다.최종 배포시간과 Revision 값을 확인합니다.
helm 배포 히스토리를 확인합니다.
아래와 같은 결과를 확인 할 수 있습니다. Revison을 확인하고, 정상적으로 수행되었던 Revision 값으로 Rollback 할 것입니다.
Rollback 명령을 통해 정상 배포 버전으로 Rolling Back 합니다.
이제 pod들이 다시 3개로 확장되었는지 확인해 봅니다.
아래와 같이 정상적으로 Pod가 배포됩니다.
helm history를 통해 Revision을 확인해 봅니다.
d아래와 같이 REVISON 3은 DESCRIPTION 에 자동으로 Rollback 되었고, REVISION 1번으로 복귀하였음을 알려줍니다.
~/environment/helm-chart-demo/values.yaml 파을 다시 열고, Cloud9 IDE 편집기에서 replicat의 값을 아래와 같이 수정합니다.해 value.yaml 파일 다시 정상적으로 수정합니다.
생성했던 helmdemo를 삭제합니다. 아래 ChartMuseum 구성과 배포를 위해서 반드시 삭제합니다.
ChartMuseum 구성과 배포.
ChartMuseum은 Amazon S3,Google Cloud Storage, , Microsoft Azure Blob Storage, Alibaba Cloud OSS Storage, Openstack Object Storage, Oracle Cloud Infrastructure Object를 포함한 클라우드 스토리지 백엔드를 지원하는 Go (Golang)로 작성된 오픈 소스 Helm Chart Repository 서버입니다.
이 랩에서는 ChartMuseum을 구성하여, S3에 Helm Chart를 위한 로컬 레포지토리를 만들어 보겠습니다.
1.ChartMuseum 설치.
먼저 ChartMuseum을 설치합니다.
Cloud9 IDE를 이용해서 Chartmuseum을 구동합니다. 스토리지 저장소는 S3를 사용합니다. 사전에 s3 bucket을 AWS CLI 또는 Console 에서 생성합니다.
S3를 CLI로 생성합니다.
[참고 - AWS Console] AWS 서비스 콘솔에서 S3를 생성합니다
AWS 서비스 - S3

버킷이름은 고유해야 합니다.

dkfo아래와 같이 Cloud9 IDE에서 aws cli로 실행하여, S3 버킷을
정상적으로 생성되었는지 확인합니다.
아래 명령어를 통해서 debug하고 정상적으로 동작하는지 확인합니다. --storage-amazon-bucket="생성한 버킷 이름" 을 입력합니다.
Cloud9 IDE의 Security Group에서 Chartmuseum으로 사용될 서비스 포트를 오픈해 주고, Cloud9의 공인 IP를 확인합니다.
EC2 - 인스턴스 - Cloud9 인스턴스 선택 - 퍼블릭 IPv4 주소

EC2 - 인스턴스 -Cloud9 인스턴스 선택 - 보안 - 보안 그룹 선택

인바운드 규칙 편집 선택

TCP 8888 포트 추가 / 소스 Anywhere-IPv4

helm repo list에 정상적으로 등록되었는지 확인합니다.
이제 외부에서 정상적으로 서비스가 접속되는 지 확인해 봅니다.
Cloud9 IDE 콘솔에서 Public IP를 확인해 봅니다

2. Chart 패키징 및 업로드.
Helm Client (Cloud9 IDE)에 저장소를 추가해 봅니다.
출력 결과 예시
이제 앞서 생성한 eksdemo helm chart 패키징 합니다.
출력 결과 예시
eksdemo heml chart가 정상적으로 패키징 되었는지 확인합니다.
3. Chartmuseum 으로 부터 배포
Chartmuseum에 패키징을 업로드 합니다.
출력결과 예제
S3에 정상적으로 Chartmuseum이 배포되었는지 확인합니다.
출력 결과 예제
이제 등록된 Repo를 업데이트하고, Chartmuseum 로컬 레포지토리를 검색해 봅니다.
출력결과 예제
등록된 Chartmuseum 로컬 레포지토리에서 패키지를 배포합니다.
출력 결과 예시
정상적으로 배포되었는지 확인합니다.
출력 결과 예시
ELB DNS 레코드로 접속해 봅니다.

Last updated
Was this helpful?