Firecracker – 서버리스 컴퓨팅을 위한 오픈 소스 경량 가상화 기술 공개
제가 가장 좋아하는 아마존 리더십 원칙 중 하나는 바로, 고객 집중(Customer Obsession) 원칙입니다. 저희는 2014년 AWS Lambda를 처음 공개하면서 인프라 관리가 필요하지 않도록 안전한 서버리스 환경을 개발자에게 제공하는 데 초점을 맞췄습니다. 원하는 수준의 애플리케이션 격리를 구현하기 위해 고객마다 전용 EC2 인스턴스를 사용했습니다.
이러한 접근 방식으로 보안 목표는 이루었지만, 한편으로는 Lambda를 관리하는 방식과 관련해 몇 가지 보완할 문제가 생겼습니다. 또한 당시에 다른 새로운 AWS 서비스들과 마찬가지로, 서버리스 모델에 대한 큰 그림이나 이에 대한 고객의 생각 및 고객이 실제로 Lambda를 어떻게 사용할 것인지를 파악하지 못했습니다. 뛰어난 고객 경험을 제공하는 동시에 시간이 지남에 따라 백엔드를 더욱 효율적으로 만드는 데 집중하는 과제를 안게 되었습니다
그리고 불과 4년만에 서버리스 모델은 우리 곁에 완전히 자리를 잡았습니다. 오늘날, Lambda는 매월 수십만 명의 활성 고객을 위해 수조 건의 실행 작업을 처리하고 있습니다. 작년에는 AWS Fargate를 출시하며 서버리스 환경의 장점을 컨테이너로 확장하면서, 이제 AWS 고객은 매주 수천만 개의 컨테이너를 실행할 수 있게 되었습니다.
서버리스 환경을 채택하는 고객이 늘어나면서 이제 효율성의 문제를 재고할 때가 왔습니다. 그리고 AWS의 발명과 단순화 원칙을 마음에 새기며 오늘날 컨테이너 및 기능에 맞게 설계된 가상 머신은 어떤 모습이어야 하는지를 자문해보았습니다!
Firecracker 소개
오늘 저는 KVM을 사용하는 새로운 가상화 기술인 Firecracker를 여러분에게 소개하고자 합니다. Firecracker를 통해 여러분은 가상화되지 않은 환경에서 1초도 되지 않는 시간 안에 경량 microVM(마이크로 가상 머신)을 시작할 수 있고, 컨테이너를 통해 제공하는 리소스 효율성과 기존 VM에서 제공하는 워크로드 격리 및 보안의 혜택을 그대로 활용할 수 있습니다.
다음은 Firecracker에 대해 알아야 할 핵심 사항입니다.
- 보안 – 항상 가장 중요한 우선순위입니다! Firecracker는 여러 수준의 격리와 보호를 사용하며, 공격 노출 영역을 최소화합니다.
- 고성능 – 현 시점 기준으로 125밀리초 안에 microVM을 시작할 수 있으며(2019년에는 더 빨라질 예정), 단기간 또는 일시적인 워크로드를 비롯한 여러 유형의 워크로드에 적합합니다.
- 검증된 실적 – Firecracker는 실전에서 검증되어 있습니다. 이미 AWS Lambda 및 AWS Fargate를 비롯한 사용량이 많은 여러 AWS 서비스가 Firecracker를 사용하고 있습니다.
- 낮은 오버헤드 – Firecracker는 microVM당 약 5MiB의 메모리를 사용합니다. 그리고 동일한 인스턴스에서 다양한 vCPU 및 메모리 구성 사양을 갖춘 안전한 수천 개의 VM을 실행할 수 있습니다.
- 오픈 소스 – Firecracker는 현재 진행 중인 오픈 소스 프로젝트입니다. 이미 검토와 PR(Pull Request)을 수락할 준비가 되었으며, 전 세계 기고자들과 협업할 수 있기를 기대하고 있습니다.
Firecracker는 미니멀리즘에 기반하여 제작되었습니다. crosvm에서 시작하여 오버헤드를 줄이고 안전한 멀티 테넌시를 활용하도록 최소 디바이스 모델을 설정했습니다. Firecracker는 스레드 보안을 보장하고 보안 취약성을 야기할 수 있는 여러 유형의 버퍼 오버런 오류를 방지하는 최신 프로그래밍 언어인 Rust로 작성되었습니다.
Firecracker 보안
앞서 언급한 대로, Firecracker는 많은 보안 기능을 통합하였습니다! 다음은 그중 몇 가지 기능입니다.
- 단순한 게스트 모델 – Firecracker 게스트는 공격 영역을 최소화하기 위해 가상화된 단순한 디바이스 모델로 제시됩니다(예: 네트워크 디바이스, 블록 I/O 디바이스, PIT(Programmable Interval Timer), KVM 클럭, 직렬 콘솔, 부분 키보드(VM을 재설정할 수 있을 정도의 기능)).
- 잠금(Jail) 처리 – Firecracker 프로세스는 cgroups 및 seccomp BPF를 사용하여 잠기며(Jail), 매우 제한된 소량의 시스템 호출 목록에 액세스합니다.
- 정적 연결 –
firecracker
프로세스는 정적으로 연결되며, 잠금자(Jailer)에서 시작하여 가능한 안전하고 클린한 상태의 호스트 환경을 보장합니다.
Firecracker 작동 방식
Firecracker를 경험해보고자 i3.metal 인스턴스를 시작하고 3개 파일(firecracker
바이너리, 루트 파일 시스템 이미지 및 Linux 커널)을 다운로드합니다.
/dev/kvm
에 액세스할 적절한 권한을 설정해야 합니다.
PuTTY 세션에서 firecracker
를 시작한 후 다른 세션에서 명령을 실행합니다(이 프로세스는 Unix 도메인 소켓에서 대기하며, REST API를 구현함). 첫 번째 명령은 첫 번째 게스트 시스템에 대한 구성을 설정합니다.
그리고 두 번째 명령은 게스트 커널을 설정합니다.
세 번째 명령은 루트 파일 시스템을 설정합니다.
모두 완료했으면 게스트 시스템을 시작할 수 있습니다.
이제 첫 번째 VM을 시작하고 실행합니다.
실제 시나리오라면, Firecracker로 모든 상호 작용을 스크립트나 프로그램으로 작성하고, 네트워킹 및 다른 I/O 작업에 더 많은 시간을 투자할 수도 있습니다. 하지만 re:Invent가 얼마 남지 않았고 할 일이 많아서 이 부분은 여러분에게 숙제로 남겨 드리겠습니다.
협업을 기다립니다
이것만으로도 굉장한 도약처럼 보이겠지만 아직 시작에 불과합니다. Firecracker 개발팀은 더 많은 내용을 전달하고 앞으로 여러분과 함께 작업할 수 있기를 기대하고 있습니다. Github 리포지토리를 즐겨찾기에 추가하고 커뮤니티에 참가해 코드를 보내 주세요!
— Jeff;
이 글은 AWS News Blog의 Firecracker – Lightweight Virtualization for Serverless Computing의 한국어 번역으로 정도현 AWS 테크니컬 트레이너가 감수하였습니다.