Helm의 필요성
쿠버네티스는 어플리케이션 배포 환경을 제공하지만, 어플리케이션의 정보는 모른다
쿠버네티스 환경에서 배포하는 대부분의 어플리케이션들은 리소스 몇개만 배포하면 되는 형태가 아니다
따라서, 쿠버네티스 환경에서 직접 배포할 때 YAML 파일이 매우 많이 필요하다
어플리케이션 버전 관리, 업그레이드, 롤백 같은 작업을 수기로 하면 관리해야할 것이 많다
이러한 문제점들을 helm이 해결해준다
Chart
helm에서 사용되는 패키지 단위입니다
아래와 같은 디렉토리 구성으로 되어있습니다
mychart/
├── Chart.yaml # (필수) 차트 메타정보
├── values.yaml # (필수) 기본 설정값
├── templates/ # (필수) 쿠버네티스 리소스 템플릿
│ ├── deployment.yaml
│ ├── service.yaml
│ └── _helpers.tpl # 템플릿 함수 정의
├── charts/ # (선택) 의존성 차트
└── README.md # (선택) 설명서
Chart.yaml : 차트의 메타정보가 들어있습니다
apiVersion: v2
name: mychart
version: 1.0.0
appVersion: 1.16.0
description: My awesome app chart
templates 폴더 : 쿠버네티스에서 사용되는 yaml 파일이 저장되어있습니다
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-app
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
{{ }} 안의 값들은 Values.yaml에 정의되어 있습니다
Repo
Chart들이 저장된 공간입니다. https://artifacthub.io 사이트에서 Repo를 조회할수있습니다
(또는 helm search hub 로 찾을 수 있습니다, 하지만 보기 불편함. json으로 저장해서)
예시
nginx를 배포하고 롤백하는 예제에 대해 알아봅시다
bitnami를 repo로 등록합시다 (가장 유명한 repo 중 하나임)
helm repo add bitnami https://charts.bitnami.com/bitnami
bitnami repo 중 nginx chart를 my-nginx라는 이름으로 설치합니다
helm install my-nginx bitnami/nginx
배포확인
controlplane ~ ➜ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-nginx default 1 2025-03-04 11:52:38.156734402 +0000 UTC deployed nginx-19.0.0 1.27.4
controlplane ~ ➜ k get pod
NAME READY STATUS RESTARTS AGE
my-nginx-6f6b484685-vps4k 1/1 Running 0 3m4s
pod는 하나만 배포되었습니다.
시스템 안정성을 위해 pod를 2개로 늘린다고 해봅시다
values.yaml을 가져와서 values.yaml과 함께 업그레이드합니다
helm show values bitnami/nginx > values.yaml
vi values.yaml
...
## @param replicaCount Number of NGINX replicas to deploy
##
replicaCount: 2
## @param revisionHistoryLimit The number of old history to retain to allow rollback
##
...
helm upgrade my-nginx bitnami/nginx -f values.yaml
REVISION이 2가 되며 pod 개수가 늘어납니다
controlplane ~ ➜ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-nginx default 2 2025-03-04 11:57:54.848771743 +0000 UTC deployed nginx-19.0.0 1.27.4
controlplane ~ ➜ k get pod
NAME READY STATUS RESTARTS AGE
my-nginx-6f6b484685-426r2 1/1 Running 0 26s
my-nginx-6f6b484685-vps4k 1/1 Running 0 7m6s
아래와 같이 helm rollback을 통해 롤백합니다
controlplane ~ ✖ helm history my-nginx
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Tue Mar 4 11:52:38 2025 superseded nginx-19.0.0 1.27.4 Install complete
2 Tue Mar 4 11:59:17 2025 deployed nginx-19.0.0 1.27.4 Upgrade complete
controlplane ~ ➜ helm history rollback
controlplane ~ ✖ helm rollback my-nginx 1
Rollback was a success! Happy Helming!
controlplane ~ ➜ k get pod
NAME READY STATUS RESTARTS AGE
my-nginx-6f6b484685-vps4k 1/1 Running 0 8m20s
'쿠버네티스' 카테고리의 다른 글
Kubernetes : CRD (0) | 2025.03.09 |
---|---|
Kubernetes : Kustomize (0) | 2025.03.05 |
Kubernetes : Network (0) | 2025.03.03 |
Kubernetes : Scheduler (0) | 2025.02.01 |
Kubernetes 구조 : Cluster, Node, Pod (0) | 2025.01.19 |