Helm Basics


kubectl apply -f app-deploy.yaml
kubectl apply -f app-pv.yaml
kubectl apply -f app-pvc.yaml
kubectl apply -f app-svc.yaml
kubectl apply -f app-secret.yaml

K8s 로 간단한 Application 을 배포하려면 Deployment, PV, PVC, Service, Secret 등 다양한 Object 를 생성해야한다. 이에 따라 관리해야하는 yaml 파일의 수도 늘어난다.

helm install wordpress
helm upgrade wordpress
helm rollback wordpress
helm uninstall wordpress

Helm 을 활용하면 Application 을 배포하기 위해 필요한 모든 K8s Object 를 생성하고 관리할 수 있다. 즉, Application 을 K8s Cluster 에 배포하기 위한 패키지 매니저인 것이다.

Helm2 vs Helm3

Helm2 에선 Tiller 라는 컴포넌트가 K8s Cluster 에 설치되어 helm cli 로 부터 전달된 명령들을 수행하는 역할을했다. Helm3 부턴 Tiller 컴포넌트가 없어졌다. Upgrade 와 Rollback 에서도 Helm3 부턴 3-Way Strategic Marge Patch 라는 개념을 도입했다.

Helm Components


# helm install {release-name} {chart-name}
helm install my-site bitnami/wordpress
helm install my-2-site bitnami/wordpress

Helm 은 기본적으로 Chart 형태로 K8s Object 들을 패키지화해서 관리한다. Chart 는 ArtifactHub.io 라는 곳에서 받아올 수 있다. Chart 를 활용해 Application 을 배포할 때 Release 를 지정해줄 수 있는데 이는 동일한 Application 을 독립적으로 관리하기 위해 사용된다. Application 을 K8s Cluster 에 배포하기 위해 사용된 Release, Chart 등의 Metadata 는 Secret 형태로 보관된다.

Helm Charts


hello-world-chart/
├── charts/     # Dependency Charts
├── templates/  # Templates directory
├── Chart.yaml  # Chart information
└── values.yaml # Configurable values

Helm Chart 는 기본적으로 위와 같은 형태로 구성된다. WordPress Chart 예시를 확인해보자.

helm install --values custom-values.yaml my-release bitnami/wordpress

Application 의 설정값을 바꾸고 싶은 경우 custom configuration values 들을 선언한 yaml 파일을 위와 같이 넘겨주면된다.

References