[Kubernetes] Helm 사용하기

Hailey·2020년 10월 8일
4

Kubernetes

목록 보기
3/6

Helm 이란?

각 Phase마다 배포시 달라지는 정보들이 많다. 예를 들면 개발환경의 데이터베이스 주소와 프로덕환경의 데이터베이스 주소가 다른것처럼 말이다. 그렇다면 모든 환경마다 매니페스트를 작성해야할까? 만약 Phase가 많다면 관리가 쉽지 않을 것이다. 이렇게 배포 환경에 따라 달라지는 설정값만 정의해 둔 다음 이에 따라 배포하는 메커니즘이 필요하게 되었는데, 이런 문제를 해결한 것이 헬름(Helm)이다.

헬름은 쿠버네티스 차트를 관리하기 위한 도구이다. 차트는 사전 구성된 쿠버네티스 리소스의 패키지다.

헬름은 패키지 관리 도구고, 차트가 리소스를 하나로 묶은 패키지에 해당한다. 헬름으로 차트를 관리하는 목적은 자칫 번잡해지기 쉬운 매니페스트 파일을 관리하기 쉽게 하기 위한 것이다.

헬름은 클라이언트(cli)와 서버(쿠버네티스 클러스터에 설치되는 틸러)로 구성된다. 클라이언트는 서버를 대상으로 명령을 지시하는 역할을 한다. 서버는 클라이언트에서 전달받은 명령에 따라 쿠버네티스 클러스터에 패키지 설치, 업데이트, 삭제 등의 작업을 수행한다. 쿠버네티스는 서비스나 디플로이먼트, 인그레스 같은 리소스를 생성하고 매니페스트 파일을 적용하는 방식으로 애플리케이션을 배포한다. 이 매니페스트 파일을 생성하는 템플릿을 여러 개 패키징한 것이 차트다. 차트는 헬름 리포지토리에 tgz 파일로 저장되며, 틸러가 매니페스트를 생성하는 데 사용한다.

Helm 사용하기

일단 helm을 설치하려면 쿠버네티스 cluster 가 미리 세팅되어야 한다. 쿠버네티스 cluster가 준비 되었다면 다음의 명령어로 설치 script를 다운받고 설치한다.

curl <https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get> > 
get_helm.sh chmod 700 get_helm.sh 
./get_helm.sh

설치가 완료되면 helm 을 초기화하고 tiller를 설치할건데 그전에 tiller 서비스 계정을 생성하고 cluster-admin role을 부여한다.

kubectl -n kube-system create sa tiller 
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

helm도 설치하고 service account도 만들었으므로 다음의 명령어로 Tiller를 설치해준다.

helm init --service-account tiller

최신 chart 리스트를 업데이트 하기 위해 다음 명령어를 실행한다.

helm repo update

설치 가능한 chart 목록을 보려면 helm search 명령어를 실행한다.

helm 의 큰 장점 중 하나가 chart를 install 하기전에 chart value 값을 변경함으로써 커스터마이징이 가능하다는 점이다.

2019-11-13일 v3.0.0이 release 되면서 많은 변화가 있습니다.

helm은 tiller없이 ~/.kube/config에 정의된 user권한으로 실행됩니다. 따라서 위 client만 설치하면 됩니다.

변화 내용 참조: https://helm.sh/docs/topics/v2_v3_migration/

주요 변화는 아래와 같습니다.

  • tiller 없어짐: ~/.kube/config 참조하여 수행됨
    . helm init 명령 없어짐
    . tiller가 없으므로 helm ls만 하면 현재 namespace것만 나옴. helm ls -n 해야 함

  • repository가 기본으로 아무것도 안 생김
    . google stable registry 추가 필요: helm repo add stable https://kubernetes-charts.storage.googleapis.com/

  • helm install 에서 --name파라미터 없어지고, helm install --namespace 형식을 사용해야 함. --generate-name파라미터는 랜덤으로 이름 생성하는 옵션임.

  • 명령어 변화
    delete –> uninstall : --purge옵션 불필요함. 자동으로 전체 지움
    fetch –> pull
    home (removed)
    init (removed)
    install: requires release name or --generate-name argument
    inspect –> show
    reset (removed)
    serve (removed)
    upgrade: Added argument --maxHistory which limits the maximum number of revisions saved per release (0 for no limit)

TIP

helm init에서 에러가 나는 경우 원인별로 아래와 같이 조치하세요.
1) kube-proxy와 통신이 안되는 경우 : 에러메시지에 'socat '라는 말이 나올거임
-> apt-get install socat -y 설치 후 재실행
2) 아래 에러 메시지가 나면서 설치가 안되는 경우: kubernetes v1.16부터 일부 API를 지원하지 않기 때문입니다.
Error: error installing: the server could not find the requested resource

출처: https://coding-start.tistory.com/310
https://reoim.tistory.com/entry/Kubernetes-Helm-%EC%82%AC%EC%9A%A9%EB%B2%95
https://happycloud-lee.tistory.com/3

profile
Business & Software 💗🌎

2개의 댓글

comment-user-thumbnail
2022년 9월 6일

안녕하세요. helm 차트에 대해 블로그 포스팅을 진행하려고 하는데, 해당 Helm 아키텍처 사진을 가져다가 써도 될까요?

답글 달기
comment-user-thumbnail
2024년 2월 18일

좋은 글 감사합니다!

답글 달기