쿠버네티스 Helm 사용법
- Helm 차트를 이용한 애플리케이션 배포
- 키워드: 쿠버네티스 Helm, Kubernetes Helm 차트
서론
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 강력한 플랫폼입니다. 그러나 쿠버네티스의 복잡한 설정과 배포 프로세스를 단순화하기 위해 Helm이라는 도구가 개발되었습니다. Helm은 "쿠버네티스의 패키지 관리자"로 불리며, Helm 차트를 사용하여 애플리케이션을 쉽게 배포하고 관리할 수 있습니다. 이번 포스팅에서는 Helm의 개념과 사용법, 그리고 Helm 차트를 이용한 애플리케이션 배포 방법을 초보자도 이해할 수 있도록 자세히 설명합니다.
본론
Helm 개요
Helm이란?
Helm은 쿠버네티스 애플리케이션의 배포를 간소화하고 관리하기 위한 오픈 소스 패키지 관리자입니다. Helm은 차트(Chart)라는 패키지 형식을 사용하여 애플리케이션과 쿠버네티스 리소스를 정의하고 배포합니다.
주요 개념
- 차트(Chart): 쿠버네티스 애플리케이션의 모든 구성 요소를 포함하는 패키지입니다.
- 릴리스(Release): 특정 차트 버전의 인스턴스를 실행하는 것입니다.
- 리포지토리(Repository): 차트를 저장하고 공유하는 장소입니다.
Helm 설치 및 설정
Helm 설치
Helm을 설치하려면 다음 명령어를 사용합니다.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
또는 패키지 관리자를 통해 설치할 수 있습니다. 예를 들어, Homebrew를 사용하는 경우 다음과 같이 설치합니다.
brew install helm
쿠버네티스 클러스터에 연결
Helm을 설치한 후 쿠버네티스 클러스터에 연결합니다. kubectl
이 정상적으로 클러스터에 연결되어 있어야 합니다.
kubectl config view
Helm 차트 사용
차트 생성
Helm 차트를 생성하려면 다음 명령어를 사용합니다.
helm create mychart
이 명령어를 실행하면 mychart
디렉토리가 생성되고, 기본적인 차트 구조가 포함됩니다.
차트 구조
생성된 차트의 기본 구조는 다음과 같습니다.
mychart/
Chart.yaml # 차트 메타데이터
values.yaml # 기본 설정 값
charts/ # 종속 차트
templates/ # 쿠버네티스 리소스 템플릿
templates/NOTES.txt # 설치 후 출력할 메시지
Chart.yaml
Chart.yaml
파일은 차트의 메타데이터를 정의합니다. 예:
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: 1.0.0
values.yaml
values.yaml
파일은 차트의 기본 설정 값을 정의합니다. 예:
replicaCount: 1
image:
repository: nginx
tag: "1.19.2"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
ingress:
enabled: false
annotations: {}
hosts:
- host: chart-example.local
paths: []
tls: []
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
Helm 차트를 이용한 애플리케이션 배포
차트 설치
차트를 설치하려면 다음 명령어를 사용합니다.
helm install myrelease mychart
이 명령어는 mychart
차트를 myrelease
라는 이름으로 설치합니다.
차트 업그레이드
차트를 업그레이드하려면 다음 명령어를 사용합니다.
helm upgrade myrelease mychart
이 명령어는 myrelease
릴리스를 mychart
차트의 새로운 버전으로 업그레이드합니다.
차트 삭제
차트를 삭제하려면 다음 명령어를 사용합니다.
helm uninstall myrelease
이 명령어는 myrelease
릴리스를 삭제합니다.
Helm 리포지토리 사용
리포지토리 추가
공개된 Helm 차트를 사용하려면 리포지토리를 추가해야 합니다.
helm repo add stable https://charts.helm.sh/stable
helm repo update
차트 검색
리포지토리에서 차트를 검색하려면 다음 명령어를 사용합니다.
helm search repo stable
차트 설치
리포지토리에서 차트를 설치하려면 다음 명령어를 사용합니다.
helm install myrelease stable/nginx
Helm 차트 개발
템플릿 작성
Helm 템플릿은 쿠버네티스 리소스를 정의하는 YAML 파일입니다. 템플릿에서 변수와 제어 구조를 사용하여 동적 구성을 지원합니다. 예:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-nginx
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Release.Name }}-nginx
template:
metadata:
labels:
app: {{ .Release.Name }}-nginx
spec:
containers:
- name: nginx
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 80
템플릿 테스트
템플릿이 올바르게 렌더링되는지 테스트하려면 다음 명령어를 사용합니다.
helm template mychart
이 명령어는 차트를 렌더링하여 실제로 적용될 쿠버네티스 리소스를 미리 봅니다.
Helm 차트 배포 사례
Nginx 배포
다음은 Nginx 웹 서버를 Helm 차트를 사용하여 배포하는 예제입니다.
- 차트 생성
helm create nginx-chart
- values.yaml 수정
values.yaml
파일을 수정하여 Nginx 설정을 지정합니다.
replicaCount: 2
image:
repository: nginx
tag: "1.19.2"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
- 차트 설치
helm install nginx-release nginx-chart
- 배포 확인
kubectl get deployments
kubectl get services
Helm 베스트 프랙티스
- 버전 관리: 차트와 애플리케이션 버전을 명확하게 관리하여 호환성을 유지합니다.
- values.yaml 사용:
values.yaml
파일을 사용하여 구성 값을 중앙에서 관리합니다. - 템플릿 변수화: 템플릿에서 변수를 사용하여 동적 구성을 지원합니다.
- 리드미 작성: 차트 사용법과 설정 방법을 문서화하여 다른 사용자가 쉽게 사용할 수 있도록 합니다.
- 테스트 환경에서 검증: 프로덕션 배포 전에 테스트 환경에서 차트를 충분히 검증합니다.
결론
Helm은 쿠버네티스 애플리케이션의 배포와 관리를 간소화하는 강력한 도구입니다. 이번 포스팅에서는 Helm의 개념과 주요 기능, 그리고 Helm 차트를 사용하여 애플리케이션을 배포하는 방법을 자세히 설명했습니다. 이를 통해 쿠버네티스 환경에서 효율적으로 애플리케이션을 관리할 수 있기를 바랍니다.