LabHub

Helm 차트 제작과 배포 · 차트 구조 · 실습

차트 뼈대 만들고 표준 라벨 붙이기

LabHub 에서 이어서 보기

목표

Helm 차트의 표준 구조를 직접 만들고, 이름과 라벨을 한 자리에서 관리해 모든 오브젝트에 일관된 표준 라벨이 붙게 만듭니다.

왜 중요한가

차트를 배울 때 사람들은 템플릿 문법부터 궁금해하지만, 실제로 차트의 수명을 결정하는 것은 구조입니다. Chart.yaml 은 이 묶음이 무엇인지, values.yaml 은 사용자가 무엇을 만질 수 있는지, templates/ 는 그 값이 어떤 모양이 되는지를 각각 책임집니다. 이 분리가 있어야 "환경마다 파일을 복사해 고치는" 습관이 사라집니다. 라벨도 취향의 문제가 아닙니다. app.kubernetes.io/* 는 쿠버네티스 공식 권장 표준이고, 관리 도구와 대시보드가 이 라벨로 리소스를 묶습니다. 특히 공통 라벨과 셀렉터 라벨은 반드시 분리해야 합니다. Deployment 의 spec.selector 는 생성 후 변경할 수 없는 필드인데, 공통 라벨에는 차트 버전과 앱 버전이 섞여 있어서 셀렉터에 그대로 쓰면 버전을 올리는 순간 업그레이드가 거부됩니다.

단계

1. /root/helm/lab/labhub-web 에 차트 뼈대를 만드세요(helm create labhub-web/root/helm/lab 안에서 실행하면 됩니다). Chart.yaml, values.yaml, .helmignore 세 파일과 templates/(파일 3개 이상), charts/ 디렉터리가 모두 있어야 합니다. 산출물을 담을 /root/helm/lab/out 디렉터리도 미리 만들어 두세요.
2. /root/helm/lab/labhub-web/Chart.yaml 을 채우세요. apiVersion: v2, name: labhub-web, type: application, version0.1.0 같은 SemVer, appVersion: "1.27", 그리고 description 한 줄이 반드시 있어야 합니다.
3. /root/helm/lab/labhub-web/values.yaml 의 기본값을 다음으로 맞추세요. replicaCount: 2, image.repository: nginx, image.tag: "1.27", image.pullPolicy: IfNotPresent, service.port: 80. 이 파일에는 # 으로 시작하는 주석이 최소 한 줄 있어야 합니다.
4. /root/helm/lab/labhub-web/templates/_helpers.tpllabhub-web.fullname, labhub-web.labels, labhub-web.selectorLabels 세 개의 정의가 있어야 하고, 이름을 만드는 곳에 trunc 63 처리가 들어가야 합니다. 그리고 /root/helm/lab/labhub-web/templates/deployment.yaml 은 이 정의들을 include "labhub-web... 형태로 불러 써야 합니다.
5. helm template labhub-web /root/helm/lab/labhub-web > /root/helm/lab/out/rendered.yaml 로 렌더링을 저장하세요. 결과에는 오브젝트가 2개 이상 있어야 하고, Deployment 의 metadata.labelsapp.kubernetes.io/managed-by: Helm, app.kubernetes.io/name: labhub-web, app.kubernetes.io/version 이 있어야 하며, Service 의 metadata.labels 에도 같은 공통 라벨이 붙어 있어야 합니다.
6. /root/helm/lab/labhub-web/templates/NOTES.txt.Release.Name.Values. 로 시작하는 값을 최소 하나씩 참조하게 하세요. 그리고 실제로 렌더링된 안내문을 /root/helm/lab/out/notes.txt 에 저장하세요. helm install labhub-web /root/helm/lab/labhub-web --dry-run 의 출력에서 NOTES: 아래 부분만 잘라 내면 됩니다(sed -n '/^NOTES:/,$p'). 저장한 파일에는 labhub-web 이 들어 있어야 하고 렌더링되지 않은 중괄호 구문이 남아 있으면 안 됩니다.
7. helm lint /root/helm/lab/labhub-web > /root/helm/lab/out/lint.txt 로 린트 결과를 저장하세요. 파일에 린트 요약 줄이 있어야 하고 [ERROR] 가 하나도 없어야 합니다.
8. 값을 덮어쓴 렌더링을 helm template labhub-web /root/helm/lab/labhub-web --set replicaCount=5 > /root/helm/lab/out/scaled.yaml 로 저장하세요. 최종 확인 조건은 네 가지입니다. /root/helm/lab/out/rendered.yaml 의 Deployment spec.replicas 는 2, /root/helm/lab/out/scaled.yaml 의 것은 5, 컨테이너 이미지는 nginx:1.27, Service 의 첫 포트는 80. 그리고 Service 의 spec.selector 에 있는 app.kubernetes.io/name 과 Deployment 파드 템플릿 라벨의 app.kubernetes.io/name 이 같은 값이어야 합니다.

참고

단계 8개

  1. 차트 뼈대 만들기
  2. Chart.yaml 의 신원 채우기
  3. values.yaml 기본값 설계하기
  4. 이름과 라벨을 헬퍼로 뽑기
  5. 모든 오브젝트에 표준 라벨 붙이기
  6. 설치 안내문 쓰고 렌더링하기
  7. 차트 린트 통과시키기
  8. 렌더링 결과 검증하기