ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • helm 차트 사용하기
    Kubernetes 2018. 12. 24. 09:00
    helm 차트 구조
    helm에서 사용하는 차트는 디렉토리 하나에 들어가 있는 파일들의 집합입니다. 디렉토리 이름을 차트이름으로 지정하고 그 안에 필요한 파일들을 넣습니다.  디렉토리안의 파일들은 대략 다음과 같은 구조를 가집니다.
    wordpress/
      Chart.yaml          # 차트에 대한 정보를 가지고 있음.
      LICENSE             # 옵션 : 차트 라이센스에 대한 정보를 가지고 있음.
      README.md           # 옵션 : 차트에 대한 설명 파일
      requirements.yaml   # 옵션 : 차트의 의존성을 명시한 파일
      values.yaml         # 이 차트에서 사용하는 기본 설정 값
      charts/             # 이 차트에 관련되어 있는 차트들
      templates/          #  쿠버네티스 매니페스트 파일들로 변환될 YAML템플릿 파일들
      templates/NOTES.txt # 옵션 : 짧은 사용법 설명


    helm create 명령을 사용하면 기본 구조를 가진 차트를 만들 수 있습니다. 다음 처럼 차트를 만들고 살펴보면 디렉토리 구조가 어떻게 구성되어 있는지 보입니다.





    helm chart 만들어서 사용하기
    일반적으로는 잘 만들어진 차트를 바로 가져와서 사용할 수 있습니다. 하지만 차트를 고쳐서 사용해야 하거나 원하는 앱의 차트가 없다면 직접 만들어서 사용해야 할수도 있습니다. 이럴때는 어떻게 해야 하는지 알아보겠습니다. 
    우선 helm fetch를 이용해서 redis 차트를 다운받아 보겠습니다.

    helm fetch stable/redis

    다운받은 파일은 tgz확장자를 가진 압축파일 하나입니다. 다음처럼 이 파일의 압축을 풀면 차트 내용을 볼 수 있습니다.
    $ tar zxvf redis-4.3.0.tgz
    x redis/Chart.yaml
    x redis/values.yaml
    x redis/templates/NOTES.txt
    x redis/templates/_helpers.tpl
    x redis/templates/configmap.yaml
    x redis/templates/health-configmap.yaml
    x redis/templates/metrics-deployment.yaml
    x redis/templates/metrics-prometheus.yaml
    x redis/templates/metrics-svc.yaml
    x redis/templates/networkpolicy.yaml
    x redis/templates/redis-master-statefulset.yaml
    x redis/templates/redis-master-svc.yaml
    x redis/templates/redis-role.yaml
    x redis/templates/redis-rolebinding.yaml
    x redis/templates/redis-serviceaccount.yaml
    x redis/templates/redis-slave-deployment.yaml
    x redis/templates/redis-slave-svc.yaml
    x redis/templates/secret.yaml
    x redis/.helmignore
    x redis/README.md
    x redis/values-production.yaml

    $ tree redis
    redis
    ├── Chart.yaml
    ├── README.md
    ├── templates
    │   ├── NOTES.txt
    │   ├── _helpers.tpl
    │   ├── configmap.yaml
    │   ├── health-configmap.yaml
    │   ├── metrics-deployment.yaml
    │   ├── metrics-prometheus.yaml
    │   ├── metrics-svc.yaml
    │   ├── networkpolicy.yaml
    │   ├── redis-master-statefulset.yaml
    │   ├── redis-master-svc.yaml
    │   ├── redis-role.yaml
    │   ├── redis-rolebinding.yaml
    │   ├── redis-serviceaccount.yaml
    │   ├── redis-slave-deployment.yaml
    │   ├── redis-slave-svc.yaml
    │   └── secret.yaml
    ├── values-production.yaml
    └── values.yaml

    1 directory, 20 files

    여기서 values.yaml파일을 열어서 변경해 보겠습니다. 본래 values.yaml의 내용은 이런 방식이 아니라 차트를 설치할때 옵션으로 주도록 되어 있습니다. 그러나 여기서는 차트를 변경하고 사용하는걸 연습해 보기위해 직접 values.yaml파일을 고치고 다시 패키지해서 차트로 만들어서 사용해 보도록 하겠습니다.  values.yaml의 images.password 부분을 mypassword로 변경합니다.


     
    차트를 패키지하기위해 버전도 변경해 주도록 합니다. Chart.yaml파일에 있는 version을 0.1.0로 변경합니다.



    이 차트를 설치하려면 다음처럼 helm install 명령어로 간단하게 설치할 수 있습니다. 작업했던 디렉토리 경로를 명시해 주면 됩니다.
    helm install ./redis

    설치되고나서 helm ls로 확인해 보면 chart버전이 0.1.0로 변경된걸 볼 수 있습니다.



    변경한 패스워드가 정상적으로 적용됐는지 확인해 보기 위해서 helm 설치 후 나오는 안내문구의 명령어를 참고해서 redis 패스워드를 확인할 수 있습니다.
    $ kubectl get secret --namespace default mean-lambkin-redis -o jsonpath="{.data.redis-password}" | base64 —decode
    mypassword%
    mypassword라고 우리가 변경했던 값이 나오는걸 확인할 수 있습니다.


    helm chart 저장소 직접 만들어서 사용하기
    차트를 만들어서 혼자만 사용하는게 아니라 다른 사람들과 공유해서 사용하려면 어떻게 해야 할까요? 우선 수정한 차트를 업스트림에 반영시키도록 코드를 제출해서 사용하는 방법을 생각해 볼 수 있습니다. 하지만 사내에서만 사용하거나 특정 조직내부에서만 사용해야하는 차트 같은 경우는 그렇게 사용할 수 없습니다. 그런 경우에 helm 저장소를 직접 운영하는걸 생각해 볼 수 있습니다. 이런 경우를 위해서 helm에서는 chartmesuem(https://github.com/helm/chartmuseum) 이라는 오픈소스 차트 저장소를 제공하고 있습니다. 차트뮤지엄(chartmesuem)을 이용해서 helm 저장소를 만들어 보도록 하겠습니다.

    차트뮤지엄은 운영체제별 실행파일을 다음 명령어를 이용해서 받을 수 있습니다. 파일을 다운 받은 다음에 실행 권한을 주고 실행경로에 옮겨 줍니다.
    # on Linux
    curl -LO https://s3.amazonaws.com/chartmuseum/release/latest/bin/linux/amd64/chartmuseum

    # on macOS
    curl -LO https://s3.amazonaws.com/chartmuseum/release/latest/bin/darwin/amd64/chartmuseum

    # on Windows
    curl -LO https://s3.amazonaws.com/chartmuseum/release/latest/bin/windows/amd64/chartmuseum

    chmod +x ./chartmuseum
    mv ./chartmuseum /usr/local/bin

    이제 차트뮤지엄을 실행해 보겠습니다. 차트뮤지엄은 차트저장소 역할을 하기 때문에 차트를 저장할 스토리지를 실행할때 지정해 주어야 합니다. AWS S3, 구글 클라우드 스토리, 애저 Blob 스토리지, 알리바바 클라우드 OSS 스토리지, 오픈스택 오브젝트 스토리지등 다양한 클라우드 저장소를 사용할 수 있습니다. 여기서는 테스트 용도이기 때문에 로컬디스크에 차트를 저장하도록 하고 실행해 보겠습니다. 다음 명령으로 간단하게 차트뮤지엄을 실행할 수 있습니다.
    chartmuseum --debug --port=8080 \
      --storage="local" \
      --storage-local-rootdir="./chartstorage"

    차트뮤지엄을 실행한 후에 localhost:8080으로 접속해보면 다음같은 화면을 볼 수 있습니다.



    차트뮤지엄에서 제공하는 api를 통해서 다음처럼 현재 저장된 차트들을 확인할 수 있습니다.
    {}

    현재는 등록한 차트가 없기 때문에 빈 값인 {} 만 보입니다. 이제 차트를 등록해 보겠습니다.

    이제 앞에서 수정했던 redis 차트를 다시 패키지 합니다. 버전명을 고쳤기 때문에 redis-0.1.0.tgz라는 파일명으로 패키지가 만들어진걸 확인할 수 있습니다.
    helm package redis
    Successfully packaged chart and saved it to: /Users/wonchon/test/redis-0.1.0.tgz

    차트뮤지엄의 /api/charts api를 이용하도록 다음처럼 요청하면 차트가 차트뮤지엄에 등록됩니다.
    $ curl --data-binary "@redis-0.1.0.tgz" http://localhost:8080/api/charts
    {"saved":true}

    이제 다시 차트목록을 확인하면 등록한 차트가 나오는걸 확인할 수 있습니다.
    {"redis":[{"name":"redis","home":"http://redis.io/","sources":["https://github.com/bitnami/bitnami-docker-redis"],"version”:”0.1.0","description":"Open source, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.","keywords":["redis","keyvalue","database"],"maintainers":[{"name":"Bitnami","email":"containers@bitnami.com"},{"name":"desaintmartin","email":"cedric@desaintmartin.fr"}],"engine":"gotpl","icon":"https://bitnami.com/assets/stacks/redis/img/redis-stack-220x234.png","appVersion":"4.0.11","urls":["charts/redis-0.1.0.tgz"],"created":"2018-12-19T21:56:48.743240162+09:00","digest":"63ba4d1973df5b77cc7429506710a9031bae5d6fd005f3631f1e81a265c65ee7"}]}

    차트뮤지엄으로 실행한 차트 저장소를 이용해서 redis차트를 설치하려면 다음처럼 하면 됩니다. helm repo add 명령으로 우리가 실행한 차트뮤지엄을 새로운 helm 저장소로 추가해 줍니다. 그런 다음 helm search를 통해서 저장소가 제대로 등록됐는지 확인할 수 있습니다. 여기서는 chartmuseum/redis 라는 이름으로 차트가 보이는걸 확인할 수 있습니다. 이 차트를 설치하려면 helm install chartmuseum/redis 명령을 통해서 설치할 수 있습니다.









    댓글

Designed by Tistory.