Helm

inuit·2025년 6월 13일

All about 쿠버네티스

목록 보기
18/21
post-thumbnail

최근 업데이트일 2024-11-24

따라하며 배우는 쿠버네티스: Helm 사용하기 (1)

Helm: Quickstart Quide

Kubernetes의 패키지 매니저인 Helm에 대해서 알아보자.

Helm

쿠버네티스 오픈 소스 패키지 매니저, npm·pip처럼 Kubernetes의 패키지 관리를 돕는다.

  • 공통 구조를 템플릿화 하여 여러 환경/클러스터에 손쉽게 배포할 수 있다.
  • 배포 이력 관리 및 롤백을 지원한다.
  • 템플릿과 설정 값을 분리해서 유지보수에 용이하다.
  • Helm은 Chart라는 단위로 패키징된 쿠버네티스 리소스를 다루며, Release라는 이름으로 클러스터에 배포된다.
    • Chart: 클러스터에서 애플리케이션이 가동되기 위해 필요한 모든 리소스를 포함하는 파일 모음
      • YAML 파일 패키지로 repository에 push해두고 helm 명령어로 chart를 설치하여 리소스를 배포할 수 있다.
    • Repository: chart 저장소
      • 분산형 Helm chart 저장소인 Artifact Hub에서 CNCF 프로젝트에 대한 패키지 및 구성 찾기 · 설치 · 게시한다.
    • Release: 클러스터에서 구동되는 chart 인스턴스
      • 동일한 chart를 여러 번 설치하면 각각 새로운 Release로 관리되며 release 될 때 패키징된 chart와 사용자 정의 설정 값이 결합되어 정상 실행된다.
  • common한 yaml 구조를 정의해두고(=chart를 만들고), 그 구조에 들어가야하는 value만 수정하여 여러 개의 microservice를 배포할 때 재사용한다.
  • value는 override되게 따로 yaml에 작성하거나 --set flag로 cli에서 사용한다.
  • Template Engine: Helm이 Kubernetes YAML을 동적으로 생성하기 위한 시스템
  • Release Management
    • Tiller: chart들의 통합 관리와 설치를 위해 활용되는 특별한 Pod
      • 기존에 설치한 차트 통합관리 및 Release Management를 통해 실행할 수 있도록 해줌
    • RBAC을 위해 Tiller에 cluster-admin 권한을 부여하면서 보안 문제가 발생하였고, v3에 오면서 없어졌다.
    • 현재는 쿠버네티스 API를 통해 설치된 Helm 차트들을 쿠버네티스 자체에 저장한다.
    • 또한, 차트 설치 RBAC 권한은 사용자가 사용한 kubeconfig를 활용하는 방식으로 수정하여 Cluster 관리자는 Release가 기록되는 동안 유저의 접근 권한을 제한하는 등의 보안성이 향상되었다.

Helm 사용 방법

0. 설치

curl -fsSL -o get_helm.sh \
  https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3

# get_helm.sh를 실행 가능하게 설정
chmod 700 get_helm.sh

./get_helm.sh 

helm init # Helm v2에서만 사용되던 명령어, Tiller Pod 설치

1. Chart → Release로의 전환

  • Helm Chart는 단순한 템플릿(YAML 묶음)이지만, helm install 명령어를 통해 value 값을 주입받고,
  • 내부의 Go template 엔진에 의해 YAML 파일로 렌더링된 뒤 쿠버네티스에 적용된다.
  • 이때 생성된 쿠버네티스 리소스는 Release 이름으로 추적 가능하다.
# chart별 디렉토리 구조
Chart/
├──Chart.yaml      # 차트 메타 정보
├──values.yaml     # 기본 설정 값
├──templates/      # 템플릿 리소스들 (deployment.yaml, service.yaml 등)
└── charts/        # 하위 의존성 차트들
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.name }}
  labels:
    app: {{ .Values.name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Values.name }}
  template:
    metadata:
      labels:
        app: {{ .Values.name }}
    spec:
      containers:
        - name: {{ .Values.name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: {{ .Values.service.port }}

# templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.name }}
  labels:
    app: {{ .Values.name }}
spec:
  type: {{ .Values.service.type }}
  selector:
    app: {{ .Values.name }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.service.port }}

# values.yaml
name: my-nginx
replicaCount: 2
image:
  repository: nginx
  tag: "1.23"
  pullPolicy: IfNotPresent
service:
  type: ClusterIP
  port: 80
  
# Chart.yaml
apiVersion: v2
name: nginx
description: A simple nginx Helm chart
version: 0.1.0 # 이 Helm chart 자체의 버전 (chart version)
appVersion: "1.23" # 실제로 배포할 애플리케이션 (nginx)의 버전

2. template 렌더링과 적용

  • Helm 내부적으로 kubernetes API를 호출하는 것으로, kubectl apply와 유사하되, release 상태 추적 등 추가 기능이 있다.
  • values.yaml 값을 읽어 templates 폴더 내 yaml 파일에 채워 넣어 이를 클러스터에 적용한다.
helm template .      # value가 템플릿에 정상적으로 주입되는지 확인
helm install myapp ./Chart # 최종 YAML로 렌더링 후 kubectl apply 역할 수행
  • 대게 원격 저장소에 있는 chart를 사용하며 이는 아래처럼 사용한다.
# repository 등록 및 해당 repo를 사용하여 release
# chart를 저장소에서 자동으로 다운로드하여 사용
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install myapp bitnami/nginx

# 템플릿 구조나 values를 보고 싶다면 chart를 로컬에 다운로드
helm pull bitnami/nginx --untar

Helm 명령어

명령동작 설명
helm installChart → 리소스 → Kubernetes API로 배포 → Release 저장
helm upgrade기존 Release → 새로운 values로 덮어쓰기, Revision 증가
helm rollback이전 Revision으로 되돌림
helm delete리소스 삭제 + Release 메타데이터 삭제 가능 (soft delete)
helm repo add/update외부 차트 저장소 등록 및 갱신
helm lintYAML 템플릿 문법 오류 확인
helm historylog와 revision 확인
helm statusRelease 상태 추적 후 구성 정보 다시 읽기
helm search [hub / repo]공개적으로 사용 가능한 차트 찾기
helm createchart 생성, 디렉토리 내 관련 파일 생성
helm lshelm chart로 배포된 모든 Release 확인
profile
It’s always white night here.

0개의 댓글