가상화ㆍ컨테이너 / 개발자 / 클라우드

웹어셈블리에 승부 거는 애저 쿠버네티스, Wasm 노드 관리 단순화

Simon Bisson | InfoWorld 2022.12.09
클라우드 네이티브 런타임의 진화는 흥미롭다. 컨테이너는 애플리케이션에서 클라우드에 자체 런타임을 쉽게 가져올 수 있게 해주고 다른 애플리케이션으로부터 효과적으로 격리해주지만, 안전한 애플리케이션 샌드박스에서 원하는 모든 것을 제공하지는 않는다. 자체 유저랜드를 가져오면 많은 문제가 해결되지만, 수직이 아니라 수평 격리가 된다. 컨테이너 애플리케이션은 여전히 호스트 리소스에 액세스할 수 있다. 
 
ⓒ Getty Images Bank

이런 이유로 웹어셈블리(줄여서 보통 Wasm이라고 함)가 갈수록 중요해지고 있다. 웹어셈블리는 익숙한 자바스크립트 런타임을 기반으로 서버에 접하는 코드와 사용자에 접하는 코드, 둘 모두에 샌드박스를 제공한다. 메모리 안전성과 형식 안정성을 갖춘 고(Go)와 러스트(Rust)를 포함한 익숙한 언어로 작성된 바이너리는 브라우저의 Wasm에서 실행되며, WASI(웹어셈블리 시스템 인터페이스)를 브라우저 호스트가 불필요한 네이티브 애플리케이션으로 사용한다. 

WASI와 Node.js 간에는 얼마간의 유사성이 있지만 가장 크고 중요한 차이점은 자바스크립트로 제한되지 않는다는 점이다. WASI는 닷넷이나 자바와 같은 런타임에서 기대할 수 있는 모든 API를 제공하지는 않지만, 빠르게 발전하며 엣지의 라즈베리 파이와 같은 디바이스, 하이퍼스케일 클라우드, x64 및 ARM 하드웨어에서 동일한 코드를 실행할 수 있게 해준다. 하나의 컴파일러, 하나의 개발 플랫폼을 통해 익숙한 툴을 익숙한 방법으로 사용할 수 있다. 
 

쿠버네티스의 웹어셈블리 

Wasm과 WASI는 컨테이너에 비해 장점이 있다. 애플리케이션은 작고 빠르고 네이티브에 가까운 속도로 실행할 수 있다. Wasm 샌드박스는 더 안전하기도 한데, 외부 리소스에 대한 액세스를 명시적으로 활성화해야 하기 때문이다. 

클라우드 네이티브 컴퓨팅 재단이 주관하는 큐브콘(KubeCon)에서 Wasm 데이(Wasm Day) 사전 컨퍼런스는 해가 거듭될수록 규모가 커지고 있으며, 그 내용도 주 컨퍼런스 세션까지 넘어가고 있다. 웹어셈블리가 컨테이너를 위한 페이로드, 서비스 메시와 같은 사이드카 서비스를 프로그래밍하는 방법, 엣지 디바이스에 워크로드를 전달하고 오케스트레이션하기 위한 대안으로 인식되고 있기 때문이다. 자체 샌드박스를 기반으로 쿠버네티스를 위한 공통 런타임을 제공함으로써 코드를 위한 부가적인 격리 및 보안 계층을 추가할 수 있다. 씬(thin) 윈도우 또는 리눅스 호스트의 자체 가상머신에서 컨테이너를 실행하는 하이퍼-V의 보안 컨테이너 환경과 상당부분 비슷하다. 

크러슬릿(Krustlets), WAGI와 같은 쿠버네티스 기술을 통해 Wasm 코드를 오케스트레이션하면 클라우드 네이티브 환경에서 웹어셈블리 코드를 사용할 수 있다. 이런 실험에서는 Wasm을 직접 실행하지만 이제 애저 쿠버네티스 서비스에서는 containerd를 사용한 WASI 모듈 기반의 대안을 제공한다. 
 

containerd 덕분에 더 쉬워진 WASI 실행 

이 새로운 접근법은 쿠버네티스의 기반 containerd 런타임이 작동하는 방식을 활용한다. 쿠버네티스를 사용해서 컨테이너 노드를 오케스트레이션하면, containerd는 보통 심(shim)을 사용해서 runc를 시작하고 컨테이너를 실행한다. 이 같은 고수준 접근 방법으로 containerd는 자체 심이 있는 다른 런타임을 지원할 수 있다. 컨네이너드를 유연하게 하면 여러 컨테이너 런타임을 지원할 수 있게 되고, 동일한 API를 통해 컨테이너의 대안을 제어할 수 있다. 

containerd의 컨테이너 심 API는 매우 간소하다. containerd에 사용할 컨테이너를 만들 때 사용하려는 런타임을 이름과 버전을 사용해 지정한다. 런타임에 대한 경로를 사용해 구성할 수도 있다. 그러면 containerd는 containerd-shim- 접두어로 실행되므로 어떤 심이 실행 중인지를 보고 표준 명령줄 툴로 제어할 수 있다. 

Containerd의 적응형 아키텍처는 쿠버네티스에서 도커심(Dockershim)을 제거한 것이 중요한 이유를 보여준다. 심 계층이 여러 개가 되면 복잡성이 높아지기 때문이다. 자체적으로 설명되는 하나의 심 프로세스를 두면 현재 사용 중인 런타임을 더 쉽게 식별하고, 필요에 따라 런타임과 라이브러리를 업데이트할 수 있다. 
 

