<aside> 👉🏻

The package manager for Kubernetes

Helm은 복잡한 Kubernetes 애플리케이션을 표준화된 방식으로 패키징하고 배포할 수 있게 해주어, DevOps 워크플로우를 크게 단순화시켜주는 핵심 도구라고 할 수 있다.

npm 이나 pip와 같은 역할이라고 생각하면 된다.

</aside>

✨ 주요 개념 3가지

1. Chart (차트)

2. Repositorey

3. Release

헬름은 쿠버네티스 내부에 charts 를 설치하고, 각 설치에 대해 새로운 release 를 생성한다. 새로운 차트를 찾기 위해 헬름 차트 repositories 를 검색할 수 있다.

📂 Helm 의 구조

wordpress/
  Chart.yaml          # 차트에 대한 정보를 가진 YAML 파일
  LICENSE             # 옵션: 차트의 라이센스 정보를 가진 텍스트 파일
  README.md           # 옵션: README 파일
  values.yaml         # 차트에 대한 기본 환경설정 값들
  values.schema.json  # 옵션: values.yaml 파일의 구조를 제약하는 JSON 파일
  charts/             # 이 차트에 종속된 차트들을 포함하는 디렉터리
  crds/               # 커스텀 자원에 대한 정의
  templates/          # values와 결합될 때, 유효한 쿠버네티스 manifest 파일들이 생성될 템플릿들의 디렉터리
  templates/NOTES.txt # 옵션: 간단한 사용법을 포함하는 텍스트 파일

Helm은  charts/crds/templates/ 디렉터리와 나열된 파일명의 사용을 예약한다.

📋 Chart.yaml 파일 구조

apiVersion: 차트 API 버전 (필수)
name: 차트명 (필수)
version: SemVer 2 버전 (필수)
kubeVersion: 호환되는 쿠버네티스 버전의 SemVer 범위 (선택)
description: 이 프로젝트에 대한 간략한 설명 (선택)
type: 차트 타입 (선택)
keywords:
  - 이 프로젝트에 대한 키워드 리스트 (선택)
home: 프로젝트 홈페이지의 URL (선택)
sources:
  - 이 프로젝트의 소스코드 URL 리스트 (선택)
dependencies: # 차트 필요조건들의 리스트 (optional)
  -name: 차트명 (nginx)
version: 차트의 버전 ("1.2.3")
repository: 저장소 URL ("<https://example.com/charts>") 또는 ("@repo-name")
condition: (선택) 차트들의 활성/비활성을 결정하는 boolean 값을 만드는 yaml 경로 (예시: subchart1.enabled)
tags: # (선택)
      - 활성화 / 비활성을 함께하기 위해 차트들을 그룹화 할 수 있는 태그들
enabled: (선택) 차트가 로드될수 있는지 결정하는 boolean
import-values: # (선택)
      - ImportValues 는 가져올 상위 키에 대한 소스 값의 맵핑을 보유한다. 각 항목은 문자열이거나 하위 / 상위 하위 목록 항목 쌍일 수 있다.
alias: (선택) 차트에 대한 별명으로 사용된다. 같은 차트를 여러번 추가해야할때 유용하다.
maintainers: # (선택)
  - name: maintainer들의 이름 (각 maintainer마다 필수)
email: maintainer들의 email (각 maintainer마다 선택)
url: maintainer에 대한 URL (각 maintainer마다 선택)
icon: 아이콘으로 사용될 SVG나 PNG 이미지 URL (선택)
appVersion: 이 앱의 버전 (선택). SemVer인 필요는 없다.
deprecated: 차트의 deprecated 여부 (선택, boolean)
annotations:
example: 키로 매핑된 주석들의 리스트 (선택).

✅ 도커파일과의 차이점

항목 Dockerfile Helm Chart
역할 애플리케이션 이미지를 생성하는 스크립트 Kubernetes 배포를 위한 리소스 정의 모음
관점 애플리케이션 빌드 중심 운영 및 배포 중심
사용 위치 이미지 레벨 (CI 단계) 클러스터 레벨 (CD 단계)
구성 요소 OS, 런타임, 코드 등 포함된 이미지 생성 Deployment, Service, ConfigMap 등의 배포 템플릿

✅ 왜 쿠버네티스에서 패키지 매니저(Helm)를 써야할까