Helm chart의 모든 것

Helm

Helm is a tool for manaing Kubernetes charts.
Charts are packages of pre-configured Kubernetes resources.

  • 헬름은 쿠버네티스 차트를 관리하기 위한 도구
  • 차트는 사전 구성된 쿠버네티스 리소스의 패키지
  • 같은 어플레케이션을 여러 환경에 배포시 환경 변수, 도메인 등의 manifest 파일을 차트를 통해 관리
  • 차트를 중심으로 하는 쿠버네티스 개발 종합 관리 도구

설치

1
2
3
4
5
6
7
8
9
10
11
# 설치
brew install kubernetes-helm

# 초기화
helm init

# tiller 파드 확인
kubectl -n kube-system get service,deployment,pod --selector app=helm

# 버전 확인
helm version

구성

  • cli와 쿠버네티스 클러스터에 설치되는 서버인 tiller(틸러)로 구성

chart

  • 쿠버네티스는 service, deployment, ingress 등 리소스를 생성하고 manifest 파일을 적용하는 방식으로 어플리케이션을 배포한다. 이 manifest 파일을 생성하는 템플릿을 여러 개 패키징한 것
  • helm repository 에 tgz 파일로 저장

chart 구성

1
2
3
4
5
6
7
8
chart-example
├── charts # 차트가 의존하는 차트 디렉토리
├── templates # manifest 파일 템플릿 디렉토리
│   ├── NOTES.txt # 차트 사용법 등 참조 문서 템플릿
│   ├── _helper.tpl # manifest 렌더링에 사용되는 템플릿 헬퍼
│   └── example.yaml # 각종 K8S 리소스의 manifest 템플릿
├── Chart.yaml # 차트 정보가 정의 파일
└── values.yaml # 차트 기본값 value 파일

차트 설치시 values.yaml 에 override 할 값을 정의한 yaml 파일을 만들면 된다.

repository

  • local: 헬름 클라이언트가 설치된 로컬 리포, 로컬에서 생성한 패키지가 존재
  • stable: stable charts repo, 기본값이며 helm/charts 차트 사용 가능
  • incubator: stable 조건 미달 repo
    • helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
  • helm search 로 차트 검색 가능

명령어

init

보통은 helm init
실서버에서는 helm init --service-account tiller --node-selectors system --history-max 10
업그레이드는 helm init --upgrade

  • –service-account: 틸러가 사용할 서비스계정
  • –node-selectors: 틸러를 배포할 노드 레이블
  • –upgrade: 틸러 업그레이드
  • –history-max: 리소스 하나당 유지할 최대 히스토리 수

create

helm create 차트명

package

helm package 차트명
차트를 압축파일로 패키징

  • –version: 차트 버전 지정
    • 없을 경우 차트의 버전을 따른다.

helm search 검색어

  • -r, --regexp: 검색어를 정규표현식으로 사용
  • -l, --versions: 버전 목록도 출력

fetch

helm fetch 차트경로

  • –version: 특정 버전 지정

serve

helm serve
로컬 레포지토리로 사용할 웹 서버 시작

  • –address: 서버가 개방할 주소
    • 기본값은 127.0.0.1:8879
  • –repo-path: 차트 레포지토리가 될 로컬 디렉토리

install

helm install 차트명
차트로 애플리케이션 설치

1
2
3
4
5
6
helm install stable/redis --name my-redis

helm install stable/redis --version 3.6.0 \
--name my-redis \
--namespace gracefullight \
-f ./my-redis.yaml
  • –dry-run
  • –name: 릴리즈명
  • –namespace: 설치 대상 네임스페이스
  • -f, --values: yaml 파일 경로 (다수 가능)
  • –version: 차트 버전 지정

list

helm list
helm list --namespace kube-system

  • –deleted: 삭제된 릴리즈 포함
  • –namespace: 해당 네임스페이스만 확인

get

helm get 릴리즈명
설치된 릴리스 상ㅇ세 정보를 yaml 으로 출력

  • –revision: 릴리즈 리비전 확인

delete

helm delete 릴리즈명

  • –purge: 릴리즈 삭제하고 릴리즈명 해제