본문 바로가기

인턴

[Kubernetes] helm chart 생성

Helm

: 템플릿 방식, Deployment YAML 파일을 만들때, 환경에 따라 변경되는 부분을 변수로 처리한 템플릿을 만든 후에, 환경별로 변수 값을 채워 넣는 방식, 쿠버네티스 패키지 매니저(각 리소스를 패키지로 묶어서 관리)

  • 코드를 중복으로 사용하는 일을 helm chart로 손쉽게 배포 가능
  • 배포 A와 B에서 일부 항목이 달라야 하는 부분이 있다면, 그저 해당 항목을 적을 수 있는 공간 하나만 추가해주고, 설치 시점에 Helm이 해당 공간을 유저가 추가해준 값으로 대체하도록 두면 됩니다.
  • 상속이 없어 장기간의 관리가 가능
  • 소량의 value만을 외부에 노출해 쿠버네티스 리소스가 어떻게 구현되는 지에 대해서는 완전히 숨겨줌
# file: _charts/microserviceA/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  database_password: {{ .Values.databasePassword }}

Helm chart 구조

  • Chart.yaml : 차트의 정보를 담아놓는 파일(chart 이름, 버전 정보 등)
  • charts : 다른 의존성 있는 차트를 사용해야 할 때 필요한 디렉토리
  • templates : 리소스 파일들이 존재하는 디렉토리
    • _helpers.tpl : 각 templates 폴더에서 사용할 변수 정의
  • values.yaml : 기본으로 지정해 놓을 변수들이 들어가는 파일(사용자가 정의하는 설정값을 가진 yaml파일), yam파일을 작성할 때 동일한 값들을 하드코딩하지 않고 values.yaml에 설정한 변수를 통해 일괄적으로 사용 가능하다.

 


실습

helm chart를 이용해 openvswitch-exporter를 배포한다. *openstack에서 openvswitch가 설치되어있다는 전제하에

helm chart 생성

helm create openvswitch-exporter

helm chart 구조

helm chart 편집

차트로 만들 .yaml파일들을 templates디렉토리안에 넣어준 후, 각 .yaml파일내 변수들을 템플릿화하기위해 values.yaml, Chart.yaml, _helpers.tpl을 수정한다. (수정한 파일들을 기반으로 각 .yaml파일 내 변수가 설정된다.)

 

예시) openvswitchExporter-service.yaml

  • {{ }} : 중괄호로 처리된 부분이 Helm에서 변수를 사용하는 부분
  • include : helpers.tpl 파일에서 할당한 변수를 사용하는 구문
  • .Values : values.yaml 파일에서 지정해 놓은 값이 들어가거나 -set 또는 f 등으로 넣어 준 변수들이 들어간다. (helm install시 -set 이나 f 옵션으로 설치할 때 변수 지정 가능)

helm chart 배포를 위한 준비 및 배포

#차트 검증
helm lint openvswitch-exporter

#yaml파일 문법 검증(탬플릿에 value가 제대로 적용되서 원하는 YAML을 제대로 생성해나가는지)
helm template openvswitch-exporter
helm install openvswitch-exporter openvswitch-exporter --dry-run #서버가 템플릿을 렌더링한 결과물을 매니페스트파일로 출력, NOTES.txt파일까지 반영되어 출력됨

#차트 패키징(.tgz파일 생성됨)
helm package openvswitch-exporter

#Container Registry에 차트 업로드
helm push openvswitch-exporter-0.1.0.tgz oci://clnova.kr-central-1.kcr.dev/winnie-repo #패키징된 파일 CR에 올려 로컬에 파일이 없어도 install가능하도록

#차트 설치
#helm install [릴리스 이름] [차트가 저장되어있는 위치/차트 이름]
helm install openvswitch-exporter openvswitch-exporter #(로컬에 있는 헬름 차트로)
helm install openvswitch-exporter oci://clnova.kr-central-1.kcr.dev/winnie-repo/openvswitch-exporter #(CR에 있는 헬름 차트로)

#차트 배포상태 확인
helm status [차트가 저장되어있는 위치/차트 이름]

#install에 의해 생성된 helm release 삭제, k8s에 생성된 관련 자원도 모두 삭제
helm unintsall [차트 이름]