kiac logo

kiac

Local Kubernetes on Apple's container framework - every node is its own lightweight VM. Metrics, storage, and LoadBalancer included.

releasewebsite kiacplatform Apple siliconKubernetes 1.32–1.36
Website GitHub

What is it?

What it is

A tool for creating local Kubernetes clusters on Apple Silicon where each node is a lightweight virtual machine (VM) with its own kernel, providing hardware-grade isolation and real node behavior.

Why it exists

To address limitations of container-based Kubernetes setups (shared kernel, no real node failure testing) by using isolated VMs per node, enabling true node-level functionality like LoadBalancer services and node failures.

Who should use it

Apple silicon Mac developers needing realistic Kubernetes node isolation for testing features like node failure, LoadBalancer services, and per-node kernel settings.

Who should avoid it

Users without Apple silicon Macs, non-Kubernetes developers, or those requiring clusters on macOS versions below 15 (for single-node) or below 26 (for multi-node).

How it works

A quick walkthrough in plain English

How kiac works

Step 1 of 3

You interact with it

Open kiac, send a request, or connect it to your stack.

Features

Hardware-grade isolation with each node as a lightweight VM
Metrics out of the box (kubectl top nodes)
PVCs with default StorageClass (local-path-provisioner)
LoadBalancer support (kiac-lb) with direct IP assignment
Direct networking with routable IPs on macOS 26+
Multi-node clusters with real topology and node failures
Two distro options (kubeadm or k3s)
Cilium and eBPF support with full kernel
Observability with Prometheus and Grafana
Gateway API with Traefik preconfigured
Node chaos testing (stop/start nodes)
Cluster resilience after reboots (kiac resume)
Declarative cluster configuration
Local web console (kiac ui)
Native Swift and Go stack

Advantages

  • Real isolation between nodes via hypervisor, not namespaces
  • Accurate node failure simulation for testing
  • Direct networking without port mapping or tunnels
  • LoadBalancer functionality without additional setup
  • Preconfigured observability and gateway tools
  • Native Apple silicon optimization with container runtime
  • No dependency on Docker or external VMs
  • Idempotent cluster resumption after reboots
  • Supports modern Kubernetes features (eBPF, Cilium, Gateway API)
  • Lightweight VMs with minimal resource overhead

Disadvantages

  • Requires Apple silicon Mac with macOS 26+ (multi-node)
  • TCP connection issues after node restarts (vmnet limitation)
  • Limited to Apple ecosystem (no Linux/Windows support)
  • Relies on Apple's container runtime (no Docker compatibility)
  • Kernel updates require manual intervention
  • Single-node clusters have limitations on older macOS versions

Installation

native

brew install saiyam1814/tap/kiac

go install github.com/saiyam1814/kiac@latest

# From source
git clone https://github.com/saiyam1814/kiac && cd kiac && make build

FAQ

What are the system requirements to run kiac?

kiac requires an Apple silicon Mac, macOS 26+ for multi-node clusters (single-node works on macOS 15 with limitations), apple/container 1.0.0+, and kubectl.

How do I create a multi-node Kubernetes cluster with kiac?

Use `kiac create cluster --name <cluster-name> --workers <number>` to create a cluster with one control plane and the specified number of worker nodes.

How does kiac achieve hardware-grade isolation for Kubernetes nodes?

Each node in kiac runs as its own lightweight virtual machine using Apple's container runtime, which provides a dedicated kernel, cgroups, and IP per node via the Virtualization.framework, ensuring isolation at the hypervisor level.

Can I use kiac with k3s instead of the default kubeadm distribution?

Yes, by specifying the `--distro k3s` flag when creating a cluster (e.g., `kiac create cluster --name quick --distro k3s --workers 1`).

How do I expose a service as a LoadBalancer in kiac?

kiac includes kiac-lb by default, which assigns a node IP to Services of type LoadBalancer. Simply expose your service with `kubectl expose deploy <name> --port=<port> --type=LoadBalancer` and it will get an external IP from the node's vmnet network.

How do I recover my kiac cluster after rebooting my Mac?

Run `kiac resume cluster --name <cluster-name>` to restart the node VMs and restore the control-plane IP configuration; this operation is idempotent.

Loading documentation…
View on GitHub

Featured in Videos

YouTube tutorials and walkthroughs for kiac

Alternatives

Similar projects ranked by category, topics, and text overlap.

Compare
kiac | MushyBook