쿠버네티스 Helm 사용법

쿠버네티스 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 차트를 사용하여 배포하는 예제입니다.


  1. 차트 생성

helm create nginx-chart

  1. values.yaml 수정

values.yaml 파일을 수정하여 Nginx 설정을 지정합니다.


replicaCount: 2

image:
  repository: nginx
  tag: "1.19.2"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

  1. 차트 설치

helm install nginx-release nginx-chart

  1. 배포 확인

kubectl get deployments
kubectl get services

Helm 베스트 프랙티스


  1. 버전 관리: 차트와 애플리케이션 버전을 명확하게 관리하여 호환성을 유지합니다.
  2. values.yaml 사용: values.yaml 파일을 사용하여 구성 값을 중앙에서 관리합니다.
  3. 템플릿 변수화: 템플릿에서 변수를 사용하여 동적 구성을 지원합니다.
  4. 리드미 작성: 차트 사용법과 설정 방법을 문서화하여 다른 사용자가 쉽게 사용할 수 있도록 합니다.
  5. 테스트 환경에서 검증: 프로덕션 배포 전에 테스트 환경에서 차트를 충분히 검증합니다.

결론


Helm은 쿠버네티스 애플리케이션의 배포와 관리를 간소화하는 강력한 도구입니다. 이번 포스팅에서는 Helm의 개념과 주요 기능, 그리고 Helm 차트를 사용하여 애플리케이션을 배포하는 방법을 자세히 설명했습니다. 이를 통해 쿠버네티스 환경에서 효율적으로 애플리케이션을 관리할 수 있기를 바랍니다.

다음 이전