Runwasi : 웹어셈블리를 위한 containerd 심 

Containerd를 위한 심을 작성해서 쿠버네티스가 익숙한 컨테이너를 넘어 훨씬 더 다양한 런타임과 런타임 환경을 제어할 수 있도록 하기는 비교적 쉽다. 애저에서 사용하는 runwasi 심이 바로 이 부분을 활용해서, 러스트 라이브러리를 사용해 컨테이너드 또는 쿠버네티스 CRI(컨테이너 런타임 인터페이스) 툴과의 통합을 처리하는 간단한 WASI 호스트로 동작한다. 

runwasi는 여전히 알파 수준의 코드지만, WASI 코드를 노드의 다른 포드로 취급한다는 면에서 쿠버네티스에서 웹어셈블리를 실행하는 다른 방법에 대한 흥미로운 대안이다. runwasi는 현재 두 가지 심을 제공한다. 하나는 포드별로 실행되고, 다른 하나는 노드별로 실행된다. 후자는 하나의 WASI 런타임을 노드의 모든 포드에 걸쳐 공유하며 여러 Wasm 샌드박스를 호스팅한다. 

마이크로소프트는 runwasi를 사용해 애저 쿠버네티스 서비스의 크러슬릿을 대체한다. 크러슬릿 지원은 여전히 작동하지만 WASI 워크로드를 새 쿠버네티스 노드풀로 옮겨 새 워크로드 관리 툴로 전환하는 것이 좋다. 현재로서는 runwasi는 프리뷰다. 즉, 사전 동의에 따라 이용하는 기능이며 프로덕션 용도로는 권장되지 않는다. 
 

AKS의 웹어셈블리 노드에 runwasi 사용하기 

이 서비스는 기능 플래그를 사용해서 사용 가능한 항목을 제어하므로 액세스를 활성화할 애저 CLI가 필요하다. 먼저 CLI에 aks-preview 확장을 설치한 다음 az feature register 명령을 사용해 WasmNodePoolPreview를 활성화한다. 

az feature register —namespace “Microsoft.ContainerService” —name “WasmNodePoolPreview” 

현재 서비스는 스핀(Spin)과 슬라이트(slight) 애플리케이션 프레임워크를 모두 지원한다. 스핀은 고 및 러스트 툴을 사용하는 페르미온(Fermyon)의 이벤트 기반 마이크로서비스 프레임워크이며, 슬라이트(Spider Lightning의 줄임말)는 마이크로소프트의 다이스 랩(Deis Labs)에서 만들었고 일반적인 클라우드 네이티브 설계 패턴 및 API에 러스트와 C를 지원한다. 두 가지 모두 바이트코드 얼라이언스(Bytecode Alliance)의 wasmtime WASI 런타임을 기반으로 한다. wasmtime 지원은 리눅스용 윈도우 서브시스템과 같은 툴을 사용해서 데스크톱 개발 PC에서 AKS의 리눅스 환경에서 사용 가능한 러스트 애플리케이션을 빌드하고 테스트할 수 있게 해준다. 

runwasi를 지원하도록 AKS를 구성하면 WASI 노드풀을 AKS 클러스터에 추가하고 kubectl을 사용해 연결하고 wasmtime 및 원하는 프레임워크를 위한 런타임 클래스를 구성할 수 있다. 이제 wasm32-wasi에 맞게 빌드된 워크로드를 구성하고 실행할 수 있다. 아직 프리뷰 코드인 만큼 명령줄에서 해야 할 일이 많다. runwasi는 계속 발전 중이므로 향후 애저 포털 툴 및 패키지 배포 서비스와의 통합으로 신속한 애플리케이션 배포와 실행이 가능해질 것으로 예상된다. 

빈들(Bindle)과 같은 툴에는 이상적인 환경이 되어 적절한 워크로드 버전과 아티팩트가 적절한 클러스터에 배포되도록 보장한다. 코드는 동일한 애플리케이션의 각 인스턴스에 대한 적절한 리소스와 함께 엣지 쿠버네티스 및 AKS와 같은 하이퍼스케일 인스턴스에서 실행 가능하다. 

이와 같은 프리뷰는 애저의 쿠버네티스 툴에 유용하다. 서비스를 제공하는 새로운 방법과 새로운 런타임 옵션을 실험할 수 있게 해준다. 툴체인과 CI/CD 파이프라인을 구축할 기회가 되므로 WASI가 엔터프라이즈 워크로드에 사용할 만큼 성숙한 기술이 될 시점을 미리 대비할 수 있다. 

기술만의 이야기는 아니다. WASI를 컨테이너의 대안으로 사용하는 데는 흥미로운 장기적 이점이 있다. 애저와 같은 클라우드 서비스 업체가 고밀도의 물리 ARM 서버를 제공하는 쪽으로 전환하면 WASI와 같은 비교적 가벼운 런타임 환경은 서버에 더 많은 노드를 배치해서 대규모로 애플리케이션을 호스팅하는 데 필요한 전력을 줄이는 데 도움이 되고 컴퓨팅 비용을 최소화할 수 있게 해준다. 더 빠르고 친환경적인 코드는 비즈니스가 지속 가능성 목표를 달성하는 데 도움이 될 것이다.
editor@itworld.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.