2018.07.26

브리게이드로 쿠버네티스에서 서버리스 플랫폼을 만드는 방법

Simon Bisson | InfoWorld
마이크로소프트는 컨테이너(Container)를 애저(Azure)뿐만 아니라 다른 클라우드에서도 잘 사용할 수 있도록 많은 노력을 기울이고 있다. 이를 위해 오픈 소스 쿠버네티스(Kubernetes) 컨테이너 오케스트레이션 플랫폼에서 구동하는 작업 부하 관리 툴을 개발하고 있고, 데이스(Deis), 헬름(Helm), 드래프트(Draft) 등을 인수하기도 했다. 최근에는 쿠버네티스에서 워크플로우를 개발, 관리하는 자바스크립트 기반 툴인 브리게이드(Brigade)를 공개했다.



코드를 통한 쿠버네티스: 분산형 파이프라인
많은 사람이 쿠버네티스를 대규모 분산형 애플리케이션 호스팅 및 관리, 컨테이너 호스트 마이크로서비스 모음, 리소스 처리, 스케일 관리를 위한 툴로 생각하는 경우가 많다. 하지만 쿠버네티스는 예상보다 더 유연하다. 소형 애플리케이션 또는 일회성 기능 인스턴스를 실행하는 데 이상적이다. CI(Continuous Integration)/CD(Continuous Delivery) 파이프라인을 위한 시험 스캐폴딩(Scaffolding)을 호스팅하거나 비즈니스 부문 또는 머신 러닝(ML) 시스템의 특정 메시지에 대응하는 데도 유용하다.

단, 쿠버네티스에 작은 애플리케이션을 통합하는 것은 쉬운 작업이 아니다. 이를 위해서는 코드와 컨테이너를 관리하는 YAML을 작성해야 하는데 이는 대형 애플리케이션을 구동하는 프레임워크를 구축하는 것만큼 힘든 일이다. 물론 모든 코드에 이런 작업이 필요한 것은 아니다. 개발자 대부분은 구성 파일보다 코드 작성을 선호한다. 선언형 진술을 사용하는 것보다 더 쉽게 이해하고, 디버깅 할 수 있기 때문이다. 브리게이드가 역할을 하는 것도 이 부분이다. 개발자가 선호하는 접근법을 쿠버네티스 애플리케이션 개발에 적용하고 컨테이너를 합치며 이들 사이에서 데이터를 전달한다.

브리게이드 애플리케이션은 파이프라인이며 컨테이너를 직렬 또는 병렬로 실행할 수 있는 별도의 작업으로 처리하는 보편적인 분산형 컴퓨팅 패턴이다. 브리게이드 자바스크립트는 파이프라인의 작동 방식을 처리해 작업 사이에서 데이터를 전달하고 병렬 및 파이프라인 작업을 모은다. 브리게이드의 핵심은 워크플로우 엔진이다. 도커(Docker) 컨테이너에서 사용하는 기본 문법을 지원하며 익숙한 자바스크립트를 이용해 모두 스크립트화한다.

사람들은 분산형 애플리케이션 개발을 확장 가능한 대형 애플리케이션 개발과 관리의 수단으로 생각하는 경우가 많지만, 이 개념은 기본적으로 엘리먼트(Element)를 병렬로 실행할 수 있는 경우에 작은 구성 요소로 분리할 수 있는 어느 애플리케이션에나 잘 적용된다. 브리게이드 파이프라인을 사용해 클라우드 애플리케이션 플랫폼에서 대용량 데이터나 ETL 작업을 처리하고 데브옵스 환경과 서비스도 관리할 수 있다.

브리게이드를 이용한 서버리스 이행
쿠버네티스 클러스터를 운용하고 있다면 브리게이드를 이용해 자신만의 서버리스 애플리케이션을 구축할 수 있다. 브리게이드 파이프라인을 작동시켜 미리 정의해 설정한 일련의 컨테이너를 실행하고 컨테이너 호스팅 작업 사이에서 결과를 전달한다.

서버리스 애플리케이션은 애저 펑션(Azure Functions), AWS 람다(AWS Lambdas) 같은 익숙한 서비스형 기능 접근방식보다 더 진화한 방식이다. 브리게이드를 통해 필요 시 작동하는 복잡한 애플리케이션을 구동하는 완전한 컨테이너를 호스팅하고, 필요에 따라 유휴 상태로 유지해 연산 능력을 거의 사용하지 않고 약간의 저장 공간만 사용한다. 그만큼 더 효율적이고 퍼블릭 클라우드의 경제성을 극대화할 수 있다. 연산 자원에 대한 초 단위 빌링(Billing), 저렴한 기가바이트당 스토리지 비용 등의 혜택을 누릴 수 있기 때문이다.


