2020.01.10

‘쿠버네티스 상에서 직접 서버리스를’··· 주요 프로젝트 5종

Serdar Yegulalp | InfoWorld
쿠버네티스를 이용해 서버리스 기능을 구동하는 플랫폼을 생성하고 싶은가? 이를 가능케하는 5종의 프레임워크를 정리했다. 

서버리스, 이벤트-주도 컴퓨트, FaaS(functions as a service)… 아이디어는 같다. 즉, 이벤트에 대응해 호출된 개별 함수를 실행하기 위해 자원을 동적으로 할당하는 것이다. 개별 함수는 기본적으로 마이크로서비스이다. 서버리스 컴퓨트 플랫폼은 개발자가 기저 인프라와 각종 관리 문제에 신경 쓸 필요 없이 앱에 집중할 수 있게 해준다.  

오늘날 대다수 클라우드 사업자는 나름의 서버리스 플랫폼을 제공하고 있다. 그러나 이용자도 서버리스 플랫폼을 한두 가지 요소만으로 직접 구축할 수 있다. 하나는 컨테이너 오케스트레이션 시스템인 쿠버네티스이다. 이는 컴포넌트화된 탄력적인 애플리케이션을 구축하는 표준 플랫폼이다. 다른 하나는 쿠버네티스에서 서버리스 애플리케이션 패턴을 구축할 때 쓰이는 각종 시스템이다. 

대부분의 쿠버네티스 서버리스 프레임워크는 아래의 특징을 공통적으로 갖는다.  

