서론
이전 쿠버네티스로 프로젝트를 진행하면서, 지겹도록 봤던 단어가 Helm이라는 용어이다.
실제 프로젝트에서 적용했던 경우는 한번 밖에 없었지만, 당시에는 처음이라서 리소스를 만들거나 배포할때 아래 명령어를 사용해서 배포하고 관리했다.
kubectl apply -f
근데 공부를 하고 좀 더 찾아보면, 이 Helm이라는 도구가 kubernetes에서 매우 유용하게 쓰일 수가 있다.
Helm이란 무엇인가
정의:
Helm은 Kubernetes용 패키지 매니저로, 애플리케이션을 정의하고 설치하고 업그레이 하는 작업 과정을 코드로 템플릿화하여 수행할 수 있도록 도와준다. Helm을 사용함으로써 복잡한 Kuberenetes 리소스 정의도 하나의 패키지(Chart)로 관리할 수 있고, 배포, 업데이트, 롤백까지 도와준다는 장점이 잇다.
좀 더 쉽게 정의해보자면, 기존에 특정 pod나 service를 배포하려고하면 하나하나 "kubectl apply"만으로는 효율적으로 배포하기가 어렵다. 때문에 이러한 불편함을 해결하고자 Helm이라는 패키지 매니저를 사용하는 것이다.
Helm의 3가지 요소
Chart:
Helm Package. Kubernetes 클러스터 내에서 application, tool, service를 실행하는데 필요한 모든 리소스 정의
Repository:
Chart를 수집하고 공유할 수 있는 장소
Release:
Kubernetes Cluster에서 실행되는 차트의 instance이다. 하나의 Chart는 동일한 클러스터에 여러번 설치할 수 있다.
또한 설치될 때마다 새 Release가 생성된다.
Helm Chart 구성요소
Helm Chart에는 총 3가지가 있다.
1. Chart.yaml: 차트 자체에 대한 메타데이터가 포함된 기본 파일
apiVersion: v2
name: my-application
description: A Helm chart for Kubernetes
type: application
version: 1.0.0
appVersion: "1.0.0"
maintainers:
- name: John Doe
email: johndoe@example.com
sources:
- https://github.com/example/my-application
2. values.yaml: 차트의 기본 구성 값을 정의.
replicaCount: 3
image:
repository: nginx
pullPolicy: IfNotPresent
tag: "1.19.0"
service:
name: my-service
type: ClusterIP
port: 80
ingress:
enabled: true
annotations: {}
hosts:
- host: my-app.local
paths:
- /
resources:
limits:
cpu: "500m"
memory: "256Mi"
requests:
cpu: "250m"
memory: "128Mi"
persistence:
enabled: true
size: 10Gi
storageClass: standard
3. template: Kubernetes의 매니페스트 파일을 생성하는 템플릿의 디렉터리.
Helm Template를 Kubernetes Cluster에 배포
마지막으로 다음과 같이 Helm으로 배포를 해주면 실제 쿠버네티스 클러스터에 배포가 된다.
helm install <release-name> <chart-path> [--values <values-file>] [--set <key=value>]
마무리
사실 쿠버네티스로 인프라를 한번 구축도 해보고, 이후에도 꾸준히 공부하는 중이지만
뭔가 공부를 하면 할 수록 더 여렵게 느껴지는 것 같다. 아직도 이 분야에서는 배우고 공부해야하는 것이 많다고 느낀다
'DevOps&Cloud' 카테고리의 다른 글
Elastic Search 이해하기(Elastic Search vs RDBMS) (1) | 2025.04.26 |
---|---|
Kubernetes Architecture: Control Plane 과 Worker Node 이해하기 (0) | 2025.04.23 |
Reverse Proxy, LoadBalancer의 차이 알아보기 (0) | 2025.04.14 |
Kubernetes의 Ingress Controller와 LoadBalancer 역할 이해하기 (0) | 2025.04.10 |
왜 Docker Compose를 써야하는가 (0) | 2025.03.25 |