Helm - Components

2026. 1. 7. 16:47·CKA

Helm을 본격적으로 쓰기 전에, Helm이 “무엇을 어떻게 관리하는 도구인지”를 구성요소 단위로 정확히 잡고 가면 이후 실습(install/upgrade/rollback)이 훨씬 깔끔해집니다. 이 글은 강의 스크립트 흐름대로 Helm의 핵심 개념을 CLI → Chart → Release/Revision → Repository → Metadata 저장 방식 순서로 정리합니다.


1) Helm CLI: 우리가 실제로 쓰는 인터페이스

Helm은 기본적으로 로컬에 설치된 helm CLI로 클러스터에 작업을 요청합니다.

자주 쓰는 대표 액션:

  • install (차트 설치)
  • upgrade (업그레이드)
  • rollback (이전 상태로 복구)
  • uninstall (삭제)
  • status/history/get (상태/이력/매니페스트 확인)

확인부터:

helm version
helm help

2) Chart: “쿠버네티스 오브젝트 묶음 + 설치 방법” 패키지

Chart는 Helm에서 배포 단위가 되는 “패키지”입니다.

  • 여러 Kubernetes 오브젝트(Deployment, Service, PVC, Secret, Ingress 등)를
  • 어떤 규칙으로 생성/배치할지에 대한 “설계도”를
  • 파일 묶음으로 들고 있는 형태

즉 Helm은 “YAML 여러 장을 각각 apply”하는 대신, Chart라는 패키지 하나를 설치해서 애플리케이션을 올립니다.

Chart 기본 디렉토리 구조(가장 흔한 형태)

my-chart/
  Chart.yaml        # 차트 메타 정보(이름, 버전 등)
  values.yaml       # 사용자/환경별로 바꿀 설정값 기본값
  templates/        # 실제 K8s 리소스 템플릿(Deployment/Service/Ingress 등)
  charts/           # 의존 차트(서브차트)
  .helmignore       # 빌드/패키징에서 제외할 파일

3) 템플레이팅(Templating)과 values.yaml: “바꿀 값은 한 곳에서”

