본문 바로가기

DevOps/쿠버네티스(Kubernetes)

헬름(Helm)

헬름(Helm)

1. 헬름이란?

  • 쿠버네티스의 패키지 매니저인 헬름(Helm)은 쿠버네티스 애플리케이션을 정의, 설치 및 업그레이드할 수 있게 해주는 도구이다.

1.1 패키지 매니저란?

일반적인 OS에서 패키지 매니저(Apt, Yum, Npm등)의 역할

  • 소프트웨어 설치: 사용자는 간단한 명령어로 필요한 소프트웨어를 설치할 수 있다. 예를 들면, Ubuntu에서 apt install 을 통해 소프트웨어를 설치한다.
  • 의존성 관리: 많은 애플리케이션들은 제대로 작동하기 위해 다른 라이브러리나 소프트웨어에 의존한다. 패키지 매니저는 이러한 의존성을 자동으로 처리하며, 필요한 모든 패키지를 함께 설치한다.
  • 업데이트 및 보안 패치: 패키지 매니저를 통해 설치된 소프트웨어의 최신 버전 및 보안 업데이트를 쉽게 받아올 수 있다.
  • 소프트웨어 제거 및 정리: 패키지 매니저는 소프트웨어를 체계적으로 제거하며, 관련 의존성 또한 정리해준다.

쿠버네티스에서 패키지 매니저의 역할

  • 쿠버네티스 차트 관리: 헬름은 쿠버네티스 애플리케이션을 패키지화하기 위해 '차트'라는 포맷을 사용한다. 이 차트는 애플리케이션의 모든 부분을 포함하고 있다.
  • 복잡한 애플리케이션의 설치 간소화: 복잡한 애플리케이션은 여러 종류의 쿠버네티스 리소스로 구성될 수 있다. 헬름을 사용하면, 단 한 번의 명령으로 모든 리소스를 함께 배포할 수 있다.
  • 버전 관리: 헬름은 쿠버네티스 애플리케이션의 다양한 버전을 관리할 수 있다. 이를 통해 사용자는 이전 버전으로 롤백하거나, 특정 버전을 설치할 수 있다.
  • 의존성 관리: 특정 쿠버네티스 애플리케이션은 다른 애플리케이션 또는 서비스에 의존할 수 있다. 헬름은 이러한 의존성을 자동으로 관리하며, 필요한 모든 차트와 패키지를 함께 설치한다.
  • 템플릿화 및 설정: 헬름 차트는 템플릿화 될 수 있으므로, 동일한 차트를 다양한 환경 및 설정으로 배포하는 것이 가능하다.

1.2 헬름의 필요성

그렇다면 헬름은 왜 필요할까? 쿠버네티스는 확장성 높은 컨테이너 오케스트레이션 도구로 알려져 있지만, 그 복잡성 또한 잘 알려져 있다.

  • 여러 YAML 파일 관리: 쿠버네티스 애플리케이션을 배포하기 위해서는 디플로이먼트, 서비스, 컨피그맵, 시크릿, 퍼시스턴트 볼륨 등 여러 종류의 리소스가 필요하다. 각 리소스는 별도의 YAML 파일로 정의되어야 한다.
  • 설정의 복잡성: 각 YAML 파일은 여러 설정들을 포함할 수 있다. 리소스의 종류, 라벨, 선택자, 볼륨 설정 등 수많은 세부 설정들이 필요하다.
  • 의존성 관리: 하나의 애플리케이션은 다른 서비스나 라이브러리에 의존할 수 있다. 이런 의존성들을 수동으로 관리하는 것은 복잡하고 오류가 발생하기 쉽다.

