[Kubernetes] Helm 알아보기
안녕하세요? 정리하는 개발자 워니즈 입니다. 이번시간에는 헬름
에 대해서 알아보는 시간을 갖어보려 합니다. 헬름은 현재 3버전으로 업그레이드 가 되어있고, 제가 소개하고자 하는 내용은 2버전입니다. 2에서 3으로 명령 변경이 다수 일어났기 때문에 먼저 2버전에 대해서 정리를 해볼까 합니다.
지난 글들은 아래를 참고 해주시면 됩니다.
- 쿠버네티스 1편 : 설치 가이드
- 쿠버네티스 2편 : pod
- 쿠버네티스 3편 : service
- 쿠버네티스 4편 : deployment
- 쿠버네티스 5편 : pod 설정
- 쿠버네티스 6편 : 배포 전략
- 쿠버네티스 7편 : volume
- 쿠버네티스 8편 : daemonset
- 쿠버네티스 9편 : 테라폼을 통한 클러스터 구성
- 쿠버네티스 10편 : eks에서 volume 사용하기
- 쿠버네티스 11편 : helm
- 쿠버네티스 12편 : helm chart template
- 쿠버네티스 13편 : helm deploy
- 쿠버네티스 14편 : fluentd를 통한 log수집
- 쿠버네티스 15편 : chartmuseum
- 쿠버네티스 16편 : 배포툴(ArgoCD 설치방법/사용법)
- 쿠버네티스 17편 : 배포툴(ArgoCD 구성/알람)
- 쿠버네티스 18편 : 쿠버네티스 Autoscailing
- 쿠버네티스 19편 : 쿠버네티스 로깅 아키텍처
쿠버네티스에서 리소스를 관리하고 배포해주는 가장 쉬운 방법중 하나로 쉽게 말해, 패키지 관리자 입니다.
공식 문서
1. 왜 Helm 인가요?
Helm은 쉽게 말헤, npm, apt, yum 과 같은 패키지매니지먼트 도구라고 생각 할 수 있습니다. 하지만 CI/CD와 애플리케이션이 구동환경에서 보면, 단순 패키지매니지먼트보다는 더 큰 역할을 할 수 있다는 것을 알 수 있습니다.
1-1. Deployment history
Helm 에서 배포된 애플리케이션은 Helm release로 관리합니다. release된 버전 기록을 자동으로 유지 관리하고, 배포 후 문제가 발생하면 이전상태로 되돌아가는것이 용이합니다. 또한 Helm 차트 자체를 SCM툴들을 이용해서 관리하고 협업 할 수 있습니다.
1-2. CI/CD Pipeline
CI/CD Pipeline을 제공해 배포작업을 구성하고 자동화하는데 용이합니다.
1-3. 멀티스테이징
또다른 특징은 배포 중에 애플리케이션 구성을 할 수 있다는 점입니다. 예를 들어 개발/Staging/운영환경에 따라 Pod의 복제본의 수 및 PV의 용량을 다른게 설정할 필요가 있는데 Helm은 동일한 헬름차트로 만들어 모든 환경에서 사용할 수 있습니다.
2. Helm 및 저장소 설치
2-1. 서비스 계정 만들기
Helm을 배포하려면 먼저 서비스 계정과 Tiller 서비스에 대한 역할 바인딩이 필요합니다. RBAC 지원 클러스터에서 Helm/Tiller를 보호하는 방법에 대한 자세한 내용은 Tiller, 네임스페이스 및 RBAC를 참조하세요.
helm-rbac.yaml
이라는 파일을 만들고 다음 YAML에 복사합니다.
# mkdir -p /lab/helm/install/
# gedit /lab/helm/install/helm-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
kubectl apply
명령을 사용하여 서비스 계정 및 역할 바인딩을 만듭니다.
kubectl apply -f /lab/helm/install/helm-rbac.yaml
2-2. Helm 구성 – Client
- Download
cd /lab/helm/install wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.0-linux-amd64.tar.gz
- Unpack
tar -zxvf helm-v2.13.0-linux-amd64.tar.gz
- bin폴더로 이동
mv linux-amd64/helm /usr/local/bin/helm
- 설치확인
# helm version Client: &version.Version{SemVer:"v2.13.0", GitCommit:"79d07943b03aea2b76c12644b4b54733bc5958d6", GitTreeState:"clean"} Error: could not find tiller
2-3. Helm 구성 – Tiller
Tiller를 클러스터에 배포하려면 helm init 명령을 사용합니다.
helm init --service-account tiller
3. 저장소 구성
차트뮤지엄 구성
curl -LO https://s3.amazonaws.com/chartmuseum/release/latest/bin/linux/amd64/chartmuseum
chmod +x ./chartmuseum
mv ./chartmuseum /usr/local/bin
chartmuseum --debug --port=8080 \
--storage="local" \
--storage-local-rootdir="./chartstorage"
helm install stable/chartmuseum
레파지토리 추가
helm repo add chartmuseum http://172.168.1.6:8080
helm repo list
차트 index update
helm repo update
4. 헬름 기본 구성도
4-1. 챠트
헬름 챠트는 단순히 특별한 디렉토리 구조로 정의된 YAML 템플릿 파일의 모음입니다. YAML 파일에는 Kubernetes Object를 구성하는 service, deployment 등이 정의되어 있습니다.
~>tree demo-chart/
demo-chart/
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── rbac.yaml
│ └── service.yaml
└── values.yaml
File structure of a Helm chart
4-2. 릴리즈
Helm 차트로 Kubernetes 클러스터에 설치된 애플리케이션
4-3. Repository
Helm chart 저장소 https://hub.kubeapps.com/, https://kubeapps.com/와 같은 공개 저장소와 조직 또는 개인이 구성할 수 있는 private 저장소가 있습니다.
# helm search wordpress
NAME CHART VERSION APP VERSION DESCRIPTION
stable/wordpress 5.7.0 5.1.1 Web publishing platform for building blogs
5. 마치며…
이번시간에는 HELM
에 대해서 알아보는 시간을 갖었습니다. 헬름을 통해서 손쉽게 웬만한 application 구동에서부터 PV, PVC 셋팅까지 동적으로 모두 해주는것을 확인했습니다. 마치 만들어진 완제품을 선택적으로 골라서 cluster내에 올리는 것 같았습니다.
다음시간에는 헬름의 명령어에 대해서 알아보는 시간을 갖도록 하겠습니다.