아이티센 조사 과제 - 쿠버네티스 헬름

김재현·2022년 10월 4일
0

아이티센 프로젝트

목록 보기
22/30

Kubernetes Helm

Kubernetes Helm이 뭔데?

  • 쿠버네티스 템플릿들을 모아 관리하는 패키지 매니지먼트 도구
  • docker가 출시되며 container가 혁신했고,
    container을 쉽게 관리하고 배포해주는 kubernetes가 등장했으며,
    이 kubernetes를 package로 관리해주는 것이 Helm이다.
  • helm은 chart라고 부르는 package format을 사용하는데, chart는 쿠버네티스 리소스를 describe하는 파일들의 집합.
  • 일반적으로 하나의 소프트웨어를 쿠버네티스에 배포하려면 컨테이너만을 배포해서는 사용하기 어려운 경우가 많다.
  • 외부로 IP를 노출하기 위한 서비스 배포, pod를 관리할 deployment, 디스크 볼륨과 기타 정책 등등..
  • Helm은 애플리케이션 컨테이너 배포는 물론이고, 필요한 쿠버네티스 리소스를 모두 배포해주는 역할을 하며, 이 배포를 패키지 형태로 한다.
  • IaaC fnf rbgysgjsns Terraform + 패키지 매니저인 npm 정도의 개념.

  • CLI 툴인 클라이언트로 Helm이 있다.
    클라이언트는 Helm 서버 모듈과 통신을 하는데, 이 서버를 Tiller라고 하고, Tiller은 쿠버네티스 클러스터 내에 설치된다.
  • helm을 통해 인스톨하는 패키지가 Chart.
    Chart는 템플릿으로 설치하고자 하는 쿠버네티스 리소스의 설치 스크립트가 됨.
    Chart들은 Helm Chart Repository에 저장할 수 있다.
  • Helm Chart Repository는 HTTP server를 지원하기 때문에 Google Cloud Storage나 Git Hub Page 또는 웹 서버등을 사용할 수 있다.

Helm

  • 쿠버네티스는 결국 수많은 템플릿을 관리해야한다.
    헬름은 이런 템플릿 파일들의 집합(차트라고 한다)를 관리하는 쿠버네티스 패키지 매니저 도구.
  • 쿠버네티스의 하위 프로젝트로 시작되었다가 18년도 정식 프로젝트로 승격하였다.
  • 헬름은 차트와 차트 압축 파일을 만들고, 차트 저장소에 연결해 쿠버네티스 클러스터에 차트를 설치, 삭제할 수 있다. 배포 주기 관리도 가능.
  • 헬름을 이용해서 잘 정리된 차트들로 필요한 애플리케이션을 빠르게 설치할 수 있다.

Helm Chart

  • 차트는 helm의 패키지 포맷으로, 하나의 애플리케이션을 설치하기 위한 파일들로 구성되어 있다.

템플릿과 밸류

  • Helm은 기본적으로 템플릿의 개념을 사용한다. 템플릿 파일을 만들어놓고, 배류 값을 채워 넣어 쿠버네티스 리소스를 정의한 .yaml파일을 생성한다.

헬름 2와 헬름 3

  • 2는 CLI인 헬름 클라이언트와 쿠버네티스 클러스터 안에서 헬름 클라이언트의 명령을 받아 쿠버네티스 API와 통신하는 틸러 서버로 구성된다.
  • 헬름 클라이언트는 로컬 서버에 차트를 만들거나, 차트 저장소들과 클러스터에 실행 중인 애플리케이션(헬름 차트로 실행) 릴리즈를 관리하는데 필요한 요청을 하는 역할
  • 틸러 서버 : 헬름 클라이언트의 요청을 받아 실제로 처리하는 역할. 차트나 릴리즈를 만드는 것, 차트와 설정의 조합, 클러스터의 차트와 릴리즈의 설치와 관리를 담당한다. 틸러서버와는 gRPC를 사용해 통신한다.
  • 3에서는 틸러 서버가 없어졌다. 틸러를 이용하면 틸러가 설치된 네임스페이스 외의 다른 네임스페이스에 차트를 설치할 수가 있어서 쿠버네티스의 RBAC 구조 체계와 어긋나는 부분이 있기 때문.
  • 쿠버네티스의 RBAC를 따르도록 하기 위해 틸러 서버가 없어진 것이다.
  • 차트 설치 시 네임 스페이스를 명시해주어야한다.