브리게이드 시작하기
브리게이드 서비스는 쿠버네티스에서 명령어 한 줄로 설치할 수 있어 매우 간단하다. 로컬 개발 미니큐브(minikube), 프라이빗 클라우드, 하이퍼스케일(Hyperscale) 퍼블릭 클라우드 등 쿠버네티스 시스템에서 구동한다. 또한 네이티브 쿠버네티스 코드이므로 애저에만 국한되지 않아 브리게이드를 다중 클라우드에 배치해 사용할 수도 있다. 브리게이드 스크립트 작업과 컨테이너는 필요에 따라 도커 저장소에서 가져와 어느 쿠버네티스 설치본에서나 구동할 수 있다.

브리게이드 프로젝트는 여러 파이프라인을 포함할 수 있으며 자바스크립트 config 파일을 이용해 파이프라인과 작업을 정의할 수 있다. 컨테이너만 처리할 필요 없이 RESTful API, 슬랙(Slack), 팀스(Teams) 등의 서비스와 코드 상호작용해 데브옵스에서 챗옵스(chatops)로 신속하게 이행할 수 있다. 이때 알려진 API를 사용하거나 내장된 브리게이디어(Brigadier) 게이트웨이를 통해 웹훅(Webhook)을 사용할 수 있다. 또는 자신만의 게이트웨이를 작성해 클라우드 이벤트(Cloud Events)를 이용해 소싱한 이벤트(그리고 적절한 라이브러리)를 처리할 수도 있다.

새 프로젝트는 헬름(Helm) 차트를 사용해 생성된다. 브리게이드의 목적 중 하나가 YAML 사용을 최소화하는 것이지만 기본 프로젝트 구성을 설정해 클러스터에서의 설치를 관리함으로 시크릿(Secret)과 토큰(Token)을 제공하려면 사용해야 한다. 또한 스크립트를 테스트하고 서버를 구성하는데 도움이 되는 브리그(Brig)라는 명령줄 툴도 제공한다.

브리게이드 파이프라인 개념은 매우 간단하다. 우선 기본 브리게이디어 서비스에서 이벤트 리스너(Listener)와 쿠버네티스에 대한 링크를 제공하는 핵심 개체를 가져온다. cod의 주된 엘리먼트는 파이프라인 코드를 랩핑(Wrapping)하는 이벤트 핸들러(Handler)다. 이벤트가 발생하면 코드가 실행되고 파이프라인이 이것이 완료되었음을 보고한다. 코드 자체는 개별적인 도커 이미지로 구성된 일련의 작업으로 구성된다. 기본 갤러리에서 가져오거나 사용자 정의 이미지를 사용할 수 있다. 그러면 각 작업에 이미지 내에서 구동하는 일련의 명령(과업)이 주어진다.

작업을 그룹화해 브리게이드의 그룹 명령을 이용해 병렬로 실행하거나 순차적으로 실행되도록 할 수 있다. 기본 그룹 기능은 플로우(Flow) 제어가 없기 때문에 파이프라인이 계속 구동하고 그룹화된 작업이 완료되기 전에 후속 작업을 실행한다.

또한, 자바스크립트 기능을 이용해 코드에 제어를 추가할 수 있다. 각 작업 또는 작업 그룹은 프라미스(Promise) 구조를 사용해 후속 작업을 확보함으로써 자바스크립트 비동기 작업을 활용할 수 있다. 모든 작업이 완료되고 파이프라인의 작업이 성공한 것으로 표시되면 쿠버네티스 호스트는 브리게이드 파이프라인을 해체해 다음 실행 시까지 작업 컨테이너를 폐기한다.

브리게이디어와 찰떡 궁합 툴들
브리게이드는 대부분 컨테이너를 이용한 작업에 초점을 두고 있지만 여전히 그 작동 방식을 확인해야 한다. 이 때, 브리게이드 작업용 대시보드를 제공하는 카시티(Kashti)가 필요하다. 카시티를 통해 로그를 구성 및 관리하고 이를 모든 파이프라인을 위한 콘솔로 활용할 수 있다. 출력을 추적하고 시각화할 수 있기 때문에 보고 계층뿐만 아니라 코드를 시험하고 디버깅하기 위해 필요한 브리게이드 스크립트에 대한 깊은 통찰도 추가적으로 얻을 수 있다.

특히, 애저와 경쟁 서비스에서 관리형 쿠버네티스 서비스를 사용하고 있다면 쿠버네티스로 많은 일을 할 수 있다. 헬름, 드래프트(Draft), 브리게이드 같은 애플리케이션이 작업 플랫폼을 더 개발자 친화적으로 만들 수 있도록 쿠버네티스를 확장하고 있으며 쿠버네티스 툴박스에 추가할 만한 가치가 있다. ciokr@idg.co.kr



