본문 바로가기

Docker & Kubenetes

Helm의 주요 구성 요소

Helm이란, 다양한 리소스(Service, ConfigMap, Secret 등)를 각각 관리하지 않고 하나의 패키지로 관리하는 도구입니다.

Helm의 주요 개념 3가지인 Charts, Repository, Templates에 대해 알아보겠습니다.

Helm Charts

애플리케이션 설치에 사용되는 네트워크, 스토리지, 보안과 관련된 여러 쿠버네티스 리소스를 묶어놓은 패키지로, 여러 리소스의 묶음을 의미합니다.

헬름 차트를 통해 애플리케이션 설치 시 개별 설치가 아닌 헬름 차트 하나만 설치하면 간편하게 일괄 설치할 수 있으며 구조는 다음과 같습니다.

Chart.yaml	#차트에 대한 정보가 담겨있는 YAML 파일
LICENSE		#차트의 라이선스 정보가 담긴 TEXT 파일
README.md	#차트에 대한 설명을 포함한 README 파일
values.yaml	#차트의 기본 변수 파일
charts/		#차트에 종속된 차트를 포함하는 디렉터리
crds/		#커스텀 자원 정의
templates/	#values와 같이 유효한 쿠버네티스 매니페스트 파일을 생성하는 템플릿

Helm Repository

다양한 헬름 차트를 저장하고 공유하는 저장소, 많은 솔루션 업체가 직접 헬름 레포지토리를 제공하지만 만약 제공하는 레포지토리가 없는 애플리케이션은 주로 ArtifactHub에서 찾을 수 있습니다.

- 레포지토리 목록 조회 : helm repo list

- 설치 가능한 애플리케이션 조회 : helm search repo [애플리케이션 명]

Helm Templates

설치와 관련된 파일을 관리하며, 일정한 형식 또는 포맷을 의미합니다.

사용자는 이름, 날짜 등의 특정 변수만 수정하면 파일을 사용할 수 있으며 공통으로 사용하는 변수는 values.yaml 파일에서 관리합니다. 해당 파일만 수정하면 전체 템플릿 파일에서 사용하는 변수를 한꺼번에 수정할 수 있습니다.

주요 Helm 명령어

helm repo add			#애플리케이션에 사용하는 헬름 레포지토리를 로컬에 추가
helm pull			#헬름 차트를 로컬호스트에 내려받기
cp values.yaml my-values.yaml 	#원본 파일의 이력관리를 위한 복사
helm install [helm이름] -f my-values.yaml #수정한 파일을 템플릿 옵션 파일로 지정 후 설치
helm ls				#설치된 헬름 차트 목록 확인
helm get manifest		#디버깅 용도로 사용하며, 전체 YAML파일 목록 및 설정 확인
helm upgrade			#기존 헬름 차트의 변수 등을 수정해서 재배포
helm delete			#헬름 차트 삭제

리소스 Requests/Limits

헬름 차트 변수 중 Requests와 Limits에 대해 알아보겠습니다.

같은 노드에 있는 파드들은 노드의 자원을 공유하므로 특정 파드가 자원을 많이 사용하면 다른 파드의 성능에 영향을 주게 됩니다.

이를 방지하기위해 파드가 사용 가능한 자원을 제한할 수 있도록 해당 옵션을 제공합니다.

 

Requests는 요청량으로 여유 자원이 있는 노드에 파드를 할당하게 하는 옵션으로, 파드 간 자원 사용량이 증가해서 노드에 할당 가능한 자원 이상을 사용해 자원 경합이 발생하면 파드는 Requests에서 할당한 자원 만큼 사용이 가능 하도록 보장 받습니다. 만약, 노드에서 사용 가능한 자원을 초과하는 경우 각 파드는 Requests에 설정한 용량만큼만 노드의 자원을 사용할 수 있습니다.

 

Limits는 제한으로 사용 가능한 자원을 제한하는 것입니다. 해당 파드가 Limits 보다 많이 사용하게 될 경우 OOM 에러를 발생하며 해당 파드는 중단되고 다시 시작되는 상황을 반복하게 됩니다.

 

Helm Chart Hub

https://artifacthub.io/

 

Artifact Hub

Find, install and publish Kubernetes packages

artifacthub.io