헬름을 사용하는 이유

  • 쿠버네티스 애플리케이션 관리
    • 헬름 차트는 복잡한 쿠버네티스 애플리케이션도 편리하게 정의하여 설치하거나 업그레이드 할 수 있다.
    • 편리한 차트 작성, 버전 관리, 공유 및 게시
  • 복잡성 관리
    • 차트는 매우 복잡한 앱도 표현하고, 반복적인 애플리케이션 설치를 제공하며 단일 권한으로 서비스할 수 있음.
  • 쉬운 업데이트
    • 즉석(in-place) 업그레이드와 커스턴 훅은 통해 업데이트하는 수고를 줄여줌.
  • 간단한 공유
    • 차트는 버전 관리, 공유, 퍼블릭 혹은 프라이빗 서버 호스팅이 편리함.
  • 롤백
  • 각 버전마다 배포시 달라지는 정보들이 많기 때문에, 모든 환경마다 매니페스트를 작성할 수 없고 배포환경에 따라 달라지는 설정값만 정의해 둔 다음 이에 따라 배포하는 매커니즘이 필요하게 되었는데, 이런 문제를 해결한 것이 헬름(Helm)이다.
  • 쿠버네티스 위에서 동작하는 애플리케이션은 다양한 리소스의 조합으로 구성되며, 애플리케이션 배포시 이런 리소스를 개별적으로 생성하는 것이 아닌, 하나의 패키지로 묶어서 배포한다.
    패키지로 묶어서 관리하면 여러 리소스들을 동시에 추가 및 업그레이드 하기 편리해진다.
  • 예를 들어 .yaml은 정적 파일이기 때문에 리소스별로 yaml 파일을 만들어야된다. 때문에 많은 리소스를 관리하게 될 때 yaml 파일에 대한 유지보수가 힘들어지게 된다.
  • 하나의 Template을 통해 yaml 파일을 동적으로 생성하게 해주는 Tool이 필요하며, 결과적으로 배포관리가 편해진다.
  • docker가 단순히 프로세스 레벨에서 외부의 것을 가져다 쓸 수 있게 해준것이라면, 쿠버네티스는 helm을 이용, 프로세스(Pod)와 네트워크(Service), 저장소(PersistentVolume)등 애플리케이션에서 필요한 모든 자원들을 외부에서 가져올 수 있게 한다.

용어

gRPC

  • 구글에서 만든 RPC 시스템.
  • 다양한 환경, 플랫폼에 제약없이 사용할 수 있어 분산 시스템 기법에 효과적.
  • 기본 개념은 RPC와 동일하지만 특징으로 HTTP/2 기반 양방향 스트리밍을 지원, HTTP/2 사용으로 메시지의 압축률과 성능이 좋음.
  • 대부분 아키텍쳐에 사용할 수 있지만, MSA에 가장 적합.
    비즈니스 로직에 집중하여 빠른 서비스 개발이 가능하고, 간단히 설치하며 빠른 배포가 가능.
  • 다양한 언어, 플랫폼 지원.

RPC

  • Remote Procedure Call. 프로세스 간 통신기법 중 하나.
  • 다른 프로세스에 있는 함수를 호출할 때, 마치 같은 프로세스 내에 있는 것처럼 호출할 수 있다. 클라이언트는 일반 로컬 메서드를 호출하는 것처럼 사용할 수 있음.

RBAC

  • Role-Based-Access-Control
  • 역할 기반으로 쿠버네티스 시스템의 권한 관리.
  • 특정 사용자(user)와 역할(role) 두가지를 조합해, 사용자에게 특정 권한 부여 가능.

참고

helm
쿠버네티스 패키지 매니저 HELM
헬름 공식 페이지
핵심만 콕! 쿠버네티스

0개의 댓글