UniK: Build and Run Unikernels with Ease
Unikernels are lightweight, immutable operating systems compiled specifically to run a single application. Unikernel compilation combines source code with the specific device drivers and operating system libraries necessary to support the needs of the application. The result is a machine image that can run directly on a hypervisor or bare metal, eliminating the need for a host operating system (like Linux). The unikernel represents the smallest subset of code required to run the application, giving us portable applications with smaller footprints, less overhead, smaller attack surfaces, and faster boot times than traditional operating systems. Together, I believe unikernels have the potential to change the cloud-computing ecosystem as well as to dominate the emerging IoT market.
However, compiling a unikernel is a challenging assignment. It requires rare expertise often absent in application developer’s toolkit. The difficulty of compiling Unikernels may significantly hamper their widespread adoption. I believe that the community will benefit from a straightforward way to build and manage unikernels.
This is why UniK was developed.
UniK (pronounced you-neek) is a tool for compiling application sources into unikernels — lightweight bootable disk images — rather than binaries. UniK runs and manages instances of compiled images across a variety of cloud providers as well as locally on Virtualbox. UniK utilizes a simple docker-like command line interface, making building unikernels as easy as building containers. UniK is built to be easily extensible, allowing — and encouraging — adding support for unikernel compilers and cloud providers.
UniK is fully controllable through a REST API to allow for seamless integration between UniK and orchestration tools such as Kubernetes or Cloud Foundry.
Docker Integration: Recognizing the open source community’s popular adoption of the Docker API, we extend UniK’s REST API to serve some of the same endpoints as Docker, allowing some Docker commands such as docker run, docker rm, and docker ps to control UniK, which we hope will make UniK easier to adopt for those already familiar with Docker.
Kubernetes Integration: To demonstrate the value of cluster management of unikernels, we implemented a UniK runtime for Kubernetes, making Kubernetes the first cluster manager to support unikernels. This integration allows UniK to take advantage of core Kubernetes features like horizontal scaling, automated rollouts and rollbacks, storage orchestration, self-healing, service discovery, load balancing and batch execution.
Cloud Foundry Integration: To provide the user with a seamless PaaS experience, we added UniK as a backend to the Cloud Foundry runtime, positioning Cloud Foundry as the first platform to run applications as unikernels. This adds the lightweight scalability of unikernels with the security and sophistication of vms (lightweight, immutable, performant), persistent storage, and the ability to run on bare metal.
We believe the quintessential use case for unikernels is the advantage they give to smart devices in the Internet of Things. Their airtight security, immutable infrastructure, high performance and light footprint make them the ideal solution for deploying software on embedded devices. To demonstrate this vision for the future of unikernels, we implemented ARM processor support into UniK to run unikernels on the architecture used in most embedded devices such as the Raspberry Pi.
Today, we are thrilled to share the open source UniK under the Apache 2.0 license. We hope that the community will join us in making the Unikernel a first class citizen in the future cloud ecosystem and emerging market of IoT devices.