2018.07.26

브리게이드로 쿠버네티스에서 서버리스 플랫폼을 만드는 방법

Simon Bisson | InfoWorld
마이크로소프트는 컨테이너(Container)를 애저(Azure)뿐만 아니라 다른 클라우드에서도 잘 사용할 수 있도록 많은 노력을 기울이고 있다. 이를 위해 오픈 소스 쿠버네티스(Kubernetes) 컨테이너 오케스트레이션 플랫폼에서 구동하는 작업 부하 관리 툴을 개발하고 있고, 데이스(Deis), 헬름(Helm), 드래프트(Draft) 등을 인수하기도 했다. 최근에는 쿠버네티스에서 워크플로우를 개발, 관리하는 자바스크립트 기반 툴인 브리게이드(Brigade)를 공개했다.



코드를 통한 쿠버네티스: 분산형 파이프라인
많은 사람이 쿠버네티스를 대규모 분산형 애플리케이션 호스팅 및 관리, 컨테이너 호스트 마이크로서비스 모음, 리소스 처리, 스케일 관리를 위한 툴로 생각하는 경우가 많다. 하지만 쿠버네티스는 예상보다 더 유연하다. 소형 애플리케이션 또는 일회성 기능 인스턴스를 실행하는 데 이상적이다. CI(Continuous Integration)/CD(Continuous Delivery) 파이프라인을 위한 시험 스캐폴딩(Scaffolding)을 호스팅하거나 비즈니스 부문 또는 머신 러닝(ML) 시스템의 특정 메시지에 대응하는 데도 유용하다.

단, 쿠버네티스에 작은 애플리케이션을 통합하는 것은 쉬운 작업이 아니다. 이를 위해서는 코드와 컨테이너를 관리하는 YAML을 작성해야 하는데 이는 대형 애플리케이션을 구동하는 프레임워크를 구축하는 것만큼 힘든 일이다. 물론 모든 코드에 이런 작업이 필요한 것은 아니다. 개발자 대부분은 구성 파일보다 코드 작성을 선호한다. 선언형 진술을 사용하는 것보다 더 쉽게 이해하고, 디버깅 할 수 있기 때문이다. 브리게이드가 역할을 하는 것도 이 부분이다. 개발자가 선호하는 접근법을 쿠버네티스 애플리케이션 개발에 적용하고 컨테이너를 합치며 이들 사이에서 데이터를 전달한다.

브리게이드 애플리케이션은 파이프라인이며 컨테이너를 직렬 또는 병렬로 실행할 수 있는 별도의 작업으로 처리하는 보편적인 분산형 컴퓨팅 패턴이다. 브리게이드 자바스크립트는 파이프라인의 작동 방식을 처리해 작업 사이에서 데이터를 전달하고 병렬 및 파이프라인 작업을 모은다. 브리게이드의 핵심은 워크플로우 엔진이다. 도커(Docker) 컨테이너에서 사용하는 기본 문법을 지원하며 익숙한 자바스크립트를 이용해 모두 스크립트화한다.

사람들은 분산형 애플리케이션 개발을 확장 가능한 대형 애플리케이션 개발과 관리의 수단으로 생각하는 경우가 많지만, 이 개념은 기본적으로 엘리먼트(Element)를 병렬로 실행할 수 있는 경우에 작은 구성 요소로 분리할 수 있는 어느 애플리케이션에나 잘 적용된다. 브리게이드 파이프라인을 사용해 클라우드 애플리케이션 플랫폼에서 대용량 데이터나 ETL 작업을 처리하고 데브옵스 환경과 서비스도 관리할 수 있다.

브리게이드를 이용한 서버리스 이행
쿠버네티스 클러스터를 운용하고 있다면 브리게이드를 이용해 자신만의 서버리스 애플리케이션을 구축할 수 있다. 브리게이드 파이프라인을 작동시켜 미리 정의해 설정한 일련의 컨테이너를 실행하고 컨테이너 호스팅 작업 사이에서 결과를 전달한다.

서버리스 애플리케이션은 애저 펑션(Azure Functions), AWS 람다(AWS Lambdas) 같은 익숙한 서비스형 기능 접근방식보다 더 진화한 방식이다. 브리게이드를 통해 필요 시 작동하는 복잡한 애플리케이션을 구동하는 완전한 컨테이너를 호스팅하고, 필요에 따라 유휴 상태로 유지해 연산 능력을 거의 사용하지 않고 약간의 저장 공간만 사용한다. 그만큼 더 효율적이고 퍼블릭 클라우드의 경제성을 극대화할 수 있다. 연산 자원에 대한 초 단위 빌링(Billing), 저렴한 기가바이트당 스토리지 비용 등의 혜택을 누릴 수 있기 때문이다.


