본문 바로가기
K8s/Core Concept

[K8s] Helm 이란?

by okms1017 2024. 11. 14.
728x90

✍ Posted by Immersive Builder  Seong

 

Helm

헬름(Helm)은 어플리케이션을 배포하고 실행하기 위해 필요한 쿠버네티스 리소스들을 하나의 패키지로 관리하는 도구입니다. 쿠버네티스 인그레스(Ingress), 서비스(Service), 컨피그맵(ConfigMap), 시크릿(Secret) 등의 리소스를 패키징하는 것이 대표적입니다. 마치 리눅스 환경에서 YUM 또는 DNF가 하는 역할과 유사합니다. 헬름을 사용하면 클러스터에 복잡한 어플리케이션을 설치하고 관리하는 작업을 자동화할 수 있습니다. 대부분의 벤더사들이 자사 어플리케이션을 헬름으로 패키징하여 제공하고 있습니다. 

 

주요 개념

차트(Charts)

헬름 차트는 헬름을 배포하는 기본 단위입니다. 어플리케이션 설치 및 구성에 필요한 모든 쿠버네티스 리소스를 정의합니다. 헬름 차트는 특정한 디렉토리 구조를 가지는데 YAML 파일, 변수 파일, 템플릿, CRD 등을 포함하고 있습니다. 

 

myChart/

    ├──  Chart.yaml                    # 차트에 대한 정보를 포함하고 있는 YAML 파일

    ├──  LICENSE                        # 차트의 라이선스를 포함하고 있는 텍스트 파일

    ├──  README.md                  # 참고용 README 파일

    ├──  requirements.yaml       # 차트의 의존성을 목록화한 YAMl 파일 

    ├──  values.yaml                   # 차트의 기본 구성 값을 포함한 파일

    ├──  charts/                            # 차트가 의존하는 다른 차트를 포함하는 디렉토리
    ├──  templates/                      # values.yaml 과 결합하여 유효한 매니페스트를 생성하는 템플릿 디렉토리
    └──  templates/NOTES.txt     # 차트에 대한 간단한 사용법을 설명한 파일 

 

레포지토리(Repositories)

헬름 레포지토리는 헬름 차트를 저장하고 공유하는 저장소입니다. 레포지토리는 벤더사에서 별도 운영하는 자사 저장소 또는 공식 차트 저장소인 ArtifactHUB를 이용할 수 있습니다. 사용자는 어플리케이션을 지원하는 레포지토리로부터 헬름을 내려받아 쿠버네티스 클러스터에 배포할 수 있습니다. 

 

ArtifactHUB

 

Artifact Hub

Find, install and publish Cloud Native packages

artifacthub.io

 

템플릿(Template)

헬름 차트는 헬름 템플릿을 사용하여 배포와 관련된 파일을 관리합니다. 헬름 템플릿은 values.yaml 파일에서 제공하는 값을 바인딩하여 동적으로 쿠버네티스 리소스를 생성합니다. values.yaml 파일은 사용자 정의 값을 제공하는 파일로, 이 파일을 수정함으로써 공통 변수를 한 번에 수정할 수 있습니다. 변수를 참조할 때에는 {{ .Vaules.replicaCount }}와 같은 형식을 사용하고, 각각 values.yaml 파일과 key를 가리킵니다. 

 

 

아래는 간단한 헬름 템플릿 예시입니다. 

 

  • templates/deployment.yaml

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: {{ .Release.Name }}-{{ .Chart.Name }}
          labels:
            app: {{ .Chart.Name }}
        spec:
          replicas: {{ .Values.replicaCount }}
          selector:
            matchLabels:
              app: {{ .Chart.Name }}
          template:
            metadata:
              labels:
                app: {{ .Chart.Name }}
            spec:
              containers:
                - name: {{ .Chart.Name }}
                  image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
                  ports:
                    - containerPort: {{ .Values.service.port }}
                  resources:
                    limits:
                      memory: {{ .Values.resources.limits.memory }}
                      cpu: {{ .Values.resources.limits.cpu }}
                    requests:
                      memory: {{ .Values.resources.requests.memory }}
                      cpu: {{ .Values.resources.requests.cpu }}
 

 

  • values.yaml

        replicaCount: 2

        image:
          repository: nginx
          tag: "1.16.0"

        service:
          port: 80

        resources:
          limits:
            memory: "512Mi"
            cpu: "500m"
          requests:
            memory: "256Mi"
            cpu: "250m"
 

 

릴리스(Release)

헬름 릴리스는 헬름 차트를 사용하여 배포한 어플리케이션 인스턴스를 말합니다. 즉, 실제 클러스터에 배포된 어플리케이션을 의미합니다. 각 릴리스는 고유한 이름을 가지며 업그레이드, 롤백, 삭제 등의 작업을 수행할 수 있습니다. 

 

주요 기능

 

  • 배포 간소화 : 복잡한 쿠버네티스 리소스들을 단일 헬름 차트로 패키징하여 쉽게 배포합니다. 
  • 버전 관리 및 롤백 : 헬름은 릴리스로 배포를 관리하고, 버전 관리가 가능하므로 업그레이드 및 롤백이 간편합니다. 
  • 설정 변경 : 변수 파일을 통해 어플리케이션의 설정을 한 번에 변경할 수 있습니다. 
  • 의존성 관리 : 디렉토리 구조 내에 다른 차트에 대한 의존성을 정의할 수 있고, 배포 시 자동으로 종속된 차트를 함께 설치하고 관리합니다. 
  • 템플릿 사용 : 템플릿에 사용자 정의 값을 입력하여 쿠버네티스 리소스를 동적으로 생성할 수 있습니다. 

 

주요 명령어

 

  • 레포지토리 추가 

helm repo add <repo-name> <repo-url>

 

  • 레포지토리 업데이트

helm repo update

 

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

 

  • 템플릿 렌더링 : 설치 없이 로컬에서 템플릿을 렌더링하여 YAML 확인 
helm template <chart-name>

 

  • 차트 검색 

helm search hub <keyword>

 

  • 차트 로컬로 가져오기
helm pull <repository/chart-name>

 

  • 차트 설치
helm install <release-name> <chart-name> [-f custom-values.yaml]

 

  • 차트 업그레이드 : 신규 또는 수정 버전으로 재배포
helm upgrade <release-name> <chart-name>

 

  • 차트 목록 조회
helm list (ls)

 

  • 릴리스 현재 상태 조회
helm status <release-name>

 

  • 릴리스 설정 값 조회 
helm get values <release-name>

 

  • 릴리스 롤백
helm rollback <release-name> <revision-number>

 

  • 릴리스 삭제
helm uninstall <release-name>  

helm delete <release-name>

 

  • 차트 디버깅 : 실행 중인 헬름 차트의 모든 YAML 목록 및 상세 설정 확인 
helm get manifest <release-name>

 

  • 차트 패키징 : 로컬에서 .tgz 파일로 패키지 생성 

helm package <chart-directory>

 

 


[참고]

1) https://helm.sh/

 

Helm

Helm - The Kubernetes Package Manager.

helm.sh

728x90

'K8s > Core Concept' 카테고리의 다른 글

[K8s] Readiness Probes 란?  (0) 2024.11.23
[K8s] 소프트웨어 배포 전략(Software Deployment Strategies)  (0) 2024.11.19
[K8s] CoreDNS 란?  (0) 2024.11.16
[K8s] JSON Path  (0) 2024.11.13
[K8s] YAML 이란?  (1) 2024.11.12