본문 바로가기

자격증/CKA

Helm

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