다음은 이러한 쿠버네티스의 복잡성을 고려할 때, 헬름의 필요성이다.

  • 복잡성 줄이기: 헬름은 여러 YAML 파일들을 하나의 차트로 패키지화한다. 이로써, 여러 개의 복잡한 파일을 다루는 대신 하나의 차트만을 관리하게 된다.
  • 표준화된 배포: 헬름 차트는 애플리케이션의 '레시피'처럼 동작합니다. 이 레시피를 사용하면, 동일한 애플리케이션을 여러 환경에 일관되게 배포할 수 있다.
  • 재사용성: 일반적인 설정이나 구성요소들을 재사용 가능한 헬름 차트로 만들 수 있다. 이를 통해 비슷한 애플리케이션 배포시, 기존의 차트를 재사용하며 필요한 부분만 수정하여 효율적인 배포를 할 수 있다.
  • 배포의 일관성: 헬름을 사용하면, 여러 개발자나 팀 간에도 동일한 차트를 사용하여 배포를 수행할 수 있다. 이로써, 배포의 일관성을 확보하고, 배포에서 발생할 수 있는 오류를 최소화할 수 있다.

1.3 헬름의 주요 특징

1. 차트(Charts)
  • 정의: 헬름의 핵심 개념 중 하나는 '차트'이다. 차트는 쿠버네티스 애플리케이션과 그에 관련된 모든 리소스를 패키지 형태로 묶은 것이다.
  • 특징
    • 패키지화: 차트는 애플리케이션의 모든 컴포넌트(서비스, 디플로이먼트, 설정 등)를 하나의 패키지로 관리한다. 이로 인해 애플리케이션 배포 및 관리가 훨씬 쉬워진다.
    • 종속성 관리: 차트 내에는 values.yaml과 같은 설정 파일도 포함되어 있어, 애플리케이션의 설정을 변경하기 쉽다. 또한, Chart.yaml 파일을 통해 다른 차트에 대한 의존성을 정의하고 관리할 수 있다.
2. 릴리즈(Releases)
  • 정의: 릴리즈는 클러스터 내에서 차트의 특정 버전이 배포된 인스턴스를 나타낸다.
  • 특징
    • 버전 관리: 각각의 릴리즈는 버전 정보를 가지고 있다. 이를 통해, 사용자는 특정 버전의 애플리케이션을 롤백하거나 업그레이드하는 것이 가능하다.
    • 생명주기 관리: 헬름은 릴리즈의 생명주기를 관리할 수 있도록 도와준다. 예를 들어, 릴리즈의 설치, 업그레이드, 삭제, 조회 등의 작업을 헬름을 통해 수행할 수 있다.
3. 저장소(Repository)
  • 정의: 저장소는 차트의 컬렉션을 호스팅하는 위치이다. 이는 npm의 레지스트리나 Docker의 Docker Hub와 유사하다.
  • 특징
    • 공개 및 사설 저장소: 헬름 저장소는 공개적으로 호스팅될 수도 있고, 사설 네트워크 내에서만 접근 가능한 형태로 구성될 수도 있다.
    • 차트의 중앙 저장소: 저장소를 통해 팀이나 커뮤니티가 자주 사용하는 차트들을 중앙화하여 관리할 수 있다. 이로써, 차트의 최신 버전에 쉽게 접근하거나 공유된 차트를 활용할 수 있다.
    • 차트의 버전 관리: 저장소는 여러 버전의 차트를 저장하므로, 사용자는 필요에 따라 원하는 버전의 차트를 선택하여 설치할 수 있다.

헬름의 이러한 특징들은 쿠버네티스 환경에서 애플리케이션의 배포 및 관리를 간소화하고 효율화하는 데 큰 도움을 제공한다.

헬름 차트의 주요 파일과 디렉터리

헬름 차트는 여러 파일과 디렉터리로 구성되어 있으며, 각각의 구성요소는 특정 역할을 가진다.아래는 차트의 기본 구조와 그 안에 포함된 주요 파일 및 디렉터리이다.

1. Chart.yaml

  • 정의: 이 파일은 차트의 기본 정보를 담고 있다.
  • 주요 내용
    • name: 차트의 이름
    • version: 차트의 버전
    • description: 차트에 대한 간단한 설명
    • dependencies: 차트가 의존하는 다른 차트들의 리스트. 이 의존성은 charts/ 디렉터리에 저장될 수 있거나, 원격 저장소에서 가져올 수 있다.