브리게이드 시작하기
브리게이드 서비스는 쿠버네티스에서 명령어 한 줄로 설치할 수 있어 매우 간단하다. 로컬 개발 미니큐브(minikube), 프라이빗 클라우드, 하이퍼스케일(Hyperscale) 퍼블릭 클라우드 등 쿠버네티스 시스템에서 구동한다. 또한 네이티브 쿠버네티스 코드이므로 애저에만 국한되지 않아 브리게이드를 다중 클라우드에 배치해 사용할 수도 있다. 브리게이드 스크립트 작업과 컨테이너는 필요에 따라 도커 저장소에서 가져와 어느 쿠버네티스 설치본에서나 구동할 수 있다.

브리게이드 프로젝트는 여러 파이프라인을 포함할 수 있으며 자바스크립트 config 파일을 이용해 파이프라인과 작업을 정의할 수 있다. 컨테이너만 처리할 필요 없이 RESTful API, 슬랙(Slack), 팀스(Teams) 등의 서비스와 코드 상호작용해 데브옵스에서 챗옵스(chatops)로 신속하게 이행할 수 있다. 이때 알려진 API를 사용하거나 내장된 브리게이디어(Brigadier) 게이트웨이를 통해 웹훅(Webhook)을 사용할 수 있다. 또는 자신만의 게이트웨이를 작성해 클라우드 이벤트(Cloud Events)를 이용해 소싱한 이벤트(그리고 적절한 라이브러리)를 처리할 수도 있다.

새 프로젝트는 헬름(Helm) 차트를 사용해 생성된다. 브리게이드의 목적 중 하나가 YAML 사용을 최소화하는 것이지만 기본 프로젝트 구성을 설정해 클러스터에서의 설치를 관리함으로 시크릿(Secret)과 토큰(Token)을 제공하려면 사용해야 한다. 또한 스크립트를 테스트하고 서버를 구성하는데 도움이 되는 브리그(Brig)라는 명령줄 툴도 제공한다.

브리게이드 파이프라인 개념은 매우 간단하다. 우선 기본 브리게이디어 서비스에서 이벤트 리스너(Listener)와 쿠버네티스에 대한 링크를 제공하는 핵심 개체를 가져온다. cod의 주된 엘리먼트는 파이프라인 코드를 랩핑(Wrapping)하는 이벤트 핸들러(Handler)다. 이벤트가 발생하면 코드가 실행되고 파이프라인이 이것이 완료되었음을 보고한다. 코드 자체는 개별적인 도커 이미지로 구성된 일련의 작업으로 구성된다. 기본 갤러리에서 가져오거나 사용자 정의 이미지를 사용할 수 있다. 그러면 각 작업에 이미지 내에서 구동하는 일련의 명령(과업)이 주어진다.

작업을 그룹화해 브리게이드의 그룹 명령을 이용해 병렬로 실행하거나 순차적으로 실행되도록 할 수 있다. 기본 그룹 기능은 플로우(Flow) 제어가 없기 때문에 파이프라인이 계속 구동하고 그룹화된 작업이 완료되기 전에 후속 작업을 실행한다.

또한, 자바스크립트 기능을 이용해 코드에 제어를 추가할 수 있다. 각 작업 또는 작업 그룹은 프라미스(Promise) 구조를 사용해 후속 작업을 확보함으로써 자바스크립트 비동기 작업을 활용할 수 있다. 모든 작업이 완료되고 파이프라인의 작업이 성공한 것으로 표시되면 쿠버네티스 호스트는 브리게이드 파이프라인을 해체해 다음 실행 시까지 작업 컨테이너를 폐기한다.

브리게이디어와 찰떡 궁합 툴들
브리게이드는 대부분 컨테이너를 이용한 작업에 초점을 두고 있지만 여전히 그 작동 방식을 확인해야 한다. 이 때, 브리게이드 작업용 대시보드를 제공하는 카시티(Kashti)가 필요하다. 카시티를 통해 로그를 구성 및 관리하고 이를 모든 파이프라인을 위한 콘솔로 활용할 수 있다. 출력을 추적하고 시각화할 수 있기 때문에 보고 계층뿐만 아니라 코드를 시험하고 디버깅하기 위해 필요한 브리게이드 스크립트에 대한 깊은 통찰도 추가적으로 얻을 수 있다.

특히, 애저와 경쟁 서비스에서 관리형 쿠버네티스 서비스를 사용하고 있다면 쿠버네티스로 많은 일을 할 수 있다. 헬름, 드래프트(Draft), 브리게이드 같은 애플리케이션이 작업 플랫폼을 더 개발자 친화적으로 만들 수 있도록 쿠버네티스를 확장하고 있으며 쿠버네티스 툴박스에 추가할 만한 가치가 있다. ciokr@idg.co.kr

X