Overview

One of the hallmarks of “the edge” in computing is the array of sensors, controllers, and microcontroller unit (MCU) class devices that produce data and perform actions. For Kubernetes to be a versatile edge computing solution, a cluster needs to easily find these leaf devices. Most of these devices, however, are too small to run Kubernetes themselves. How can they be leveraged by a Kubernetes workload? How can a Kubernetes Pod find or access their outputs? Akri is the answer!

Today, Microsoft is proud to share the Akri project, designed to electrify the edge for Kubernetes users. Akri is a new open source project that exposes these leaf devices as resources in a Kubernetes cluster. Akri, meaning “edge” in Greek, can also be read as an acronym, as Akri aims to be “A Kubernetes Resource Interface for the edge.”

It provides an abstraction layer—similar to the Container Network Interface (CNI)—but instead of abstracting the underlying network details, it removes the work of finding, utilizing, and monitoring the availability of leaf devices such as cameras, sensors, and so on.

Akri leverages and extends the Kubernetes device plugin framework, which was originally created to focus on advertising static resources such as GPUs and other system hardware. Akri takes this framework and applies it to the edge, where there is a diverse set of leaf devices with unique communication protocols and intermittent availability. Akri continually detects nodes that have access to leaf devices and schedules workloads for them. Simply put: you name it, Akri finds it and you use it.

Architecture and functionality

Sonar Architecture single cluster devices diagram

Akri is Kubernetes-native. Its architecture is made up of four key Kubernetes components: two custom resources (CRDs), a device plugin implementation, and a custom controller. The first custom resource, the Akri Configuration, is where “you name it,” telling Akri the kind of leaf device you want to discover. Then, “Akri finds it,” as the Akri Agent—a Kubernetes device plugin framework implementation—searches for the leaf devices, checking for the availability of your desired ones. Once your device has been discovered, the Akri Controller helps “you use it.” It sees each Akri Instance, which represents a leaf device, and deploys a “broker” pod that knows how to connect to the leaf device and utilize it.

Built to make the edge come alive

Akri is made for the edge, handling the dynamic appearance and disappearance of leaf devices. A user simply has to apply an Akri Configuration to a cluster, specifying the discovery protocol—for example, Open Network Video Interface Forum (ONVIF) protocol—and the pod that should be deployed upon discovery, such as a video frame server.

Then, Akri does the rest. A user can also allow multiple nodes to utilize a leaf device, thereby providing high availability in the case where a node goes offline. Furthermore, Akri will automatically create a Kubernetes service for each type of leaf device (or Akri Configuration), removing the need for an application to track the state of pods or nodes.

Most importantly, Akri was built to be extensible. The project currently has ONVIF and udev discovery protocols, but more can be easily added by community members like you. The more protocols Akri can support, the wider an array of leaf devices Akri can discover.

Learn more and contribute

You can easily deploy and test Akri today on your edge cluster using K3s, MicroK8s, AKS-HCI, or any other certified Kubernetes distribution. To jump into using Akri, try our end-to-end demo, which discovers mock video devices and ultimately displays footage from the cameras on a streaming application. Want to learn more? Check out our documentation or hear from us at the Edge Conference on October 21, where we will be presenting this technology.

This project elevates the power of Kubernetes on the edge and is intended to reside in a community-governed foundation in the Kubernetes ecosystem. With your input and help, we can get there. Is there a device you want to use that Akri doesn’t have a discovery protocol for? Join us on Slack, create an issue on GitHub, or implement the new discovery protocol with the Akri community. We’re excited to continue to refine and extend Akri so that everyone can benefit from this project.

We are eager to see what you discover with this project and how it evolves. Together, we can build a more connected edge with Kubernetes.