[쿠버네티스 어나더 클래스 (지상편) - Sprint 2] 13. Helm과 Kustomize 비교하며 사용-1Tech/Kubernetes(K8s)2025. 6. 14. 14:03
Table of Contents
* 본 게시물은 쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 강의와 강의 자료를 바탕으로 작성되었습니다.
Helm과 Kustomize 비교
- 공통점
- 중복되는 파일의 관리를 최소화하기 위해 사용
(MSA로 인해 App의 종류가 많아지고, 다양한 배포 환경 때문에 관리해야 할 파일이 증가) - 다양한 배포 Tools에서 지원
- 중복되는 파일의 관리를 최소화하기 위해 사용

- 차이점
Kustomize는 점점 패키지 내부 파일 양이 많아지는 구조라, 나중에 관리가 힘들 수 있음
대부분의 배포되는 오픈 소스들은 Helm 형태이기 때문에, Helm은 어차피 공부를 해야 하고 Kustomize는 소규모 프로젝트나 빨리 구성해야 할 경우 주로 사용
설치 구성

- Kustomize
- kubectl v1.14부터 kustomize 기능이 통합되어 기본적으로 사용 가능
- `kubectl -k {cmd}` 명령어로 사용 가능
- Helm
- Github에서 Helm을 다운로드 받아서 설치
- kubectl처럼 인증서를 가지고 있어야, kube-apiserver로 통신 가능
- `helm {cmd}` 명령어로 사용 가능
- Artifact Hub라는 Helm 패키지 저장소에서 여러 앱을 다운로드 받아 사용할 수 있음
사용 방식
- Kustomize - 오버레이 방식

- `base`라는 기본 파일이 있음
- kubectl로 명령을 내리면, overlays 파일을 읽어 중복되는 부분은 덮어쓰고 없는 데이터는 채워 넣어서 재구성
(쉽게 말해서 base 파일에 overlays 파일 내용을 합침)
- Helm - 함수 방식

- `template` 폴더에 배포해야 할 파일이 있음
- 주어지는 Parameter를 변수에 넣어 YAML 파일을 만들어 k8s 서버에 올림
Helm 설치 및 배포
- 설치
# MacOS의 경우, tar 명령어가 없어서 설치 필요
curl -O https://get.helm.sh/helm-v3.13.2-linux-amd64.tar.gz
tar -zxvf helm-v3.13.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/helm
- 설치 확인
# 배포 툴에서 작동해야 하므로, Jenkins에서 확인
su - jenkins -s /bin/bash
helm
# Kustomize 버전 확인
kubectl version --client
- Helm template 생성 (init)
# 'api-tester'의 이름은 Chart 이름이 되고 현재 디렉터리에 만들어짐
helm create api-tester
# 이 아래 기본 파일들이 모두 있음
cd api-tester
ls
- 구조 확인 (필요없는 파일들은 삭제)

- 용어 정리
- Chart: App 이름 (charts -> 하위 App 이름)
- templates: Chart와 관련된 Resources YAML 파일 집합
- _helper.tpl: 사용자 정의 전역변수 선언
- NOTES.txt: 배포 후, 안내 문구
- Chart.yaml: App의 기본정보 선언
- values.yaml: 배포된 YAML에 사용될 변수들의 정보 선언
- 2.modify

- .Release
`helm install {instance} {package_path} -n {namespace}` 명령어에 사용된 요소를 담고 있음
- .Release.Name: {instance}
- .Release.Namespace: {namespace}
- .Release.Service: helm
- .Chart: Chart.yaml에서 정의된 변수를 사용 (앞 글자는 대문자로 사용됨)
(.Chart.Name, .Chart.Type 등..) - .Values: values.yaml에서 정의된 변수를 사용 (앞 글자는 소문자로 사용됨)
(.Values.resources, .Values.replicaCount 등..)
- 3. Additional
- ConfigMap과 Secret은 수동으로 만들어줘야 함
배포
- Jenkins Pipeline을 생성하여 원격 저장소의 Jenkinsfile이 있는 Path와 연결

- Helm 배포 전, Helm으로 만들어진 YAML 파일의 정보를 확인하는 구간을 만듦
- 의도대로 생성되었는 지 확인하고 수동으로 배포를 진행
YAML 파일 확인에 작성된 스크립트
# 해당 namespace가 없으면, 생성하고 해당 Instance로 지정된 경로의 package 내용을 출력
helm template {instance} {package_path} -n {namespace} --create-namespace
- Helm 배포에 작성된 스크립트
# 리소스가 없으면 생성, 있으면 업데이트
helm upgrade {instance} {package_path} -n {namespace} --create-namespace --install
# 원래는 아래와 같이 사용
helm install {...} # 최초 생성에만 사용
helm upgrade {...} # 최초 생성 후, 업그레이드 시 사용
'Tech > Kubernetes(K8s)' 카테고리의 다른 글
@ONE_ :: 정호원
잘못된 정보가 있다면 말씀해주세요!