강의에서 말한 핵심이 이겁니다:

  • Chart의 templates/*.yaml에는 고정 값이 아니라 템플릿 표현식이 들어가고
  • 실제 값은 보통 values.yaml 에서 주입됩니다.

예를 들어 Deployment 템플릿이 이런 식으로 작성됩니다(개념 예시):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    spec:
      containers:
      - name: app
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

그리고 values.yaml은 이런 식으로 “입력값”을 제공합니다:

replicaCount: 2

image:
  repository: nginx
  tag: "1.27"

현업 체감 포인트:

  • 보통 우리는 차트를 “직접 개발”하기보다 공개 차트를 가져다 쓰는 경우가 많고
  • 그럴 때 실질적으로 만지는 건 대부분 values.yaml입니다.
  • 즉 values.yaml은 “Helm 차트의 설정 파일/입력 파일”에 가깝습니다.

4) Release: “차트를 클러스터에 설치한 인스턴스(설치 결과물)”

차트를 클러스터에 적용(helm install)하면 Release가 만들어집니다.

Release = “특정 차트를 특정 이름으로 설치한 1회 설치본”

예:

helm install my-site bitnami/wordpress -n blog --create-namespace

여기서:

  • bitnami/wordpress = Chart
  • my-site = Release 이름 (설치본의 식별자)

왜 굳이 Release 이름이 필요할까?

가장 중요한 이유: 같은 차트로 여러 개를 설치할 수 있기 때문입니다.

helm install my-site bitnami/wordpress -n blog
helm install my-second-site bitnami/wordpress -n blog

두 개는 같은 차트를 기반으로 하지만:

  • 서로 완전히 독립적으로 추적/업데이트/롤백/삭제할 수 있는 서로 다른 릴리즈입니다.

실무에서 자주 나오는 활용:

  • prod 릴리즈와 dev 릴리즈를 동일 차트로 “클론처럼” 운영
  • dev에서 검증한 values 변경을 prod로 이관

5) Revision: Release 내부의 “스냅샷(변경 이력)”

Release에는 Revision(리비전)이 쌓입니다.

  • 최초 설치 = revision 1
  • helm upgrade = revision 증가(2, 3, …)
  • helm rollback도 “새 리비전”으로 기록되는 편(예: rollback 수행 후 revision 3 생성)

확인 커맨드:

helm list -n blog
helm status my-site -n blog
helm history my-site -n blog

롤백:

helm rollback my-site 1 -n blog

6) Repository: 차트를 가져오는 “차트 저장소”

Docker 이미지가 Docker Hub 같은 레지스트리에 있는 것처럼, Helm 차트도 Repository에 있습니다.

대표 흐름:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo wordpress

차트의 기본 values를 확인하고 내 설정으로 설치:

helm show values bitnami/wordpress > values.yaml
# values.yaml 수정 후
helm install my-site bitnami/wordpress -n blog -f values.yaml

7) Artifact Hub: “차트를 검색하는 허브(카탈로그)”

강의에서는 “Helm Hub(현재는 Artifact Hub로 많이 부름)” 이야기가 나옵니다.

요지는:

  • 전 세계 다양한 repo(예: Bitnami 등)에 차트가 흩어져 있는데
  • 차트를 찾을 때 저장소를 일일이 뒤질 필요 없이
  • Artifact Hub에서 검색/탐색할 수 있다는 것

실무 팁:

  • 가능하면 Verified/Official(검증된 퍼블리셔) 성격의 차트를 우선 검토하는 편이 안전합니다.
  • 다만 “검증 배지”가 있다고 해도 운영 전에는 values/default, 보안 설정, 리소스 요구량, PV 정책 등을 반드시 확인해야 합니다.

8) Metadata: Helm이 “자기가 뭘 했는지” 클러스터에 저장하는 방식

Helm은 릴리즈/차트/리비전/상태 같은 정보를 저장해야 합니다. 이걸 강의에서 metadata(data about data) 라고 부릅니다.

중요 포인트는 “어디에 저장하느냐”입니다.

  • 로컬에 저장하면 팀원이 바뀌거나 다른 환경에서 작업할 때 문제가 생김
  • 그래서 Helm은 클러스터 내부에 저장합니다.
  • Helm 3 기준으로 대표적으로 Kubernetes Secret에 저장합니다.

즉, 클러스터가 유지되는 한:

  • 팀원이 동일 클러스터에 접근할 수만 있으면
  • Helm은 언제든 릴리즈 이력/리비전을 보고 upgrade/rollback 등을 수행할 수 있습니다.

실제로 Secret을 확인해보면?

(네임스페이스는 릴리즈가 설치된 곳)

kubectl get secrets -n blog | head

보통 Helm 릴리즈 메타데이터는 Helm 전용 Secret들로 보이며, 형태는 대개 이런 패턴을 띱니다.

  • sh.helm.release.v1.<release-name>.v<revision>

참고: Secret은 기본적으로 base64 인코딩일 뿐 “암호화”는 아닙니다. 민감도가 높은 환경이면 etcd encryption at rest 등도 같이 고려하는 게 일반적입니다.


9) 지금 단계에서 꼭 기억할 한 줄 요약

  • Chart: 앱 설치 설계도(템플릿 + values)
  • Release: 차트를 설치한 “인스턴스(설치본)”
  • Revision: release의 스냅샷/변경 이력
  • Repository / Artifact Hub: 차트를 가져오고 찾는 곳
  • Metadata: Helm이 클러스터에 남기는 “내 작업 기록”(주로 Secret)

함께 보면 좋은 커맨드 묶음(실습용)

# Repo/차트 탐색
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo nginx
helm show values bitnami/nginx > values.yaml

# 설치/확인
helm install my-nginx bitnami/nginx -n demo --create-namespace -f values.yaml
helm list -n demo
helm status my-nginx -n demo
helm history my-nginx -n demo

# 업그레이드/롤백
helm upgrade my-nginx bitnami/nginx -n demo -f values.yaml
helm rollback my-nginx 1 -n demo

# 삭제
helm uninstall my-nginx -n demo

'CKA' 카테고리의 다른 글

Helm - CLI  (0) 2026.01.07
Helm - Charts  (0) 2026.01.07
Helm - Helm 2 vs Helm 3  (0) 2026.01.07
Helm  (0) 2026.01.07
Deploy k8s - kubeadm으로 배포하기  (0) 2026.01.06
'CKA' 카테고리의 다른 글
  • Helm - CLI
  • Helm - Charts
  • Helm - Helm 2 vs Helm 3
  • Helm
5jyan5
5jyan5
  • 5jyan5
    jyan
    5jyan5
  • 전체
    오늘
    어제
    • 분류 전체보기 (242)
      • 김영한의 스프링 핵심 원리(기본편) (8)
      • 김영한의 스프링 핵심 원리 - 고급편 (11)
      • 김영한의 스프링 MVC 1편 (1)
      • 김영한의 스프링 DB 1편 (3)
      • 김영한의 스프링 MVC 2편 (3)
      • 김영한의 ORM 표준 JPA 프로그래밍(기본편) (9)
      • 김영한의 스프링 부트와 JPA 활용2 (2)
      • 김영한의 실전 자바 - 중급 1편 (1)
      • 김영한의 실전 자바 - 고급 1편 (9)
      • 김영한의 실전 자바 - 고급 2편 (9)
      • Readable Code: 읽기 좋은 코드를 작성.. (2)
      • 김영한의 실전 자바 - 고급 3편 (9)
      • CKA (118)
      • 개발 (37)
      • 경제 (4)
      • 리뷰 (1)
      • 정보 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      김영한
      페치 조인
      프록시
      cglib
      자바
      WAS
      빈 후처리기
      jdk 동적 프록시
      log trace
      버퍼
      Target
      양방향 맵핑
      jpq
      hibernate5module
      @discriminatorvalue
      Thread
      고급
      requset scope
      락
      @within
      JPQL
      조회 성능 최적화
      단방향 맵핑
      @discriminatorcolumn
      @args
      typequery
      reentarantlock
      프록시 팩토리
      스레드
      gesingleresult
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.2
    5jyan5
    Helm - Components
    상단으로

    티스토리툴바