헬름(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 |