Helm-Chart 기본상식

푸르둥개·2025년 11월 13일

1. Helm-Chart ?

  • 헬름 : 쿠버네티스를 위한 패키지 매니저
  • 헬름차트 : 헬름의 패키지 포맷
    • 쿠버네티스 애플리케이션 실행에 필요한 리소스 정의를 포함
    • Homebrew 포뮬러, Apt dpkg, YUM RPM 과 비슷한 개념
  • 리포지토리를 통해 차트를 공유
  • 공개 헬름 차트로 애플리케이션을 쉽게 설치할 수 있다!! (명령어 한 줄로 차트를 설치해서 애플리케이션 설치)
  • 헬름차트 구성요소 → CI/CD 리포지토리의 각 배포단위 디렉토리를 참고
mychart/
  Chart.yaml         **# 차트에 대한 명세를 가진 파일**
  values.yaml        **# 차트에 대한 기본 환경설정 값을 가진 파일**
  charts/            # 종속된 차트들을 포함하는 디렉토리
  templates/         # **values와 결합될 때, 쿠버네티스 manifest 파일들이 생성될 디렉터리**
  ..

2. Helm template

  • 헬름차트에 필요한 변수는 values.yaml와 /templates 디렉토리 아래 파일들을 참조
    (templates/ 아래 파일 → 템플릿 렌더링 엔진으로 전달 → 처리 결과를 모아 쿠버네티스로 전달)
  • values.yaml만 참조한다면?
    • .Values.env.환경변수키… 의 반복
    • 같은 변수를 참조하는 코드의 중복
  • Go 템플릿 형식을 통해 복잡한 설정값들의 구성을 간결하게 구현
    • {{ }} 중괄호 속의 코드들이 Go 템플릿 문법의 일부분
      (쿠버네티스와 헬름이 Go로 개발되어 있음)
    • if else 조건문, range 반복문, 표현식, 함수 사용이 가능!
      Helm | 템플릿 함수 목록
    • 오퍼레이터 eq, ne, lt, gt, and, or, not
    • named template
      • define 으로 정의하고, template 으로 가져와서 사용
    • CD-CD 리포지토리에서 사용중인 문법들
containers:
- env:
  {{- range $k, $v := .Values.env }}
  - name: {{ $k }}
    value: {{ quote $v }}
  {{- end }}
containers:
    - env:
      - name: AMQPLIB_HOST
        value: "x.x.x.x"
      - name: AMQPLIB_PASSWORD
        value: "mypasswod"
      - name: AMQPLIB_PORT
        value: "1234"
				...
  • range 반복문
  • quote 함수 : 쌍따옴표로 값을 묶는다 (문자열 데이터처리시 권장)
  • {{- , -}} 줄바꿈 포함한 좌/우 공백 제거
  • $varname := : 변수선언 및 built-in object값 할당
{{ toYaml $.Values.ingress.annotations | indent 4 }}
# 함수 뒤에 인자를 전달할 수도 있고(toYaml), 
# 파이프라인 앞에 인자가 오도록 하여 함수에 인자를 전달할 수도(indent) 있음
annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/cors-allow-methods: PUT, GET, POST, OPTIONS
    nginx.ingress.kubernetes.io/cors-allow-origin: <https://mydomain.com>
    nginx.ingress.kubernetes.io/proxy-body-size: 0m
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
		...
  • toYaml 함수 : 값을 그대로 Yaml로 프린트
  • nindent, indent 함수 : 라인바꿔서 들여쓰기, 들여쓰기

3. built-in object

Helm이 자체적으로 내장하고 있는 오브젝트 (값, 함수 그자체 혹은 이들을 포함하고 있는 오브젝트)

  • Release : release에 대한 정보들을 포함
    • 쿠버네티스 클러스터에서 실행되는 특정인스턴스를 release 라고 함
    • Release.Name (release의 이름), Release.Time (release가 생성된 시간) 같은 오브젝트들을 포함
  • Values : values.yaml 파일을 통해 템플릿으로 전달되는 값
  • Chart : Chart.yaml 파일의 내용
  • Files : 차트 내부의 일반 파일에 접근할 수 있게 함
    (템플릿에 접근하기 위해 Files를 쓸 수는 없음)
    • Files.Get : 파일 내용을 파일이름으로 가져올 수 있는 함수 (ex. .Files.Get config.ini)
    • Files.GetBytes : 파일의 내용을 바이트 배열으로 가져옵니다. (이미지 파일을 가져올 때 사용가능)
  • Capabilities : 쿠버네티스 클러스터가 어떤 기능들을 지원하는지에 대한 정보 제공
    • Capabilities.APIVersions, Capabilities.KubeVersion
  • Template : 현재 실행되고 있는 템플릿에 대한 정보 제공
    • Template.name : 현재 탬플릿의 경로 명 (차트 디렉터리 기준)
      (ex. mychart/templates/mytemplate.yaml)
    • Template.BasePath : 현재 차트의 템플릿 디렉터리의 위치(ex. mychart/templates)

3. Helm template을 위한 Helm CLI

  • 먼저 helm 설치 후 명령어들을 실행해보자
  • helm template --debug : 템플릿을 로컬에서 렌더링해보기
    • 렌더링된 .yaml menifest file을 확인해볼 수 있다
      ~/code-cat/$ helm template --debug adcd > ./abcd/debug.txt
      install.go:192: [debug] Original chart version: ""
      install.go:209: [debug] CHART PATH: /home/vagrant/code-cat/abcd

- 들여쓰기 등으로 인한 YAML PARSE ERROR를 확인해볼 수 있다.
  AML parse error (에러가 발생한 위치를 반환함)

- helm install --dry-run --debug : 서버에서 렌더링
- helm get manifest : 서버에 설치된 템플릿 확인
- helm lint : 차트가 모범사례에 맞는지 검증
  
  
  
  
profile
DevOps업무중, 개발팀과 운영팀이 알아두면 좋은 정보를 공유합니다.

0개의 댓글