Helm 소개

Helm 소개

Helm이 무엇인지, 왜 사용하는지, 누구를 위한 것인지, 어떻게 동작하는지에 대한 개념적인 개요입니다.

출처: 문서

본문

Helm은 Kubernetes용 패키지 매니저입니다. 단일 컨테이너부터 서로 의존하는 많은 부분으로 이루어진 애플리케이션까지, Kubernetes 클러스터에서 애플리케이션을 정의하고, 설치하고, 업그레이드하는 데 도움을 줍니다.

애플리케이션을 Kubernetes에 배포하려면 Deployment, Service, ConfigMap 등 많은 매니페스트를 작성하고 유지해야 합니다. 이러한 파일들을 환경과 버전에 따라 수작업으로 관리하는 것은 반복적이고 오류가 발생하기 쉽습니다. Helm은 이러한 관련 매니페스트들을 chart 라는 하나의 단위로 패키징하며, 이를 하나의 릴리스로 버전 관리하고, 공유하고, 설치하고, 롤백할 수 있습니다. 이를 통해 애플리케이션을 시스템 패키지 매니저(Homebrew, apt, yum)가 운영 체제의 소프트웨어를 다루는 것처럼 취급할 수 있습니다.

Helm으로 무엇을 할 수 있나요?

Helm을 사용하면 다음과 같은 일을 할 수 있습니다.

  • 애플리케이션 설치 및 관리. 데이터베이스, 모니터링 스택, 인그레스 컨트롤러 같은 기성 애플리케이션을 매니페스트를 직접 조립하는 대신 차트로부터 배포합니다.
  • 자신의 애플리케이션 패키징 및 공유. Kubernetes 리소스를 차트로 묶고, 버전을 매기고, 팀이나 더 넓은 커뮤니티에 배포합니다.
  • 환경별로 애플리케이션 구성. 동일한 차트에 다른 값을 제공하여 매니페스트를 중복하지 않고 개발, 스테이징, 프로덕션에 배포합니다.
  • 안전하게 업그레이드하고 롤백. 릴리스를 새 버전으로 옮기고, 업그레이드가 계획대로 되지 않으면 이전 리비전으로 돌아갑니다.
  • 의존성 관리. 애플리케이션이 필요로 하는 다른 차트를 선언하고 Helm이 함께 설치하게 합니다.

Helm은 누구를 위한 것인가요?

Helm 사용자는 종종 여러 역할 중 하나를 수행합니다. 한 사람이 둘 이상의 역할을 할 수도 있고, 역할이 사람들에게 어떻게 매핑되는지는 조직마다 다릅니다. 자세한 내용은 Helm 커뮤니티 문서의 User Profiles를 참조하세요.

  • 애플리케이션 운영자. 애플리케이션을 가져와 Kubernetes 클러스터 안에서 실행합니다(예: WordPress와 MySQL 데이터베이스 운영). 이 역할은 클러스터 자체를 운영하는 클러스터 운영자와는 다릅니다.
  • 애플리케이션 배포자. 다른 누군가가 운영할 수 있도록 애플리케이션을 패키징합니다(커뮤니티 차트의 유지보수자가 그렇듯이).
  • 애플리케이션 개발자. 애플리케이션용 소프트웨어를 작성하며, 일반적으로 그것이 어디에서 실행되는지는 신경 쓰지 않습니다.
  • 지원 도구 개발자. Helm과 함께 동작하는 도구(린터나 Helm 플러그인 등)를 만듭니다.

Helm은 클러스터 자체보다는 클러스터 안에서 실행되는 애플리케이션에 초점을 맞춥니다. Kubernetes 클러스터를 구축하고 운영하는 일(컨트롤 플레인과 노드 포함)은 클러스터 운영자의 업무이며 Helm의 범위 밖입니다.

핵심 구성 요소

Helm이 어떻게 동작하는지를 설명하는 세 가지 구성 요소가 있습니다: 차트(charts), 리포지토리(repositories), 릴리스(releases). Helm은 차트를 Kubernetes에 설치해 각 설치마다 새 릴리스를 만들고, Helm 차트 리포지토리를 검색해 새 차트를 찾습니다.

차트 (Chart)

chart 는 Helm 패키지입니다. Kubernetes 클러스터 안에서 애플리케이션, 도구, 서비스를 실행하는 데 필요한 모든 리소스 정의를 포함합니다. Homebrew formula, apt dpkg, yum RPM 파일의 Kubernetes 버전이라고 생각하면 됩니다. 빌드 방법을 배우려면 Charts 가이드를 참조하세요.

리포지토리 (Repository)

repository 는 차트가 수집되고 공유되는 장소입니다. Perl의 CPAN 아카이브Fedora Package Database처럼 동작하지만 Kubernetes 패키지용입니다. 공개 차트는 여러 리포지토리의 차트를 나열하는 Artifact Hub에서 찾을 수 있습니다. 차트 호스팅에 대한 자세한 내용은 Chart Repository 가이드를 참조하세요.

릴리스 (Release)

release 는 Kubernetes 클러스터에서 실행 중인 차트의 인스턴스입니다. 동일한 차트를 같은 클러스터에 여러 번 설치할 수 있으며, 각 설치가 고유한 릴리스 이름을 가진 새 릴리스를 만듭니다. 예를 들어 클러스터에서 두 개의 데이터베이스를 실행하려면 MySQL 차트를 두 번 설치할 수 있고, 각 설치는 별도의 릴리스로 추적됩니다.

릴리스를 만들기 위해 Helm은 패키징된 차트를 구성 정보와 병합합니다. 구성은 일반적으로 values.yaml 파일에서 오는 값들의 집합입니다.

아키텍처

Helm은 로컬 머신에서 실행되며 Kubernetes API 서버와 통신하는 명령줄 도구입니다.

Helm은 두 개의 뚜렷한 부분으로 구성됩니다.

  • Helm 클라이언트는 최종 사용자용 명령줄 도구입니다. 로컬 차트 개발, 리포지토리 관리, 릴리스 관리를 처리하고, 차트를 Helm 라이브러리에 보내 설치, 업그레이드, 제거를 수행합니다.
  • Helm 라이브러리는 Helm 작업을 수행하는 로직을 제공합니다. 릴리스를 만들고, Kubernetes API 서버와 상호작용하여 차트를 설치, 업그레이드, 제거합니다. 라이브러리는 독립적이라 다른 클라이언트도 같은 로직을 재사용할 수 있습니다.

Helm 클라이언트와 라이브러리는 Go 프로그래밍 언어로 작성되었으며, 라이브러리는 Kubernetes 클라이언트 라이브러리를 사용해 REST와 JSON으로 Kubernetes와 통신합니다. Helm은 클러스터 안의 Kubernetes Secrets에 릴리스 정보를 저장하므로 자체 데이터베이스가 필요 없습니다. 구성 파일은 가능한 한 YAML로 작성됩니다.

다음 단계

더 알아보기 (Learn more)