ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • helm 기본
    Kubernetes 2018. 12. 21. 09:00
    helm 소개
    helm은 쿠버네티스 패키지 매니저 입니다. 쿠버네티스를 사용하다보면 결국 수많은 YAML파일들을 관리해야 됩니다. helm에서는 이런 YAML파일들의 집합을 차트(chart)라고하고, 이 차트를 관리할 수 있게 해주는 도구가 helm입니다. helm은 쿠버네티스의 하위 프로젝트로 시작되었다가 2018년 6월에 CNCF재단의 정식 프로젝트로 승격되었습니다. Helm은 차트를 만들고, 차트 압축 파일(tgz)를 만들수 있습니다. 그리고 차트들이 저장되어 있는 차트 저장소(chart repository)와 연계해서 쿠버네티스 클러스터에 차트를 설치하거나 삭제할 수 있습니다. helm으로 설치된 차트들의 배포 주기를 관리할 수도 있습니다.
    helm을 이용하면 잘 정리된 차트들을 이용해서 필요한 애플리케이션들을 빠르게 설치할 수 있습니다. https://github.com/helm/charts 에 보면 incubator와 stable 하위에 수많은 차트들이 준비되어 있는걸 확인할 수 있습니다. mysql, redis, 젠킨스, 하둡, 엘라스틱서치등 많은 애플리케이션들을 쉽게 설치해서 사용할 수 있습니다.

    helm 개념
    helm을 사용하기 위해서 알아야 하는 3가지 주요 개념이 있습니다.
    차트(chart) : 쿠버네티스 애플리케이션을 만들기위해 필요한 정보들의 묶음입니다.
    컨피그(config) : 배포 가능한 객체들을 만들기 위해 패키지된 차트에 넣어서 사용할 수 있는 설정들을 가지고 있습니다.
    릴리즈(release) : 특정 컨피그를 이용해서 실행중인 차트의 인스턴스 입니다.

    helm 구성요소
    helm은 실질적으로 2개의 요소로 구성되어 있습니다. 사용자가 직접 사용할 수 있는 명령줄 도구인 helm 클라이언트(helm client)와 쿠버네티스 클러스터 내부에서 실행되어서 helm 클라이언트에서 오는 명령을 받아서 쿠버네티스 api와 통신하는 역할을 하는 틸러 서버(Tiller Server)입니다.
    helm 클라이언트를 사용하면 로컬에서 차트를 개발할 수 있고 차트 저장소들을 관리할 수 있습니다. 틸러 서버와 통신해서 쿠버네티스 클러스터에 설치하기 위한 차트를 보낼수 있습니다. 현재 클러스터에서 실행중인 릴리즈에 대한 정보를 요청할수도 있습니다. 실행중인 릴리즈를 업그레이드하거나 삭제하라는 요청을 틸러서버로 보냅니다. helm 클라이언트는 GO언어로 개발되어 있고 틸러서버와는 gRPC를 이용해서 통신합니다.
    틸러서버는 주로 helm 클라이언트에서 오는 요청을 처리하기위해 대기하고 있습니다.클러스터에 실행할 릴리즈를 만들기 위해서 차트와 설정을 조합하는 일을 합니다.  쿠버네티스 클러스터에 차트를 설치하고 릴리즈를 관리합니다. 쿠버네티스 클러스터에서 실제로 차트를 업그레이드하거나 삭제하는 역할을 합니다.

    helm 설치 및 사용하기
    Mac OS X에서는 brew를 이용해서 helm클라이언트를 설치할 수 있습니다. 다음 명령을 이용해 간단하게 설치할 수 있습니다.
    brew install kubernetes-helm

    helm 클라이언트가 설치됐으면 쿠버네티스 클러스터에 틸러서버를 설치해야 합니다. 간단하게 아래 명령을 이용해서 틸러서버를 쿠버네티스 클러스터에 설치할 수 있습니다. 이때, 쿠버네티스에 접근하기 위한 kubeconfig 설정은 로컬 환경에 미리 되어 있어야 합니다.
    helm init

    kubectl 명령으로 kube-system 네임스페이스를 확인하면 틸러용 포드가 실행중인걸 확인할 수 있습니다.
    $ kubectl get pods -n kube-system
    NAME                                         READY     STATUS    RESTARTS   AGE
    etcd-docker-for-desktop                      1/1       Running   0          1d
    kube-apiserver-docker-for-desktop            1/1       Running   0          1d
    kube-controller-manager-docker-for-desktop   1/1       Running   0          1d
    kube-dns-86f4d74b45-65hk4                    3/3       Running   0          1d
    kube-proxy-vdhbs                             1/1       Running   0          1d
    kube-scheduler-docker-for-desktop            1/1       Running   0          1d
    tiller-deploy-6fd8d857bc-cbjfr               1/1       Running   0          23h

    그런 다음 아래 명령으로 helm에서 사용할 저장소 정보를 업데이트 합니다. 별도의 저장소를 운영중이지 않다면 stable용 저장소가 추가된걸 확인할 수 있습니다.
    $ helm repo update
    Hang tight while we grab the latest from your chart repositories...
    ...Skip local chart repository
    helm r...Successfully got an update from the "stable" chart repository
    Update Complete. ⎈ Happy Helming!⎈
    $ helm repo list
    NAME      URL

    이 상태에서 사용가능한 차트들을 확인하려면 search 명령을 이용 하면 됩니다. 수많은 차트가 있는걸 확인할 수 있습니다.



    이중에서 redis를 설치해 보겠습니다. 아래처럼 helm install명령을 이용해서 redis를 설치할 수 있습니다. 정상적으로 redis가 설치되면 redis 관련 포드가 쿠버네티스 클러스터에 실행된 걸 확인할 수 있습니다. redis실행에 사용된 암호를 확인하는 부분은 helm install 명령의 마지막 출력으로 나옵니다.
    $ helm install stable/redis
    To get your password run:

        export REDIS_PASSWORD=$(kubectl get secret --namespace default erstwhile-quail-redis -o jsonpath="{.data.redis-password}" | base64 --decode)

    To connect to your Redis server:

    1. Run a Redis pod that you can use as a client:

       kubectl run --namespace default erstwhile-quail-redis-client --rm --tty -i \
        --env REDIS_PASSWORD=$REDIS_PASSWORD \
       --image docker.io/bitnami/redis:4.0.11 -- bash

    2. Connect using the Redis CLI:
       redis-cli -h erstwhile-quail-redis-master -a $REDIS_PASSWORD
       redis-cli -h erstwhile-quail-redis-slave -a $REDIS_PASSWORD

    To connect to your database from outside the cluster execute the following commands:

        kubectl port-forward --namespace default svc/erstwhile-quail-redis 6379:6379 &
        redis-cli -h 127.0.0.1 -p 6379 -a $REDIS_PASSWORD
    # kubectl get pods
    NAME                                           READY     STATUS    RESTARTS   AGE
    erstwhile-quail-redis-master-0                 1/1       Running   0          46s
    erstwhile-quail-redis-slave-7b669b445d-mvg47   1/1       Running   0          46s

    kubectl 뿐만 아니라 helm명령을 통해서도 다음처럼 현재 실행중인 차트의 상태를 확인할 수 있습니다.
    $ helm ls
    NAME               REVISION    UPDATED                     STATUS      CHART          APP VERSION    NAMESPACE
    erstwhile-quail    1           Thu Nov 29 20:39:34 2018    DEPLOYED    redis-4.3.0    4.0.11         default

    여기 나오는 차트 이름을 이용해서 실행중인 차트를 삭제할 수 있습니다. 
    $ helm del erstwhile-quail




    댓글 0

Designed by Tistory.