웹사이트 검색

Kubernetes용 패키지 관리자 Helm 소개


소개

강력하고 널리 사용되는 컨테이너 오케스트레이션 시스템인 Kubernetes에 애플리케이션을 배포하는 것은 복잡할 수 있습니다. 단일 애플리케이션을 설정하려면 포드, 서비스, 배포 및 복제본 세트와 같은 여러 개의 상호 의존적인 Kubernetes 리소스를 생성해야 할 수 있습니다. 각각은 상세한 YAML 매니페스트 파일을 작성해야 합니다.

Helm은 개발자와 운영자가 애플리케이션 및 서비스를 Kubernetes 클러스터에 보다 쉽게 패키징, 구성 및 배포할 수 있도록 하는 Kubernetes용 패키지 관리자입니다.

Helm은 이제 공식 Kubernetes 프로젝트이며 Kubernetes 생태계 안팎에서 오픈 소스 프로젝트를 지원하는 비영리 단체인 Cloud Native Computing Foundation의 일부입니다.

이 기사에서는 Helm에 대한 개요와 Kubernetes에 애플리케이션 배포를 단순화하는 데 사용하는 다양한 추상화를 제공합니다. Kubernetes를 처음 사용하는 경우 Kubernetes 소개를 먼저 읽고 기본 개념에 익숙해지는 것이 도움이 될 수 있습니다.

Helm 개요

대부분의 모든 프로그래밍 언어 및 운영 체제에는 소프트웨어 설치 및 유지 관리를 지원하는 자체 패키지 관리자가 있습니다. Helm은 Debian의 apt 또는 Python의 pip와 같이 이미 친숙한 많은 패키지 관리자와 동일한 기본 기능 세트를 제공합니다.

헬름은 다음을 수행할 수 있습니다.

  • 소프트웨어를 설치합니다.
  • 소프트웨어 종속성을 자동으로 설치합니다.
  • 소프트웨어를 업그레이드합니다.
  • 소프트웨어 배포를 구성합니다.
  • 저장소에서 소프트웨어 패키지를 가져옵니다.

Helm은 다음 구성 요소를 통해 이 기능을 제공합니다.

  • 모든 Helm 기능에 대한 사용자 인터페이스를 제공하는 명령줄 도구 helm.
  • Kubernetes 클러스터에서 실행되는 컴패니언 서버 구성 요소인 tillerhelm의 명령을 수신하고 클러스터에서 소프트웨어 릴리스의 구성 및 배포를 처리합니다.
  • 차트라고 하는 Helm 패키징 형식입니다.
  • 인기 있는 오픈 소스 소프트웨어 프로젝트를 위해 사전 패키지된 차트가 포함된 공식 선별 차트 저장소입니다.

다음에 차트 형식에 대해 자세히 살펴보겠습니다.

차트

Helm 패키지는 차트라고 하며 몇 가지 YAML 구성 파일과 Kubernetes 매니페스트 파일로 렌더링되는 일부 템플릿으로 구성됩니다. 다음은 차트의 기본 디렉토리 구조입니다.

package-name/
  charts/
  templates/
  Chart.yaml
  LICENSE
  README.md
  requirements.yaml
  values.yaml

이러한 디렉토리 및 파일에는 다음과 같은 기능이 있습니다.

  • charts/: 수동으로 관리되는 차트 종속성을 이 디렉토리에 배치할 수 있지만 일반적으로 requirements.yaml을 사용하여 종속성을 동적으로 연결하는 것이 좋습니다.
  • templates/: 이 디렉터리에는 구성 값(values.yaml 및 명령줄에서)과 결합되고 Kubernetes 매니페스트로 렌더링되는 템플릿 파일이 포함되어 있습니다. 템플릿은 Go 프로그래밍 언어의 템플릿 형식을 사용합니다.
  • Chart.yaml: 차트 이름 및 버전, 관리자 정보, 관련 웹사이트 및 검색 키워드와 같은 차트에 대한 메타데이터가 포함된 YAML 파일입니다.
  • 라이선스: 차트에 대한 일반 텍스트 라이선스입니다.
  • README.md: 차트 사용자를 위한 정보가 포함된 readme 파일입니다.
  • requirements.yaml: 차트의 종속성을 나열하는 YAML 파일입니다.
  • values.yaml: 차트에 대한 기본 구성 값의 YAML 파일입니다.

helm 명령은 로컬 디렉토리 또는 이 디렉토리 구조의 .tar.gz 패키지 버전에서 차트를 설치할 수 있습니다. 이러한 패키지 차트는 차트 리포지토리 또는 리포지토리에서 자동으로 다운로드하여 설치할 수도 있습니다.

다음으로 차트 저장소를 살펴보겠습니다.

차트 저장소

Helm 차트 저장소는 index.yaml 파일 및 .tar.gz 패키지 차트를 제공하는 간단한 HTTP 사이트입니다. helm 명령에는 차트 패키징을 돕고 필요한 index.yaml 파일을 만드는 데 사용할 수 있는 하위 명령이 있습니다. 이러한 파일은 모든 웹 서버, 개체 스토리지 서비스 또는 GitHub 페이지와 같은 정적 사이트 호스트에서 제공할 수 있습니다.

