반응형
728x170
왜?
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 옵션으로 실제로 반영하지 않고 시뮬레이션
728x90
반응형
그리드형
'귀찮게하기 > 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 |