IT Knowledge/기타

Helm 개념과 구조 기술조사

Seok. 2021. 1. 14. 13:49
반응형

Helm Version 3.0

 

Helm 이란?

  • Kubernetes 패키지 관리 도구
  • Linux Yum, Apt 비슷한 형태로 Kubernetes 패키지 배포를 가능하게 해주는 Tool
  • 어플리케이션을 패키징하여 Kubernetes Cluster 배포할 있도록 도와줌

 

Helm 사용하는 이유?

어플리케이션 배포 + 필요한 Kubernetes 리소스까지 모두 배포해주는 역할을 한다.

일반적으로 하나의 소프트웨어 or 어플리케이션을 배포하는데, 하나의 컨테이너만으로 해결되는 경우는 적다.

Ingress, Service, Pod, 디스크 볼륨, 기타 정책까지 추가적으로 배포해야 한다.

따라서, 하나의 어플리케이션을 위해서 많은 구성 설정이 필요해서 복잡해지는데,

이러한 하나의 소프트웨어를 배포하기 위해 필요한 모든 설정, 리소스의 배포를 패키지 형태로 지원한다.

 

담당자가 변경되었을때 or 새로운 매니페스트를 적용해야 할때 or 다른 쿠버네티스 클러스터로 이동될때

개별 매니페스트를 모두 개별 조정해줄것이 아니라. Helm 표준 형식에 조정이 필요한 설정 변수만 조정하여 사용자가 쉽게 어플리케이션 설치를 있다.

 

 

Helm 3 Architecture

Helm 3 부터는 더 이상 Tiller 없다.

Helm Client 직접 Kubernetes API 상호 통신해서 helm chart 배포한다.

 

 

Helm (Chart) Repository

  • Chart 들이 저장되어 있는 장소

 

Helm Chart ?

  • Kubernetes 리소스 패키지
  • Helm 통해서 인스톨하는 패키지를 chart 라고 한다.
  • 복잡한 Kubernetes 어플리케이션도 편리하게 정의하여 설치 or 업그레이드 있음.

 

헬름으로 차트를 관리하는 목적은?

  • 매니페스트 파일을 관리하기 쉽게 하기 위한 .

 

Helm Chart 기본 구조

Demo
┣── Chart.yaml
┣── templates
   └── Deployment.yaml
   └── Service.yaml

   └── . . .

┣──  Charts

   └── postgresql-1.0.1.tgz
└── values.yaml

└── requirement.yaml

# Chart.yaml
values.yaml, templates 폴더는 고정 포멧
# templates 폴더 안의 기타 yaml 파일들은 고정적이지 않다.

 

 

파일의 역할

  • Chart.yaml : 차트의 이름과 버전을 지정
  • Values.yaml : 사용자가 릴리즈 하려는 인스턴스에 대해 수정 가능한 설정을 포함한다.
  • Templates 폴더 : values.yaml 파일에 선언된 변수를 이용해서 kubernetes 매니패스트 파일을 생성하는 템플릿 파일이 존재한다.
  • Chart 폴더 : 의존성 있는 차트 패키지들 설치, requirement.yaml 파일에 의존성이 있는 차트를 명시할 경우, charts 폴더에 차트파일이 저장된다.

 

[개별 파일 예시]

Chart.yaml 파일

Name : demo
source :
 - https://github.com/cloudnativedevops/demo
version : 1.0.1

Chart 이름과 Version 필수적으로 명시한다.

 

Values.yaml 파일

Environment : development
container :
    name : demo
    port : 8888
    image : cloudnatived/demo
    tag : hello
replicas : 3

Values.yaml 파일은 자유형식의 YAML파일이며, 사전에 정의된 스키마가 없다.

Values.yaml 정의되어 있는 모든 변수들은 Chart내의 어디서든 참조 있을 뿐이다.

다시말해, 차트는 여기에 선언된 변수들을 이용해 chart 릴리즈한다는 의미이다.

 

Templates 폴더( ex. Example.yaml)

apiVersion : v1
kind : Deployment
metadata :
    name : {{ .Values.container.name }}-{{ .Values.environment }}
spec :
    replicas : {{ .Values.replicas }}
    selector :
        matchLabels :
            app : {{ .Values.container.name }}
    template :
        metadata :
            label :
                app : {{ .Values.container.name }}
                environment : {{ .Values.environment }}
        spec :
            container :
              - name : {{ .Values.container.name }}
                image : {{ .Values.container.image }} : {{ .Values.container.tag }}
                ports :
                    containerPort : {{ .Values.container.port }}
                env :
                    name : ENVIRONMENT
                    value : {{ .Values.environment }}

해당 문서에서 위의 요소들이 무엇을 의미하는지는 하나하나 언급하지 않는다.

다만, templates 선언된 kubernetes 매니패스트 파일에서 위의 values.yaml 정의된 변수들에 어떻게 접근하는지 보일것이다.

중괄호 안에 .values라는 변수를 넣고 "." 이용해서 접근하는것을 있다.

 

위의 template Value 변수를 적용하면 다음과 같다.

apiVersion : v1
kind : Deployment
metadata :
    name : demo-development
spec :
    replicas : 3
    selector :
        matchLabels :
            app : demo
    template :
        metadata :
            label :
                app : demo
                environment : development
        spec :
            container :
              - name : demo
                image : cloudnatived/demo : hello
                ports :
                    containerPort : 8888
                env :
                    name : ENVIRONMENT
                    value : development

 

 

[소식]

Helm 2는 더 이상 지원하지 않는다(Nov 13, 2020)

(https://helm.sh/blog/helm-2-become-unsupported/)

 

 

참조 : https://helm.sh/ko/

반응형