왜?
Helm은 Kubernetes 리소스를 패키징하고, 배포하고, 버전 관리하는 역할
Kubernetes에서는 Pod, Service, Deployment 등의 리소스를 YAML 파일로 정의
Helm은 이러한 YAML 템플릿을 묶어서 Chart라는 단위로 관리
Chart를 이용하면 복잡한 애플리케이션을 한 줄의 명령어로 설치 및 관리
-> chart는 세트메뉴
해당 메뉴의 온전한 맛(서비스 제공) 을 느끼기 위해 필요한 모든 것(리소스)들이 준비 되어있음
Helm Chart를 구성하는 요소는?
- Chart.yaml: 메타 정보 (이름, 버전 등)
- values.yaml: 설정 값 기본값 정의
- templates/: Kubernetes YAML 템플릿들이 위치하는 폴더
- charts/: 다른 의존 Chart들을 포함할 수 있는 폴더
Chart.yaml: Helm Chart 메타 정보
https://helm.sh/docs/topics/charts/
apiVersion: v2 # Helm API 버전
name: my-nginx # Chart 이름
description: A Helm chart for Nginx
version: 1.0.0 # Chart 버전
appVersion: 1.25 # 실제 앱 버전 (ex. Nginx 버전)
필수 필드:
- apiVersion
- name
- version
values.yaml: 사용자 설정값 기본값
- 템플릿(templates/*.yaml)에서 사용하는 변수의 기본값을 정의
- 환경별 커스터마이징 가능
- 환경에 따라 오버라이드(덮어쓰기)도 가능
replicaCount: 2
image:
repository: nginx
tag: "1.25"
환경별 values 파일 사용 (values-dev.yaml, values-prod.yaml)
운영/개발 환경에 따라 설정을 분리하고 싶을 때 유용
여러 values-*.yaml 파일을 Git에 저장하고 선택해서 사용하는 방법
charts/
└── my-app/
├── Chart.yaml
├── values.yaml # 기본 값
├── values-dev.yaml # 개발용
├── values-staging.yaml # 스테이징용
├── values-prod.yaml # 운영용
└── templates/
환경별 디렉토리로 분리
environments/
├── dev/
│ ├── values.yaml
│ └── application.yaml
├── staging/
│ ├── values.yaml
│ └── application.yaml
└── prod/
├── values.yaml
└── application.yaml
templates/: Kubernetes 리소스 정의 (템플릿)
- values.yaml의 값을 바탕으로 Kubernetes 리소스를 Go 템플릿 문법으로 생성
- 예: deployment.yaml, service.yaml, ingress.yaml 등
apiVersion: apps/v1
kind: Deployment
spec:
replicas: {{ .Values.replicaCount }}
charts/: 의존성 Chart 모음
- 이 Chart가 의존하는 다른 Helm Chart들을 넣는 디렉토리
- 예: postgresql, redis 등을 함께 설치해야 할 경우 사용
의존성은 Chart.yaml 안에 정의합니다:
dependencies:
- name: redis
version: "17.3.11"
repository: "https://charts.bitnami.com/bitnami"
values.yaml과 templates/의 관계
- values.yaml은 템플릿에서 참조할 설정 값의 소스
- 템플릿에서는 {{ .Values.키이름 }} 형태로 참조
언제 써야하는데?
Helm을 사용하지 않으면 불편함이 생김
수많은 YAML 파일을 수동으로 관리
재사용성과 모듈화 부족
어떻게 써야하는데?
- 템플릿 기능: values.yaml 파일을 이용해 환경별로 설정 값을 주입할 수 있어 중복 제거 가능
- 버전 관리: Helm Chart에 버전 태깅을 하여 특정 버전으로 롤백 가능
- Chart Repository: 미리 만들어진 오픈소스 Helm Chart를 활용 가능 (예: nginx, redis 등)
- 간단한 배포/삭제 명령어: helm install, helm upgrade, helm rollback, helm uninstall
운영 시 유용한 것
helm template: 템플릿 렌더링 결과 확인
helm template 명령어는 Helm Chart를 실제로 Kubernetes에 적용하지 않고, 생성될 YAML을 미리 확인
- Helm Chart가 정확히 어떤 Kubernetes 리소스를 생성하는지 확인 가능
- 디버깅 및 PR 리뷰 시 유용
- GitOps 워크플로우에서 YAML manifest 추출 용도로 활용
helm upgrade: 설정 변경 시 동작 방식
helm upgrade는 기존에 배포된 Release에 대해 설정이나 코드가 바뀌었을 때 자동으로 변경 사항을 반영
- --dry-run 옵션으로 실제로 반영하지 않고 시뮬레이션
'귀찮게하기 > DevOps-SRE' 카테고리의 다른 글
[Kubernetes] ingress - external dns - route53(cloud dns server) (0) | 2025.04.05 |
---|---|
DevOps - Argo CD (0) | 2025.03.31 |
DevOps - ArgoCD APP of APPS (0) | 2025.03.18 |
내 컴퓨터가 해킹당했다면? (0) | 2025.02.16 |
SRE 귀찮게 안하기 - 하는 일 (5) | 2024.11.27 |