[Kubernetes] Helm 알아보기

안녕하세요? 정리하는 개발자 워니즈 입니다. 이번시간에는 헬름 에 대해서 알아보는 시간을 갖어보려 합니다. 헬름은 현재 3버전으로 업그레이드 가 되어있고, 제가 소개하고자 하는 내용은 2버전입니다. 2에서 3으로 명령 변경이 다수 일어났기 때문에 먼저 2버전에 대해서 정리를 해볼까 합니다.

지난 글들은 아래를 참고 해주시면 됩니다.

쿠버네티스에서 리소스를 관리하고 배포해주는 가장 쉬운 방법중 하나로 쉽게 말해, 패키지 관리자 입니다.

공식 문서

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내에 올리는 것 같았습니다.

다음시간에는 헬름의 명령어에 대해서 알아보는 시간을 갖도록 하겠습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다