업무를 하다보면 kubernetes, EKS를 사용할 일이 있다. 그리고 이때 빠짐없이 등장하는것이 Helm이다.
그렇다면 Helm 이란 무엇이고? Helm은 어떻게 사용하는것인지에 대해서 알아보자!!
Helm이란?
Helm Docs에는 "Helm is the package manager for Kubernetes"로 소개되어 있다. 즉 쿠버네티스의 패키지 매니지먼트이다.
쉽게 이해하자면 Python의 pip, 그리고 Linux에서 쉽게 패키지를 다운로드 할 수 있게 도와주는 yum, apt와 비슷하다고 보면 된다.
Helm도 기타 다른 패키지와 마찬가지로 계속해서 업데이트 되고 있고 현재는 Helm v2가 보안상의 이유로 현재는 더이상 개발되지 않고 helm v3를 사용하고 있다. 아래 설치 방법으로 설치하면 helm v3이 설치된다.
- v2와 v3의 차이 큰 차이점은 Tiller pod의 존재 유/무이다. 자세한 변경 사항은 Helm docs에서 확인할 수 있다.
그렇다면 Helm을 사용하는 이유는 무엇일까?
Helm을 사용하는 가장 큰 이유는 손 쉽게 다양한 환경에 배포 할 수 있기 때문이다.
일반적으로 회사에서는 Dev/QA/Prod 등 서비스를 출시하기 이전까지 다양한 버전이 있다. 만약 Helm이 없다면 각 환경마다 인프라를 관리하기 위한 코드를 개별적으로 관리해야하고, CI/CD Pipline을 구축할 때도 실수가 생길 수 있고 관리 효율적이지도 않다.
하지만, Helm을 쓰면 기본 템플릿을 구성하고 Value 값만 수정한다면 다양한 환경에 인프라를 쉽게 배포할 수 있다!!
Helm 설치
기본적으로 MAC 단말기 기준으로 얘기하면 brew를 통해 간단하게 설치할 수 있다.
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
그리고 정상적으로 설치가 되었다면 아래와 같이 버전 확인이 가능하다.
Helm 구성
Helm을 설치했다면, 본격적으로 사용하기에 앞서 아래3가지 개념을 먼저 이해하는것이 중요하다.
Helm Chart
Chart는 k8s에서 구동하기 위한 Application을 구성하기 위한 모든 패키지 정보가 들어있고 기본적으로 YAML 파일의 형태를 따른다.
이러한 Helm Chart는 public 또는 private repo에 저장하고 이를 helm create를 통해 쉽게 Helm Chart를 만들 수 있다.
Helm Chart를 만들게 되면, 기본적으로 위 형태의 디렉터리가 만들어지며 각 파일의 속성은 아래와 같다.
- Chart.yaml : Helm Chart의 메타데이터이다. Helm name, API 버전 등의 간략한 소개 파일이다.
- values.yaml : Chart에서 사용할 실제 데이터를 저장하는 파일이다.
- Helm Chart는 기본적으로 templates를 공통 폼으로 만들고 values.yaml에 있는 값을 이용하여 생성한다.
- 그렇기에 각 환경마다 templates를 수정하지 않고 values.yaml만 수정하여 다양한 환경을 만들 수 있다.
- templates : k8s의 리소스 템플릿을 저장하고 있는 공간이다.
- Ingress, deployment yaml 등의 yaml 파일을 내포하고 있다.
- 각 서비스마다 상이할 수 있으며, templates 하위에 공통 폼의 yaml 파일을 만들어 사용한다.
Helm repo
Helm chart를 생성하면 public, private 공간에 이를 저장할 수 있다. 즉 Helm chart를 저장하는 공간이다.
기본적으로 bitnami repo가 일반화 되어 있으며 아래와 같이 다양한 환경의 Helm chart를 제공해준다.
그리고 직접 Helm chart를 구성하지 않더라도 repo에서 아래와 같이 Helm chart를 다운로드 받을 수 있다.
Helm release
각 Helm의 이름이라고 이해하면 된다. 지금 배포하고 있는 Helm의 이름이 있어야 이력관리도 되고, 복구/삭제가 가능하기 때문이다.
Helm에 대한 간단한 소개와 구성 그리고 필수적인 chart, repo, release의 개념에 대해서 알아보았다.
다음 게시물부터는 Chart를 생성/삭제 방법 그리고 배포와 복구방법에 대해서 알아보려고 한다!!
Container가 점점 대중화되고 이를 관리하는 패키지가 k8s로 일원화되면서 Helm에 대한 니즈가 많아지는것 같다.
오픈소스로 제공해주는 시스템을 봐도 Helm으로 제공해주는 시스템이 많은것 같고, values.yaml만 수정하면 어느정도 사용 가능하기에 helm chart에 대한 편의성도 높은편이다.
아직 세상은 배우고 배우고싶은것이 많은 세상이다!! 더 발전하는 내가 되기위해 노력하자!!
'기술 이모저모 > [K8s] Kubernetes' 카테고리의 다른 글
[k8s] EKS AWS VPC CNI 정리 (0) | 2023.01.29 |
---|---|
[k8s] Devops kubenetes command tip (0) | 2023.01.18 |
[k8s] Kubernetes Init Containers 개념 (0) | 2022.10.25 |
[k8s] Kubernetes DaemonSet vs StaticPod 개념[2/2] (0) | 2022.10.22 |
[k8s] Kubernetes DaemonSet vs StaticPod 개념[1/2] (0) | 2022.10.22 |