List of apps and helm charts used for cluster provisioning¶
Argo CD¶
Tailscale operator¶
Akri¶
Overview¶
Akri docs.akri.sh is a Kubernetes framework that discovers and exposes heterogeneous devices (such as USB devices, cameras, GPIO, etc.) as cluster resources. Instead of hard-coding host paths like /dev/ttyUSB0 in your pods, Akri:
- Discovers devices based on attributes such as
idVendorandidProduct. - Registers them as custom resources (e.g.
akri.sh/zigbee). - Exposes them via Akri Instances that pods can request and consume.
This allows USB devices (for example Zigbee sticks) to be consumed by pods via Akri Instances instead of hard-coding /dev/tty* paths.
How Akri works (high level)¶
- Akri agent runs as a DaemonSet on each node.
- It watches udev events and device attributes (e.g. USB
idVendor/idProduct). - When a device matches an Akri Configuration, the agent:
- Registers the device as an Akri resource on the node.
- Creates an Akri Instance representing that specific device.
- Pods can then:
- Request the Akri resource in their
resources.requests/limits. - Optionally mount the device path exposed via the Instance.
This model is especially useful in multi-node clusters where devices may appear on different nodes or be hot-plugged.
Key concepts¶
-
Akri Configuration
Defines how to discover devices (e.g. by udev rules,idVendor/idProduct, etc.) and how to represent them in Kubernetes. -
Akri Instance
A concrete representation of a discovered device. Each physical device that matches a Configuration becomes an Instance. -
Akri resource
The custom resource name (e.g.akri.sh/zigbee) that appears in node capacity/allocatable and can be requested by pods.
Why use Akri instead of direct /dev mounts?¶
- Portability: Pods request a logical device resource instead of a specific host path.
- Scheduling: Kubernetes can schedule pods to nodes that actually have the device.
- Hot-plug support: Devices can be added/removed and Akri will update Instances accordingly.
- Multi-device abstraction: Multiple similar devices can be managed uniformly via Configurations.