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 구성요소

image

쿠버네티스 리소스 종류

  1. service : Pod를 외부 IP에 노출하기 위해 사용
  2. deployment : Pod 관리를 위해 사용
  3. statefulset : DB와 같은 어플리케이션을 사용
  4. configMap : external config 설정을 위해 사용
  5. 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