- 로컬 또는 원격으로, 쿠버네티스를 지원하는 어떤 환경으로도 배포(예. 오픈 시프트 환경) 
- 어떤 언어로 쓰인 코드도 실행할 수 있도록 지원, 프레임워크에 사전 매립된 공통 런타임 포함. 
- 다양한 이벤트 종류로 코드 실행을 유발 (예. HTTP 엔드포인트, 큐 메시지, 후크 등  

쿠버네티스 상의 서버리스 구축은 기저의 플랫폼에 대해 더 자유롭게 제어할 수 있게 된다 장점이 있다. 

여러 서버리스 상품은 실행하는 함수의 거동을 제한하기 때문에, 간혹 특정 애플리케이션은 실행 자체가 불가능하기도 하다. 쿠버네티스가 있다면 이용자는 자신의 니즈에 따라 서버리스 플랫폼을 생성할 수 있다. 쿠버네티스 운영자가 인프라를 당할 것이기 때문에 개발자는 중요 코드를 작성하는 데 집중할 수 있다. 

여기 서버리스 기능을 쿠버네티스로 가져오게 해주는 5가지 주요 프로젝트를 소개한다. 
 
ⓒ Image Credit : Getty Images Bank


피션 
피션(Fission)은 관리형 쿠버네티스 회사인 플랫폼 9이 개발하고 운영한다. 회사에 따르면 단순히 정의 파일만 가지고도 컨테이너를 구축할 필요 없이 FaaS 애플리케이션을 생성할 수 있다. 

피션은 헬름 차트를 포함하거나 포함하지 않은 채 설치될 수 있고, 2가지 버전이 있다. 정식 버전은 로깅을 위한 메시지 큐 및 인플럭스DB 지원을 제공하고, 약식 버전은 기본 함수만 제공한다. 정식 버전은 실무 배치를, 약식 버전은 시험 운영을 위한 것이다.
 
피션에 코드를 추가할 때에는 YAML 기반 스펙 파일을 이용한다. YAML 파일을 생성하는 한편 함수 엔트리 포인트를 촉발하기까지의 경로를 지정할 때에는 명령줄 툴링을 이용한다. 스펙 파일은 환경 변수, 보조 컨테이너, 볼륨, 쿠버네티스 테인트/톨러레이션 컨트롤도 포함한다. 

피션은 또한 워크플로우도 제공한다. 헬름 차트에 의해 설치된 워크플로우는 한 함수의 결과를 다른 함수로 전달한다. 함수는 심지어 동일한 언어일 필요도 없다. 그러나 이는 성능에 불리하게 작용한다. 함수의 결과물이 인터체인지 포맷으로 제시되기 때문이다. 다만 워크플로우 시스템이 여러 기본 바이너리 타입을 지원하며 오버헤드를 줄이기는 한다(예. integer, byte stream 등) 

기본적으로 FaaS의 단점 가운데 하나는 함수가 처음 호출될 때 연관 컨테이너를 시작하는데 나타나는 연이 눈에 띌 정도라는 점이었다. 피션은 함수가 처음 실행될 때 레이턴시를 최소화하기 위해 예열 상태(pre-warmed)를 유지한다. 

피션은 개발자 및 관리자를 위해 다른 편의들 역시 제공한다. 서비스가 외부 인터넷 접속이 없는 클러스터로 배포될 수 있고, 코드는 요구 즉시 클러스터로 핫-리로딩 될 수 있다. 함수 활동 역시 기록되고 재생될 수 있어 디버깅에 용이하다. 

피션은 개방적인 아파치 라이선스 하에서 이용할 수 있어서 필요할 때마다 자유롭게 개조할 수 있다. 

K네이티브 
당초 구글이 쿠버네티스에서 서버리스 앱을 실행하기 위해 제작한 K네이티브(Knative)는 서버리스 실무 배포 시 공통 패턴에 초점을 맞춘다. 이를 효과적으로 이용하려면 쿠버네티스 컴포넌트를 관리할 전문성이 필요하다. 

쿠버네티스 외에도, 라우팅 시스템, 즉 서비스 메시가 (예. 이스티오) 필요하지만, 앰배서더(Ambassador), 글루(Gloo) 같은 다른 선택지도 이용할 수 있다. 이는 설치 시 약간의 작업이 더 필요하다는 의미이다. 그러나 다양한 클라우드 서비스 및 쿠버네티스 환경에서 (예 바닐라 쿠버네티스) 이들을 이용할 수 있도록 상세한 안내서가 준비되어 있다. 

K네이티브는 주로 기존의 쿠버네티스 툴링과 기능을 활용하거나 확장한다. 앱 또는 함수는 YAML 파일에 의해 구성되고, 도커 컨테이너로서 배포된다. kubectl 명령줄 툴은 정의를 추가하고, 수정하고, 삭제한다. K네이티브는 로그 시각화 툴로 그라파나(Grafana)를 이용한다. 스케일링은 케이네이티브의 자체 오토스케일러를 이용하지만, 커스텀 스케일러를 비롯해 다른 쿠버네티스 호환 스케일러도 무방하다. 

K네이티브는 현재 개발되는 중이고, 전용 툴은 아직 조잡한 수준인 것이 많다. K네이티브 전용 CLI인 knctl은 K네이티브를 관리하기 위해 다른 쿠버네티스 툴을 사용하는 번잡함을 없앤다. K네이티브 상에서 고 언어 앱을 개발하는 툴인 ko는 컨테이너 구축 단계를 제거한다.  

쿠브리스 
쿠브리스(Kubeless)는 웹 애플리케이션 그룹을 쉽게 설치하는 인스톨러의 개발자인 비트나미가 개발했다. 쿠브리스는 쿠버네티스의 네이티브 커스텀 리소스 정의를 이용해 함수를 처리한다. 쿠브리스는 쿠버네티스의 중요 기능을 모두 활용하는 쿠버네티스 네이티브 서버리스 플랫폼이다.  

이 플랫폼은 대다수의 공통 언어 런타임, 즉 .NET, 자바, 파이썬, 노드.js, PHP, 루비, 고, 그리고 심지어 클라우드 네이티브 개발을 위한 최신 발레리나 언어를 포함한다. 런타임은 단순히 도커 이미지이다. 다만 쿠브리스에는 도커파일을 이용해 커스텀 런타임을 구축하는 전용 패키징 포맷이 있다. 

쿠브리스의 또 따른 유용한 기능은 CLI이고, 이는 AWS 람다 CLI와 명령이 동일하다. 따라서 AWS 람다로부터 마이그레이션을 하지만 기존의 매니지먼트 스크립팅을 보존하고 싶은 경우라면 대단히 유용하다. 새로운 명령 세트를 따로 배울 필요가 없다. 

또한 쿠브리스는 서버리스 프레임워크의 플러그인 역할도 한다. 서버리스 프레임워크는 다양한 아키텍처 상에서 서버리스 애플리케이션을 구축하는 솔루션이다. 이미 서버리스나 쿠브리스를 사용 중이라면 굳이 다른 것을 찾지 않고 이들 가운데 하나를 추가한다면 더 편리할 것이다. 

오픈FaaS 
오픈FaaS의 취지는 서버리스 함수를 단순화하는 것이다. 이 단순함이이 개발자에게 의미하는 바는 도커 컨테이너를 전개하는 것보다 더 어렵지 않다는 것이다.

오픈FaaS는 쿠버네티스나 도커 스왐 클러스터로 (로컬 테스팅이나 저-수요 이용 시) 전개될 수 있다. 도커 이미지를 구축하여 클러스터로 전송/배포해 함수를 실행하는 데에는 오픈FaaS CLI를 이용한다. 고, 파이썬, 노드.js, .NET, 루비, 자바, PHP 7로 작성된 앱을 전개하는 데에는 이를 위해 사전 제작된 템플릿을 이용한다. 오픈FaaS CLI는 또한 클러스터에서 비밀을 유지할 방법도 제공한다. 한편 빌트-인 웹 UI에서 새 함수를 생성하고 관리할 수 있다. 

오픈FaaS의 다른 버전인 오픈FaaS 클라우드는 개발자를 위한 다양한 기능으로 오픈FaaS를 재구성한다. 예컨대 깃(Git)과의 통합, CI/CD, 비밀 관리, HTTPS, 그리고 슬랙 등에 이벤트를 공급하는 기능 같은 것들이다. 오픈FaaS 클라우드는 무료 오픈소스 제품이고, 호스팅 버전도 현재 무료로 이용할 수 있다. 

오픈위스크 
아파치 오픈위스크(Apache OpenWhisk)는 범용 서버리스 플랫폼이다. 쿠버네티스는 오픈위스크에서 컨테이너를 운영하기 위한 여러 선택지 가운데 하나에 불과하다. 메소스(Mesos), 도커 컴포즈(Docker Compose) 역시 지원하기 때문이다. 

그럼에도 불구하고, 쿠버네티스는 앱 배포를 위한 툴링, 특히 헬름 차트 때문에 선호되는 플랫폼이다. IBM 클라우드 펑크션즈는 오픈위스크 프로젝트에 기반하기 때문에 오픈위스크 CLI 명령을 이용할 수 있다. 

대다수 서버리스 쿠버네티스 프레임워크와 달리 오픈위스크는 고 언어가 아닌 스칼라 언어로 작성됐다(쿠버네티스와 도커는 모두 고 언어로 작성됨). 오프위스크를 무단으로 해킹하려는데, 고 언어 경험만 가진 경우가 아니라면 문제될 게 없다.  

오픈위스크에는 대다수의 보편적 애플리케이션 런타임 선택지가 포함되어 있다. 즉, 자바, 노드.js, 파이썬, 루비, PHP, .NET이다. 나아가 난해하고 최신의 선택지도 있다. 즉, 스칼라, 발레리나, 스위프트, 러스트이다. 런타임은 단순히 도커 컨테이너이고, 따라서 런타임의 자체 개발도 어렵지 않다.

오픈위스크의 한가지 편리한 기능은 ‘집 액션(zip actions)’이다. 코드 및 AUX 파일로 된 .zip 아카이브를 오픈위스크로 지정한다. 그러자면 매너페스트(manifest) 파일을 만들어야 한다. 그러면 오픈위스크가 액션을 생성한다. 오픈위스크 CLI는 코드의 디렉토리 트리를 위 아카이브로 변환할 수 있는 툴을 포함한다. 이외에도 깃허브, 슬랙, 아파치 카프카, 지라 같은 외부 플랫폼으로 애플리케이션을 쉽게 연결하는 등 다양한 서비스가 있다.
 
ciokr@idg.co.kr 



2020.01.10

‘쿠버네티스 상에서 직접 서버리스를’··· 주요 프로젝트 5종

Serdar Yegulalp | InfoWorld
쿠버네티스를 이용해 서버리스 기능을 구동하는 플랫폼을 생성하고 싶은가? 이를 가능케하는 5종의 프레임워크를 정리했다. 

서버리스, 이벤트-주도 컴퓨트, FaaS(functions as a service)… 아이디어는 같다. 즉, 이벤트에 대응해 호출된 개별 함수를 실행하기 위해 자원을 동적으로 할당하는 것이다. 개별 함수는 기본적으로 마이크로서비스이다. 서버리스 컴퓨트 플랫폼은 개발자가 기저 인프라와 각종 관리 문제에 신경 쓸 필요 없이 앱에 집중할 수 있게 해준다.  

오늘날 대다수 클라우드 사업자는 나름의 서버리스 플랫폼을 제공하고 있다. 그러나 이용자도 서버리스 플랫폼을 한두 가지 요소만으로 직접 구축할 수 있다. 하나는 컨테이너 오케스트레이션 시스템인 쿠버네티스이다. 이는 컴포넌트화된 탄력적인 애플리케이션을 구축하는 표준 플랫폼이다. 다른 하나는 쿠버네티스에서 서버리스 애플리케이션 패턴을 구축할 때 쓰이는 각종 시스템이다. 

대부분의 쿠버네티스 서버리스 프레임워크는 아래의 특징을 공통적으로 갖는다.  

- 로컬 또는 원격으로, 쿠버네티스를 지원하는 어떤 환경으로도 배포(예. 오픈 시프트 환경) 
- 어떤 언어로 쓰인 코드도 실행할 수 있도록 지원, 프레임워크에 사전 매립된 공통 런타임 포함. 
- 다양한 이벤트 종류로 코드 실행을 유발 (예. HTTP 엔드포인트, 큐 메시지, 후크 등  

쿠버네티스 상의 서버리스 구축은 기저의 플랫폼에 대해 더 자유롭게 제어할 수 있게 된다 장점이 있다. 

여러 서버리스 상품은 실행하는 함수의 거동을 제한하기 때문에, 간혹 특정 애플리케이션은 실행 자체가 불가능하기도 하다. 쿠버네티스가 있다면 이용자는 자신의 니즈에 따라 서버리스 플랫폼을 생성할 수 있다. 쿠버네티스 운영자가 인프라를 당할 것이기 때문에 개발자는 중요 코드를 작성하는 데 집중할 수 있다. 

여기 서버리스 기능을 쿠버네티스로 가져오게 해주는 5가지 주요 프로젝트를 소개한다. 
 
ⓒ Image Credit : Getty Images Bank


피션 
피션(Fission)은 관리형 쿠버네티스 회사인 플랫폼 9이 개발하고 운영한다. 회사에 따르면 단순히 정의 파일만 가지고도 컨테이너를 구축할 필요 없이 FaaS 애플리케이션을 생성할 수 있다. 

피션은 헬름 차트를 포함하거나 포함하지 않은 채 설치될 수 있고, 2가지 버전이 있다. 정식 버전은 로깅을 위한 메시지 큐 및 인플럭스DB 지원을 제공하고, 약식 버전은 기본 함수만 제공한다. 정식 버전은 실무 배치를, 약식 버전은 시험 운영을 위한 것이다.
 
피션에 코드를 추가할 때에는 YAML 기반 스펙 파일을 이용한다. YAML 파일을 생성하는 한편 함수 엔트리 포인트를 촉발하기까지의 경로를 지정할 때에는 명령줄 툴링을 이용한다. 스펙 파일은 환경 변수, 보조 컨테이너, 볼륨, 쿠버네티스 테인트/톨러레이션 컨트롤도 포함한다. 

피션은 또한 워크플로우도 제공한다. 헬름 차트에 의해 설치된 워크플로우는 한 함수의 결과를 다른 함수로 전달한다. 함수는 심지어 동일한 언어일 필요도 없다. 그러나 이는 성능에 불리하게 작용한다. 함수의 결과물이 인터체인지 포맷으로 제시되기 때문이다. 다만 워크플로우 시스템이 여러 기본 바이너리 타입을 지원하며 오버헤드를 줄이기는 한다(예. integer, byte stream 등) 

기본적으로 FaaS의 단점 가운데 하나는 함수가 처음 호출될 때 연관 컨테이너를 시작하는데 나타나는 연이 눈에 띌 정도라는 점이었다. 피션은 함수가 처음 실행될 때 레이턴시를 최소화하기 위해 예열 상태(pre-warmed)를 유지한다. 

피션은 개발자 및 관리자를 위해 다른 편의들 역시 제공한다. 서비스가 외부 인터넷 접속이 없는 클러스터로 배포될 수 있고, 코드는 요구 즉시 클러스터로 핫-리로딩 될 수 있다. 함수 활동 역시 기록되고 재생될 수 있어 디버깅에 용이하다. 

피션은 개방적인 아파치 라이선스 하에서 이용할 수 있어서 필요할 때마다 자유롭게 개조할 수 있다. 

K네이티브 
당초 구글이 쿠버네티스에서 서버리스 앱을 실행하기 위해 제작한 K네이티브(Knative)는 서버리스 실무 배포 시 공통 패턴에 초점을 맞춘다. 이를 효과적으로 이용하려면 쿠버네티스 컴포넌트를 관리할 전문성이 필요하다. 

쿠버네티스 외에도, 라우팅 시스템, 즉 서비스 메시가 (예. 이스티오) 필요하지만, 앰배서더(Ambassador), 글루(Gloo) 같은 다른 선택지도 이용할 수 있다. 이는 설치 시 약간의 작업이 더 필요하다는 의미이다. 그러나 다양한 클라우드 서비스 및 쿠버네티스 환경에서 (예 바닐라 쿠버네티스) 이들을 이용할 수 있도록 상세한 안내서가 준비되어 있다. 

K네이티브는 주로 기존의 쿠버네티스 툴링과 기능을 활용하거나 확장한다. 앱 또는 함수는 YAML 파일에 의해 구성되고, 도커 컨테이너로서 배포된다. kubectl 명령줄 툴은 정의를 추가하고, 수정하고, 삭제한다. K네이티브는 로그 시각화 툴로 그라파나(Grafana)를 이용한다. 스케일링은 케이네이티브의 자체 오토스케일러를 이용하지만, 커스텀 스케일러를 비롯해 다른 쿠버네티스 호환 스케일러도 무방하다. 

K네이티브는 현재 개발되는 중이고, 전용 툴은 아직 조잡한 수준인 것이 많다. K네이티브 전용 CLI인 knctl은 K네이티브를 관리하기 위해 다른 쿠버네티스 툴을 사용하는 번잡함을 없앤다. K네이티브 상에서 고 언어 앱을 개발하는 툴인 ko는 컨테이너 구축 단계를 제거한다.  

쿠브리스 
쿠브리스(Kubeless)는 웹 애플리케이션 그룹을 쉽게 설치하는 인스톨러의 개발자인 비트나미가 개발했다. 쿠브리스는 쿠버네티스의 네이티브 커스텀 리소스 정의를 이용해 함수를 처리한다. 쿠브리스는 쿠버네티스의 중요 기능을 모두 활용하는 쿠버네티스 네이티브 서버리스 플랫폼이다.  

이 플랫폼은 대다수의 공통 언어 런타임, 즉 .NET, 자바, 파이썬, 노드.js, PHP, 루비, 고, 그리고 심지어 클라우드 네이티브 개발을 위한 최신 발레리나 언어를 포함한다. 런타임은 단순히 도커 이미지이다. 다만 쿠브리스에는 도커파일을 이용해 커스텀 런타임을 구축하는 전용 패키징 포맷이 있다. 

쿠브리스의 또 따른 유용한 기능은 CLI이고, 이는 AWS 람다 CLI와 명령이 동일하다. 따라서 AWS 람다로부터 마이그레이션을 하지만 기존의 매니지먼트 스크립팅을 보존하고 싶은 경우라면 대단히 유용하다. 새로운 명령 세트를 따로 배울 필요가 없다. 

또한 쿠브리스는 서버리스 프레임워크의 플러그인 역할도 한다. 서버리스 프레임워크는 다양한 아키텍처 상에서 서버리스 애플리케이션을 구축하는 솔루션이다. 이미 서버리스나 쿠브리스를 사용 중이라면 굳이 다른 것을 찾지 않고 이들 가운데 하나를 추가한다면 더 편리할 것이다. 

오픈FaaS 
오픈FaaS의 취지는 서버리스 함수를 단순화하는 것이다. 이 단순함이이 개발자에게 의미하는 바는 도커 컨테이너를 전개하는 것보다 더 어렵지 않다는 것이다.

오픈FaaS는 쿠버네티스나 도커 스왐 클러스터로 (로컬 테스팅이나 저-수요 이용 시) 전개될 수 있다. 도커 이미지를 구축하여 클러스터로 전송/배포해 함수를 실행하는 데에는 오픈FaaS CLI를 이용한다. 고, 파이썬, 노드.js, .NET, 루비, 자바, PHP 7로 작성된 앱을 전개하는 데에는 이를 위해 사전 제작된 템플릿을 이용한다. 오픈FaaS CLI는 또한 클러스터에서 비밀을 유지할 방법도 제공한다. 한편 빌트-인 웹 UI에서 새 함수를 생성하고 관리할 수 있다. 

오픈FaaS의 다른 버전인 오픈FaaS 클라우드는 개발자를 위한 다양한 기능으로 오픈FaaS를 재구성한다. 예컨대 깃(Git)과의 통합, CI/CD, 비밀 관리, HTTPS, 그리고 슬랙 등에 이벤트를 공급하는 기능 같은 것들이다. 오픈FaaS 클라우드는 무료 오픈소스 제품이고, 호스팅 버전도 현재 무료로 이용할 수 있다. 

오픈위스크 
아파치 오픈위스크(Apache OpenWhisk)는 범용 서버리스 플랫폼이다. 쿠버네티스는 오픈위스크에서 컨테이너를 운영하기 위한 여러 선택지 가운데 하나에 불과하다. 메소스(Mesos), 도커 컴포즈(Docker Compose) 역시 지원하기 때문이다. 

그럼에도 불구하고, 쿠버네티스는 앱 배포를 위한 툴링, 특히 헬름 차트 때문에 선호되는 플랫폼이다. IBM 클라우드 펑크션즈는 오픈위스크 프로젝트에 기반하기 때문에 오픈위스크 CLI 명령을 이용할 수 있다. 

대다수 서버리스 쿠버네티스 프레임워크와 달리 오픈위스크는 고 언어가 아닌 스칼라 언어로 작성됐다(쿠버네티스와 도커는 모두 고 언어로 작성됨). 오프위스크를 무단으로 해킹하려는데, 고 언어 경험만 가진 경우가 아니라면 문제될 게 없다.  

오픈위스크에는 대다수의 보편적 애플리케이션 런타임 선택지가 포함되어 있다. 즉, 자바, 노드.js, 파이썬, 루비, PHP, .NET이다. 나아가 난해하고 최신의 선택지도 있다. 즉, 스칼라, 발레리나, 스위프트, 러스트이다. 런타임은 단순히 도커 컨테이너이고, 따라서 런타임의 자체 개발도 어렵지 않다.

오픈위스크의 한가지 편리한 기능은 ‘집 액션(zip actions)’이다. 코드 및 AUX 파일로 된 .zip 아카이브를 오픈위스크로 지정한다. 그러자면 매너페스트(manifest) 파일을 만들어야 한다. 그러면 오픈위스크가 액션을 생성한다. 오픈위스크 CLI는 코드의 디렉토리 트리를 위 아카이브로 변환할 수 있는 툴을 포함한다. 이외에도 깃허브, 슬랙, 아파치 카프카, 지라 같은 외부 플랫폼으로 애플리케이션을 쉽게 연결하는 등 다양한 서비스가 있다.
 
ciokr@idg.co.kr 

X