Helm 은 무엇인가?
Kubernetes용 패키지 관리자로, 복잡한 애플리케이션을 하나의 단위(Package 또는 Chart) 로 관리할 수 있게 해주는 도구이다
하나의 서비스에는 여러개의 yaml 파일들이 존재하는데 이 각각의 파일들을 helm이 없다면
직접 apply로 적용하고 환경에 맞게 하드코딩 값들을 수정하고 , 삭제하고 그 과정에서 모든 리소스를 추적 관리 해야하기 때문에 복잡하고 비효율 적이다
-> 그래서 helm이 여러 리소스를 하나의 패키지로 묶어서 관리를 해준다.
Helm 설치
helm 설치 자체는 운영서버나 로컬 환경에서 설치가 가능한데 설치전에
kubectl 가 설치되어있어야하고(기술적 필수는 아닌데 , 설치하고 실제 사용을 위해서는 필요하기 때문) kubernetes 클러스터에 접근할 수 있도록 kubeconfig 설정이 되어있어야한다.
helm이 설치한뒤에 kubetl을 직접 사용하는건 아니지만 ~ /.kube/config파일을 참고해서 클러스터에 접근 하기 때문이다
설치 방법은 운영체제에 따라 다르기 때문에 공식 페이지에서 확인하면 된다 ( https://helm.sh/docs/intro/install/)
Helm 2 / 3 차이
Tiller의 제거 (가장 큰 변화)
Helm 2: Tiller라는 서버 컴포넌트를 클러스터 내부에 설치해야 했음
- Helm CLI → Tiller → Kubernetes API Server
- Tiller는 권한이 과도하게 높아 보안 문제 발생
Helm 3: Tiller 제거
- Helm CLI가 직접 Kubernetes API와 통신
- RBAC 기반 보안을 Kubernetes 자체에서 처리 가능
Three-way Strategic Merge Patch 도입
Helm 2: 이전 차트와 현재 차트만 비교 → 실제 클러스터 상태는 고려하지 않음
→ kubectl 등으로 수동 수정된 값은 롤백/업그레이드 시 무시됨
Helm 3: 현재 차트, 이전 차트, 실제 클러스터 상태를 모두 비교
→ 수동 변경된 값까지 감지해서 정확하고 안전하게 롤백/업그레이드 가능
Helm 컴포넌트
helm의 구성 요소
| 구성요소 | 설명 |
| Helm CLI | 로컬에 설치되어install,upgrade,rollback등 Helm 작업 수행 |
| Chart | 여러 YAML 템플릿과 설정값(values.yaml)이 포함된 애플리케이션 패키지 |
| Release | Chart를 실제 클러스터에 설치한 인스턴스 (→ 하나의 설치 단위) |
| Revision | Release의 변경 이력 스냅샷, upgrade, rollback 시 자동 생성 |
| Metadata | Release 상태 정보 → Kubernetes Secret에 저장되어 팀원들과 공유 가능 |
helm chart란
chart는 deployment, service, secret등 다양한 리소스를 포함한 파일모음으로
helm이 참조하는 설치 설명서이다
values.yaml은 사용자가 직접 설정할 값들을 모아둔 설정파일로 (이미지 이름, 포트번호 등)
템플릿 파일(templates/*.yaml) 내에서 {{ .Values.keyname }} 같은 식으로 값 삽입됨
# chart의 기본구조
mychart/
├── Chart.yaml # 차트 메타정보 (이름, 버전 등)
├── values.yaml # 기본 설정값 (사용자 입력값)
└── templates/ # 실제 생성될 yaml 파일들
├── deployment.yaml
└── service.yaml
참고로 values.yaml은 일반 yaml 문법을 따르고 kubernetes 리소스는 아니다
chart.yaml 예시
apiVersion: v2 # Helm Chart API 버전 (v2는 Helm 3용)
name: wordpress # Chart 이름 (이 Helm Chart의 고유 이름)
description: A Helm chart for WordPress # Chart 설명
type: application # Chart 타입: application (기본) 또는 library (재사용 목적일떄)
version: 10.2.1 # Chart 자체의 버전 (Chart의 수정 이력 관리용)
appVersion: 6.2.1 # 실제 배포되는 애플리케이션의 버전 (예: WordPress 버전)
dependencies: # 이 Chart가 의존하는 다른 Chart 목록
- name: mariadb # 의존하는 Chart 이름
version: 11.0.0 # 해당 Chart 버전
repository: https://charts.bitnami.com/bitnami # Chart를 받을 저장소 주소
keywords: # Artifact Hub 같은 곳에서 검색에 사용될 키워드 목록
- blog
- cms
- wordpress
maintainers: # Chart를 관리하는 사람들의 정보
- name: bitnami
email: containers@bitnami.com
home: https://wordpress.org/ # 프로젝트 공식 홈페이지
icon: https://bitnami.com/assets/stacks/wordpress/img/wordpress-stack-220x234.png # Chart 대표 아이콘
Chart 환경변수 설정
install을 하면 바로 실행이 되버리기 때문에 values.yaml(환경변수 파일) 수정할 시간이 없다
그래서 install 할때 set 옵션을 주면 된다
helm install my-site bitnami/wordpress \
--set wordpressBlogName="Helm Tutorials" \
--set wordpressEmail="john@example.com"
선언할게 너무많으면 value 저장한 yaml파일 만들어서 --values 옵션 줄 수 있다
helm install my-site bitnami/wordpress \
--values custom-values.yaml
아니면 install하기전에 pull을 해서 먼저 파일들 다운받을 수 있다
helm pull --untar (이거하면 압축해제)
암축해제한 그 위치에서 설치하면되는것
helm pull bitnami/wordpress --untar
# 그리고 values.yaml 수정
helm install my-site ./wordpress
--> 기존 차트 자체가 업데이트 되는거라서 chart 업그레이드에는 불편하다 (helm이 chart의 원본과 버전을 인식 못한다)
그리고 values 명령어를 통해서 설정 가능한 환경 변수들을 확인할 수 있다
helm show values argo/argo-cd --version 7.7.3
위에서 나온 yaml 중에 필요한것들만 추려서 파일 을 생성하고
helm install argo argo/argo-cd -f my-values.yaml 이런식으로 사용해서 설치할 수 도 있다
Release 개념
동일한 chart를 기반으로 여러개의 release 생성이 가능하다
각 생성된 release는 서로 독립적으로 업그레이드, 삭제, 커스터마이징이 가능하다
helm chart 다운로드
공식 및 커뮤니티 Chart는 Artifact Hub ) 에서 검색 가능
대표 리포지토리: bitnami, appscode, truecharts, community operators 등
공식 인증 마크(Verified Publisher) 가 있는 Chart 우선 사용 권장
Repo와 Release
| 용어 | 설명 |
| repo | Chart 파일들이 저장된 위치 (URL 기반, 설치 원본) |
| release | Chart를 사용해 클러스터에 생성된 실행 인스턴스(K8s 리소스들의 묶음) |
결국 repo는 다운할것의 url을 저장하는거라고 보면된다 (무조건 url만 저장은 아니라 chart목록이 담긴 index.yaml도 같이 저장)
하나의 repo 안에 설치할 수 있는 여러개의 chart들이 들어있는거라고 보면 된다 (참고로 같은 chart여도 여러개의 버전 존재 가능하다)
최초에 helm을 설치하고 난뒤에 원하는 Repo를 그래서 추가해줘야한다
helm repo add <이름> <URL>
helm repo update # 그리고 repo도 주기적으로 업데이트 필요하다 차드 목록 및 버전 업데이트
helm search repo <이름> # repo 안에서 설치 가능한 차트 검색할 수 있다
helm install <릴리즈이름> <repo/chart> # 차트 설치
-> install로 설치된게 바로 릴리즈
그리고 릴리즈는 namespace에 종속된다 (해당 namespace에 관련내용이 설치되는거기 때문)
helm list -n default → default 네임스페이스의 릴리즈만 보임 (조회할떄도 이렇게 조회를 해야하는것)
Template
차트를 실제 쿠버네티스 리소스(yaml) 형태로 렌더링 해주는 도구
helm template [RELEASE_NAME] [CHART]
kubectl apply 없이도 미리 어떤 리소스가 생성될지 확인해볼 수 있다
- helm install을 하기전에 무슨 리소스가 생성되는지 미리 확인하는 용도
- helm으로 배포안하고 렌더링된 yaml 만으로 kubectl apply로 직접 배포할 수도 있다
단순 철력만 하기때문에 파일 생성을 해주려면 리디렉션(>)을 사용해서 yaml파일로 저장해주면 된다 (이렇게하면 파일 하나에 뭉탱이 저장)
혹은 --output-dir 옵션을 주면 templates 아래있는 리소스가 개별 yaml 파일로 저장 된다
Helm 관련 명령어
// 버전확인
helm version
// 명령어 찾아보고 싶을때
helm --help
// 검색 커멘드라인에서 할경우 (artifacthub.io 에서 검색의 대안)
helm search hub wordpress # Artifact Hub에서 검색
helm search repo wordpress # 로컬에 등록된 레포에서 검색
// 차트 설치
helm repo add bitnami https://charts.bitnami.com/bitnami # 레포 등록 (bitnami다운 후 bitnami라는 저장소 이름 지정하겠다)
helm repo update # 레포 최신화
helm install my-site bitnami/wordpress # 앱 설치 (my-site는 릴리즈 이름인것)
// 위에서 설치한건 Release로 등록
helm list # 설치된 Helm Release 목록 보기
helm rollback <릴리스명> <리비전번호> # 이전 리비전으로 롤백
helm uninstall <릴리스명> # 모든 관련 리소스 한 번에 삭제
// 레포 관련 명령어
helm repo list # 등록된 레포 목록 보기
helm repo update # 등록된 레포의 정보 최신화
helm repo remove <이름> # 등록된 레포 제거
// 릴리즈 업그레이드
helm upgrade <릴리스명> <차트명> [--version x.y.z]
-> 이전상태는 자동 저장 revision 증가한다
// 릴리즈 이력 확인
helm history <릴리스명>
// 릴리즈 롤백
helm rollback <릴리스명> <리비전번호>
-> 기존 revision을 덮어쓰는게 아니라 새로운 revision이 생기는거
추가로 쿠버네티스 리소스만 롤백되는거라서 데이터 자체는 롤백되는게 아님'자격증 > CKA' 카테고리의 다른 글
| CKA 자격증 취득 후기 및 핵심 개념 정리 (1) | 2025.06.16 |
|---|---|
| kustomize (0) | 2025.05.01 |
| Networking (0) | 2025.04.15 |
| Storage (0) | 2025.04.14 |
| 쿠버네티스 보안 (0) | 2025.04.13 |