Helm, Helm chart
Helm
- Kubernetes 클러스터에 어플리케이션을 쉽게 배포하고 관리하기 위해 개발된 Kubernetes용 패키지 매니저
ex) Node의 npm, Python의 pip, Mac의 brew 등 - Kubernates의 resource 생성은 보통
kubectl
을 사용하지 않고Helm
,Kustomize
를 사용한다 (kubectl
은 보통 조회 용으로 사용함) - Helm을 사용해
service
,deployment
,configmap
,secret
,hpa
,pv/pvc
등의 resource를 묶어서 관리 할 수 있다
설치
$ brew install helm
Helm Chart(= Helm Package)
- 패키지를 의미
- Helm Chart(= Helm Package)는
yaml
파일의 묶음 - 어플리케이션의 구성, 종속성, 리소스 등을 포함
-
즉, 쿠버네티스 리소스를 생성하기 위해 정의한
yaml
들을 패키징해서 쿠버네티스 클러스터에 배포할 때 사용해서 k8s를 쉽게 관리하는데 사용- ex) Helm Chart를 하나 만들어 사용하면 동일한 환경으로 A/B/C Application의 dev/stage/prod env를 구성할 수 있다
-
Helm repository :
Helm Chart
가 보관되는 공간
ex) Github Repository, Docker Hub - 클러스터 내에서 Helm repository의 Helm Chart를 가져와 리소스 생성
# helm repo add [repository name] [repository url]
$ helm repo add bitnami https://charts.bitnami.com/bitnami
# helm install [설정할 resource name] [helm repository/helm chart]
$ helm install mywordpress bitnami/wordpress
- mywordpress 리소스 생성완료
- pod, service, deployment, replicaset, statefulset
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/mywordpress-59b856997f-8lzs4 1/1 Running 0 81s
pod/mywordpress-mariadb-0 1/1 Running 0 81s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mywordpress LoadBalancer 10.111.79.244 <pending> 80:32704/TCP,443:32259/TCP 81s
service/mywordpress-mariadb ClusterIP 10.105.152.230 <none> 3306/TCP 81s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/mywordpress 1/1 1 1 81s
NAME DESIRED CURRENT READY AGE
replicaset.apps/mywordpress-59b856997f 1 1 1 81s
NAME READY AGE
statefulset.apps/mywordpress-mariadb 1/1 81s
- Chart File Structure
- 차트 directory 구성요소
쿠버네티스 리소스 종류
- service : Pod를 외부 IP에 노출하기 위해 사용
- deployment : Pod 관리를 위해 사용
- statefulset : DB와 같은 어플리케이션을 사용
- configMap : external config 설정을 위해 사용
- secret : credential 설정을 위해 사용
Template
- 템플릿을 정의하여 변수를 통해 환경에 따라 다른 값을 주입 가능
- 환경에 따른 값은
value.yaml
에서 설정 가능 -
Helm은 템플릿을 랜더링 하면서 변수를 주입해 resource yaml 파일을 만듬
- 패키지 생성
$ helm create {생성할 패키지 name}
$ helm install # = kubectl create
$ helm upgrade # = kubectl patch
$ helm upgrade --install # = kubectl apply
<reference>
https://cafe.naver.com/kubeops