Helm 3 설치 & 기본 사용방법

1. Overview

이번 문서에서는 Helm의 사용법에 대해서 알아보겠습니다.

2. Prerequisites

3. Helm이란?

Helm은 쿠버네티스의 package managing tool입니다.

크게 세가지 컨셉을 가지고 있는데 :

  1. Chart : Helm package입니다. app을 실행시키기위한 모든 리소스가 정의되어있습니다.
    Homebrew formula, Apt dpkg, Yum RPM파일과 비슷하다고 생각하시면 됩니다.
  2. Repository : chart들이 공유되는 공간입니다. docker hub를 생각하시면 될 것 같습니다.
  3. Release : 쿠버네티스 클러스터에서 돌아가는 app들은(chart instance) 모두 고유의 release 버전을 가지고 있습니다.

다시 정리하면,
helm은 chart를 쿠버네티스에 설치하고, 설치할때마다 release버전이 생성되며, 새로운 chart를 찾을때에는 Helm chart repository에서 찾을 수 있습니다.

주의!
이 문서는 helm v3.0.0 이상을 다루고 있습니다.
2.x버전과 많은것이 변경되었기 때문에 참고해주시기 바랍니다.

4. Installation

kubectl을 사용할 수 있는 노드로 이동하여 설치합니다.

$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
$ chmod 700 get_helm.sh
$ ./get_helm.sh

버전 확인 :

$ helm version

image

helm chart repository를 추가해줍니다.

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/

chart list 출력 :

$ helm search repo stable

image

chart update :

$ helm repo update

image
Happy Helming!

5. 실습 (Prometheus)

설치가 끝났으니 한번 차트를 클러스터에 배포해봅시다.

모니터링 툴 중 하나인 Prometheus를 배포해보겠습니다.

$ helm install monitor stable/prometheus

image

그런데 pod의 상태를 확인해보면 :

$ kubectl get pod

image
몇 개의 pod이 Pending상태입니다.

이유는 k8s클러스터에 StorageClass가 정의되어있지 않기 때문입니다.
(pvc의 요청을 받아줄 provisioner가 없기 때문)

그래서 일단 pv옵션을 false로 변경해주어 EmptyDir을 사용하게 해야 합니다.

Helm chart의 설정을 변경하는 방법은 크게 두가지 방법이 있습니다.

using yaml

문제가 되는 chart를 먼저 확인해봅시다.

$ helm inspect values stable/prometheus

image

persistentVolume.enabledTrue입니다. 이렇게 표기되어있는 부분이 총 세군데가 있습니다.

수정할 부분만 따로 파일을 만들어주면 됩니다.

$ vim volumeF.yaml
alertmanager:
    persistentVolume:
        enabled: false
server:  
    persistentVolume:
        enabled: false
pushgateway: 
    persistentVolume:
        enabled: false

딱 이렇게만 적고 업그레이드해줍시다.

$ helm upgrade -f volumeF.yaml monitor stable/prometheus

업그레이드 하게되면 Pending이었던 pod들이 Running상태로 변하는 것을 확인할 수 있습니다.
image

using Command

다른 방법으로는 커맨드라인으로 설정을 추가해주는 방법이 있습니다.

outer:
  inner: value

위와 같은 표현식을 다음과 같이 표현할 수 있습니다.

$ --set outer.inner=value

그럼 위 문제와 같은 경우는 다음과 같이 표현될 수 있습니다.

$ helm install monitor stable/prometheus --set alertmanager.persistentVolume.enabled=false --set server.persistentVolume.enabled=false --set pushgateway.persistentVolume.enabled=false

pod들이 정상적으로 Running되었으니 웹으로 접속해봅시다.

$ kubectl get svc

image

prometheus-serverclusterIP에서 NodePort로 변경해줍니다.(spec.type)

$ kubectl edit svc monitor-prometheus-server

image
다시 확인해보면 포트포워딩된 포트가 보입니다.

ip:port로 접속해봅시다.
image

삭제

삭제할때는 간단하게 설치할때 사용했던 이름만 사용하면 됩니다.

$ helm uninstall {이름}

댓글남기기