쿠버네스 package managing tool이다. node.js 의 npm, python의 pip 과 비슷한 형태로 쿠버네티스 패키지 배포를 가능하게 하는 tool
docker가 나오면서 container 혁신 -> container를 쉽게 관리하고 배포해주는 kubernetes 등장 -> kubernetes를 package로 관리해주는 것이 바로 helm이다.
chart라고 부르는 package format을 사용하는데 chart는 쿠버네티스 리소스를 describe 하는 파일들의 집합이다.(파일들, 그 속에 속해있는 폴더의 집합)
특정 directory 하위에 모여있는 파일들을 통틀어서 chart라고 부르는데 좀 더 쉽게 예를들면, 가령 WordPress chart는 다음과 같은 구조를 가진다.
헬름이란?
쿠버네티스의 템플릿들을 모아 관리하는 패키지 매니저 도구.
쿠버네티스를 사용하다보면 결국 수많은 템플릿을 관리해야한다. 헬름은 이런 템플릿 파일들의 집합(차트라고 함)을 관리하는 쿠버네티스 패키지 매니저 도구이다.
쿠버네티스의 하위 프로젝트로 시작되었다가 2018년 6월 CNCF의 정식 프로젝트로 승격되었다.
헬름은 차트와 차트 압축 파일(tgz)을 만들 수 있다. 그리고 차트 저장소와 연결해 쿠버네티스 클러스터에 차트를 설치하거나 삭제할 수 있다. 헬름 차트들의 배포 주기를 관리할 수도 있다.
헬름을 이용하면 잘 정리된 차트들로 필요한 애플리케이션들을 빠르게 설치할 수 있다.
Helm Charts라는 깃허브 저장소에는 incubator와 stable디렉터리 아래 수많은 차트가 준비되어 있다. MySQL, 레디스, 젠킨스, 하둡, 일래스틱서치 등 많은 애플리케이션을 쉽게 설치해서 사용할 수 있다.
* 차트 : 쿠버네티스에서 실행할 애플리케이션을 만드는데 필요한 정보 묶음
* 컨피그 : 패키지한 차트에 넣어서 배포 가능한 오브젝트를 만들 때 사용할 수 있는 설정이 있다.
* 릴리즈 : 특정 컨피그를 이용해 실행 중인 차트의 인스턴스
헬름 사용법
# 헬름 설치 (mac os)
$ brew install kubernetes-helm
# 사용할 수 있는 차트들 확인
$ helm search
# 차트를 이용해 MySQL 설치 (--name 옵션은 차트 이름을 지정)
$ helm install stable/mysql --name=my-sql
# 현재 실행중인 차트 상태 확인
$ helm ls
# 실행중인 차트 삭제
$ helm del my-mysql
# 기본 구조의 차트 생성
$ helm create sample
# 디렉터리 구조 확인
$ tree sample
헬름 2와 헬름 3
헬름 2는 커맨드라인 인터페이스인 헬름 클라이언트와 쿠버네티스 클러스터 안에서 헬름 클라이언트의 명령을 받아 쿠버네티스 API와 통신하는 틸러 서버로 구성되어 있다.
헬름 클라이언트는 로컬 서버에 차트를 만들거나, 차트 저장소들과 클러스터에 실행 중인 애플리케이션(헬름 차트로 실행) 릴리즈를 관리하는데 필요한 요청을 하는 역할이다.
틸러 서버는 헬름 클라이언트의 요청을 받아 실제로 처리하는 역할이다. 차트나 릴리즈를 만드는 것, 차트와 설정의 조합, 클러스터의 차트와 릴리즈의 설치, 관리를 담당한다. 틸러서버와는 gRPC를 이용해 통신한다.
헬름 3에서는 틸러 서버가 없어졌다. 틸러를 이용하면 틸러가 설치된 네임스페이스 이외의 다른 네임스페이스에 차트를 설치할 수가 있어서 쿠버네티스의 RBAC구조 체계와 어긋나는 부분이 있었기 때문이다.
즉, 쿠버네티스의 RBAC를 따르도록 하기 위해서 틸러 서버가 없어진 것이다.
헬름 3에서는 차트를 설치할 때 네임스페이스를 명시해주어야 한다.
헬름 차트의 구조
헬름에서 사용하는 차트는 디렉터리 하나에 포함된 파일들의 집합이다.
디렉터리 이름을 차트 이름으로 지정하고 그 안에 필요한 파일들을 넣는다.
헬름 차트 수정해 사용하기
보통 헬름은 잘 만들어진 차트를 바로 가져와서 사용한다. 하지만 차트를 수정해서 사용해야 하거나 원하는 애플리케이션의 차트가 없다면 수정해 사용할 수도 있다.
헬름 차트 저장소를 직접 만들어 사용하기
사용하는 차트를 다른 사람과 공유해서 사용하려면 수정한 차트를 깃허브에 반영하도록 코드를 제출해서 사용하는 방법을 생각할 수 있다.
하지만 사내에서만 사용하거나 특정 조직에서만 사용하는 차트는 깃허브에 반영할 수 없다. 이때는 헬름 차트 저장소를 직접 운영하는 방법도 생각할 수 있다.
헬름에서는 차트뮤지엄이라는 오픈 소스 차트 저장소를 제공한다.
차트뮤지엄은 차트 저장소 역할을 하므로 실행할 때 차트를 저장할 스토리지를 지정해야 한다. AWS S3, 구글 클라우드 스토리지, 애저 Blob 스토리지, 알리바바 클라우드 OSS 스토리지, 오픈스택 오브젝트 스토리지 등 다양한 클라우드 저장소를 사용할 수 있다.
용어정리
gRPC
* 구글에서 만든 RPC시스템이다.
* 다양한 환경, 플랫폼에 제약없이 사용할 수 있어 분산 시스템 기법에 효과적이다.
* 기본적인 개념은 RPC와 동일하지만 특징으로 HTTP/2기반으로 양방향 스트리밍을 지원하고 HTTP/2를 사용함으로써 메세지의 압축률과 성능이 좋다.
* 대부분의 아키텍쳐에 사용할 수 있지만 MSA에 가장 적합한 기술이다. 비즈니스 로직에 집중하여 빠른 서비스 개발이 가능하고, 간단한 설치와 빠른 배포가 가능하다. 또한 다양한 언어와 플랫폼 지원으로 ployglot한 언어와 기술스택을 지향하는 MSA의 철학과 동일하다.
RPC
* Remote Procedure Call로 프로세스간 통신기법 중 하나이다.
* 다른 프로세스에 있는 함수를 호출할 때, 마치 같은 프로세스 내에 있는 것처럼 호출할 수 있다. 클라이언트는 일반 로컬 메소드를 호출하는 것처럼 사용하면 된다.
RBAC
* Role-Based-Access-Control의 약자
* 역할 기반으로 쿠버네티스 시스템의 권한을 관리한다.
* 특정 사용자(User)와 역할(Role) 두가지를 조합하여 사용자에게 특정 권한을 부여할 수 있다.
'클라우드 > Kubernetes(쿠버네티스)' 카테고리의 다른 글
[kubernetes] Jenkins vs Jenkins X (0) | 2021.07.25 |
---|---|
[kubernetes] Tekton (0) | 2021.07.25 |
[쿠버네티스] 시크릿 (0) | 2021.06.11 |
[쿠버네티스] 컨피그맵 (0) | 2021.06.09 |
[쿠버네티스] 레이블과 애너테이션 (0) | 2021.06.09 |