2. values.yaml

  • 정의: 사용자가 차트에 제공할 수 있는 매개변수와 그 기본값들을 정의하는 파일이다.
  • 사용: 이 파일에 정의된 값들은 차트 내의 다른 파일들에서 참조될 수 있다. 사용자는 이 파일의 값들을 오버라이드하여 자신의 필요에 맞게 차트를 커스터마이즈할 수 있다.

3. charts/ 디렉터리

  • 정의: 차트의 의존성으로 추가된 다른 차트들이 이 디렉터리 안에 위치한다.
  • 용도: 만약 특정 차트가 다른 차트에 의존하는 경우, 해당 의존 차트들이 이 디렉터리에 패키지 형태로 저장된다.

4. templates/ 디렉터리

  • 정의: 쿠버네티스 리소스 정의(YAML 파일)를 담고 있는 디렉터리이다. 이 디렉터리 내의 파일들은 실제 쿠버네티스 리소스를 생성하기 위한 템플릿 역할을 한다.
  • 특징: 이 파일들은 Go 템플릿 언어로 작성되어 있다. values.yaml에서 제공된 값들을 동적으로 참조하거나, 조건문과 반복문 등의 로직을 포함할 수 있다.

5. _helpers.tpl (선택)

  • 정의: 공통적으로 사용될 템플릿 함수나 변수를 정의하는 파일이다.
  • 주요 내용
    • 차트 내에서 여러 번 재사용될 템플릿 코드의 중복을 줄이기 위한 공통 함수 정의.
      • 예를 들어, 리소스 이름 생성, 레이블 정의 등의 헬퍼 함수들을 포함
  • 사용: 이 파일에 정의된 함수들은 templates/ 디렉터리 내의 다른 템플릿 파일들에서 사용될 수 있다.

6. .helmignore (선택)

  • 정의: 차트 패키지를 생성할 때 무시되어야 할 파일 또는 디렉터리를 명시하는 파일이다. .gitignore와 유사한 역할을 한다.
  • 용도: 테스트 파일, README, 또는 다른 불필요한 파일들을 실제 차트 패키지에 포함시키지 않기 위해 사용된다.

7. NOTES.txt (선택)

  • 정의: 차트가 성공적으로 설치된 후에 출력될 메시지나 안내사항을 포함하는 파일이다.
  • 용도: 사용자에게 차트 사용법, 다음 단계, 또는 중요한 정보 등을 제공하는데 사용된다.

헬름 차트는 이러한 파일과 디렉터리들을 통해 쿠버네티스 리소스를 정의하고 커스터마이징하는 기능을 제공한다. 각 파일과 디렉터리는 차트의 동작 및 커스터마이제이션 방식을 결정하는 중요한 역할을 수행한다.

8. 구조

<차트 이름>/
│
├── Chart.yaml         - 차트의 메타데이터를 담고 있는 파일
│
├── values.yaml        - 차트의 기본 설정 값들을 정의하는 파일
│
├── .helmignore        - 차트 패키징 시 무시할 파일/디렉토리 목록
│
├── templates/         - 쿠버네티스 리소스 템플릿 파일들이 저장된 디렉토리
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── _helpers.tpl    - 공통 헬프러 함수와 변수를 정의하는 파일
│   └── ...
│
├── charts/            - 의존하고 있는 하위 차트들이 저장된 디렉토리
│   ├── <subchart1>/
│   └── <subchart2>/
│
└── NOTES.txt          - 차트 설치 후 출력될 메시지나 안내사항

 

 

 

 

 

 

 

 

'DevOps > 쿠버네티스(Kubernetes)' 카테고리의 다른 글

Pod  (0) 2023.01.29
쿠버네티스란?  (0) 2023.01.28
[CKA] Volumes  (0) 2023.01.28
[CKA] Container Storage Interface (CSI)  (1) 2023.01.27
[CKA] Volume Driver Plugins in Docker  (0) 2023.01.27