쿠버네티스

Kubernetes : Helm

NickTop 2025. 3. 4. 21:02

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