Helm

Helm은 쿠버네티스를 위한 패키지 관리자로, 복잡한 쿠버네티스 애플리케이션의 배포와 관리를 간소화하는 도구.
Helm은 쿠버네티스 애플리케이션의 정의, 설치, 업그레이드를 자동화하는 오픈소스 도구로, 복잡한 애플리케이션 구성을 단일 패키지로 관리할 수 있게 해주어, 배포 프로세스를 크게 간소화한다.

Helm의 주요 기능

  1. 템플릿 엔진:
    Helm은 강력한 템플릿 엔진을 제공하여 Kubernetes 매니페스트를 동적으로 생성할 수 있게 한다.
    이를 통해 환경별로 다른 설정을 쉽게 적용할 수 있다.
    예를 들어:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    apiVersion: v1
    kind: Service
    metadata:
      name: {{ .Release.Name }}-service
    spec:
      type: {{ .Values.service.type }}
      ports:
        - port: {{ .Values.service.port }}
          targetPort: http
          protocol: TCP
    
  2. 릴리스 관리:
    Helm은 각 배포를 ‘릴리스’로 관리하며, 롤백이나 업그레이드가 용이하다.
    문제가 발생하면 이전 버전으로 쉽게 되돌릴 수 있다:

    1
    2
    3
    4
    5
    6
    7
    8
    
    # 릴리스 배포
    helm install myapp ./mychart
    
    # 릴리스 업그레이드
    helm upgrade myapp ./mychart
    
    # 이전 버전으로 롤백
    helm rollback myapp 1
    
  3. 의존성 관리:
    애플리케이션이 필요로 하는 다른 서비스들의 차트를 의존성으로 정의하고 관리할 수 있다.
    Chart.yaml 파일에서 다음과 같이 정의한다:

    1
    2
    3
    4
    
    dependencies:
      - name: mysql
        version: 8.8.3
        repository: https://charts.helm.sh/stable
    

Helm의 주요 구성 요소

  1. 차트(Chart): 쿠버네티스 리소스를 패키징한 단위로, 애플리케이션 배포에 필요한 모든 리소스 정의를 포함한다.
  2. 리포지토리(Repository): 차트를 저장하고 공유하는 장소이다.
  3. 릴리스(Release): 쿠버네티스 클러스터에 배포된 차트의 인스턴스이다.

Helm Chart의 구조는 다음과 같다:

1
2
3
4
5
6
7
mychart/
  Chart.yaml           # 차트에 대한 메타데이터
  values.yaml         # 기본 설정값
  charts/             # 종속성 차트들
  templates/          # 템플릿 파일들
  README.md          # 사용 설명서
  LICENSE            # 라이선스 정보

Helm의 작동 방식

Helm은 차트를 사용하여 쿠버네티스 API를 통해 리소스를 클러스터에 배포한다.
사용자는 helm CLI 도구를 통해 차트를 관리하고 애플리케이션을 배포할 수 있다.

Helm의 장점

  1. 패키지 관리 간소화: 복잡한 애플리케이션을 단일 패키지로 관리할 수 있다.
  2. 재사용성: 차트를 통해 구성을 재사용하고 공유할 수 있다.
  3. 버전 관리: 애플리케이션의 다양한 버전을 쉽게 관리할 수 있다.
  4. 롤백 용이성: 문제 발생 시 이전 버전으로 쉽게 롤백할 수 있다.
  5. CI/CD 통합: 지속적 통합 및 배포 파이프라인과 쉽게 통합된다.

Helm의 아키텍처

Helm v3부터는 클라이언트-서버 모델에서 클라이언트 전용 모델로 변경되었다.
이로 인해 보안이 강화되고 사용이 간편해졌다.

Helm의 실제 사용 예시

  1. 웹 애플리케이션 배포:
    다음은 간단한 웹 애플리케이션을 배포하는 Helm 차트의 예시:

    1
    2
    3
    4
    5
    6
    7
    8
    
    # values.yaml
    replicaCount: 3
    image:
      repository: nginx
      tag: latest
    service:
      type: LoadBalancer
      port: 80
    
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    # templates/deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: {{ .Release.Name }}-deployment
    spec:
      replicas: {{ .Values.replicaCount }}
      template:
        spec:
          containers:
            - name: {{ .Chart.Name }}
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
    

Helm 사용 시나리오

Helm은 복잡한 마이크로서비스 아키텍처를 가진 애플리케이션이나 여러 환경(개발, 스테이징, 프로덕션 등)에 배포해야 하는 경우에 특히 유용하다.

Helm의 모범 사례

차트 설계:

  • 명확한 문서화를 제공한다
  • 기본값을 신중하게 설정한다.
  • 보안 설정을 고려한다.
  • 차트를 모듈화하여 관리한다.

버전 관리:

  • Semantic Versioning을 사용한다.
  • 변경 사항을 문서화한다.
  • 테스트를 자동화한다.

용어 정리

용어설명

참고 및 출처