Helm은 안정이라고 하는 기본 차트 리포지토리로 사전 구성되어 제공됩니다. 이 저장소는 https://kubernetes-charts.storage.googleapis.com의 Google Storage 버킷을 가리킵니다. 안정적인 리포지토리의 소스는 GitHub의 helm/charts Git 리포지토리에서 찾을 수 있습니다.

대체 저장소는 helm repo add 명령으로 추가할 수 있습니다. 일부 인기 있는 대체 리포지토리는 다음과 같습니다.

  • 공식 Helm 차트 GitHub 페이지
  • 공식 안정적인 리포지토리에서 다루지 않는 일부 차트를 제공하는 Bitnami Helm 차트

로컬에서 개발한 차트를 설치하든 리포지토리에서 차트를 설치하든 특정 설정에 맞게 구성해야 합니다. 다음으로 구성을 살펴보겠습니다.

차트 구성

차트는 일반적으로 values.yaml 파일에 기본 구성 값과 함께 제공됩니다. 일부 애플리케이션은 기본값으로 완전히 배포할 수 있지만 일반적으로 필요에 따라 일부 구성을 재정의해야 합니다.

구성을 위해 노출되는 값은 차트 작성자가 결정합니다. 일부는 Kubernetes 프리미티브를 구성하는 데 사용되고 일부는 애플리케이션 자체를 구성하기 위해 기본 컨테이너로 전달될 수 있습니다.

다음은 몇 가지 예시 값의 스니펫입니다.

service:
  type: ClusterIP
  port: 3306

Kubernetes 서비스 리소스를 구성하는 옵션입니다. helm inspect values chart-name을 사용하여 차트에 사용 가능한 모든 구성 값을 덤프할 수 있습니다.

이러한 값은 자체 YAML 파일을 작성하고 helm install을 실행할 때 사용하거나 --set 플래그로 명령줄에서 개별적으로 옵션을 설정하여 재정의할 수 있습니다. 기본값에서 변경하려는 값만 지정하면 됩니다.

특정 구성으로 배포된 Helm 차트를 릴리스라고 합니다. 다음 릴리스에 대해 이야기하겠습니다.

릴리스

차트를 설치하는 동안 Helm은 차트의 템플릿을 사용자가 지정한 구성 및 value.yaml의 기본값과 결합합니다. 이는 Kubernetes API를 통해 배포되는 Kubernetes 매니페스트로 렌더링됩니다. 이렇게 하면 특정 차트의 특정 구성 및 배포인 릴리스가 생성됩니다.

동일한 애플리케이션을 클러스터에 두 번 이상 배포할 수 있기 때문에 이 릴리스 개념이 중요합니다. 예를 들어 구성이 다른 여러 MySQL 서버가 필요할 수 있습니다.

또한 차트의 다른 인스턴스를 개별적으로 업그레이드하고 싶을 수도 있습니다. 업데이트된 MySQL 서버에 대해 하나의 애플리케이션이 준비되었지만 다른 애플리케이션은 준비되지 않았을 수 있습니다. Helm을 사용하면 각 릴리스를 개별적으로 업그레이드합니다.

차트가 업데이트되었거나 릴리스의 구성을 업데이트하려고 하기 때문에 릴리스를 업그레이드할 수 있습니다. 어느 쪽이든 업그레이드할 때마다 릴리스의 새 개정판이 생성되며 Helm을 사용하면 문제가 있는 경우 이전 개정판으로 쉽게 롤백할 수 있습니다.

차트 만들기

배포 중인 소프트웨어에 대한 기존 차트를 찾을 수 없는 경우 직접 만들 수 있습니다. Helm은 helm create chart-name을 사용하여 차트 디렉토리의 스캐폴드를 출력할 수 있습니다. 그러면 위의 차트 섹션에서 논의한 파일과 디렉토리가 있는 폴더가 생성됩니다.

여기에서 Chart.yaml에 차트의 메타데이터를 채우고 Kubernetes 매니페스트 파일을 templates 디렉터리에 넣을 수 있습니다. 그런 다음 관련 구성 변수를 매니페스트에서 values.yaml로 추출한 다음 템플릿 시스템을 사용하여 매니페스트 템플릿에 다시 포함해야 합니다.

helm 명령에는 차트를 테스트, 패키징 및 제공하는 데 도움이 되는 많은 하위 명령이 있습니다. 자세한 내용은 차트 개발에 대한 공식 Helm 문서를 참조하세요.

결론

이 기사에서는 Kubernetes의 패키지 관리자인 Helm을 검토했습니다. Helm 아키텍처와 개별 helmtiller 구성 요소를 살펴보고 Helm 차트 형식을 자세히 살펴보고 차트 리포지토리를 살펴보았습니다. 또한 Helm 차트를 구성하는 방법과 구성 및 차트가 Kubernetes 클러스터에서 릴리스로 결합되고 배포되는 방법을 살펴보았습니다. 마지막으로 적절한 차트를 아직 사용할 수 없을 때 차트를 만드는 기본 사항에 대해 알아봤습니다.

Helm에 대한 자세한 내용은 GitHub의 공식 helm/charts Git 리포지토리를 살펴보십시오.