Get the full Okteto self-hosted platform running right on your Apple silicon Mac - natively, on Apple’s container runtime, with no cloud, no credit card, and no Docker Desktop. You’ll use kiac (“Kubernetes in Apple Containers”) to stand up a real cluster where every node is its own lightweight VM, install Okteto with a free license, and deploy a live multi-service app you can open in your browser.
What is kiac?
kiac - “Kubernetes in Apple Containers” - spins up a real Kubernetes cluster on macOS using Apple’s container framework. Instead of nodes sharing one kernel like most local-Kubernetes tools, every node is its own lightweight VM with a real kernel, cgroups, and IP address. It comes with the essentials already wired in - metrics-server, a default storage class, and a LoadBalancer - so what you get is a fast, disposable, production-like cluster running entirely on your laptop. No Docker Desktop, no cloud.
kiac is built by Saiyam Pathak - CNCF Ambassador, founder of Kubesimplify, and KubeCon co-chair - one of the most recognized educators in cloud native and AI infrastructure, and a good friend of Okteto. If you want to go deeper on kiac itself, star the repo and follow Saiyam’s work.
What you’ll end up with
- A single-node Kubernetes cluster running locally in Apple VMs
- The Okteto platform (dashboard + build service + registry) running on it
- The oktetodo todo-list app (React frontend + Node API + database) deployed through the Okteto CLI
- A public-style HTTPS URL for the app, served from your laptop
Time: ~20 minutes, most of it waiting on downloads.
Prerequisites
- Apple silicon Mac (M1 or later)
- macOS 26 (Tahoe) or newer recommended. macOS 15 works for a single node with limitations.
- ~6 GB of free RAM for the cluster VM
- Homebrew installed
That’s it. You do not need Docker, a cloud provider, or an existing Kubernetes cluster. It runs fine alongside Docker Desktop if you have it - they’re independent stacks.
Step 1 - Install Apple’s container runtime
kiac builds on apple/container, Apple’s open-source container runtime that runs each workload in its own VM.
- Download the latest signed installer (
.pkg) from the releases page (1.1.0 or newer). - Double-click it and follow the installer (enter your password when prompted).
- Start the runtime and install the default Linux kernel:
container system start
container system kernel set --recommended
- Verify it can boot a VM:
container run --rm docker.io/library/alpine:3.20 uname -a
# → Linux ... aarch64 ...
If you see a Linux kernel line, the runtime works.
Step 2 - Install kiac
brew install saiyam1814/tap/kiac
kiac doctor
kiac doctor should report all green:
✓ macOS version
✓ apple/container CLI
✓ container system service running
✓ kubectl
✓ Apple silicon arm64
all good - run: kiac create cluster
kiac doctorneedskubectl. If you don’t have it:brew install kubernetes-cli.
Step 3 - Create a local Kubernetes cluster
kiac create cluster --name okteto --workers 0 --k8s-version 1.35 --cpus 4 --cp-memory 6G
--workers 0makes a single untainted node, so every Okteto pod schedules on it (lean for a laptop).--k8s-version 1.35keeps you inside Okteto 1.46’s officially supported range (1.33-1.35).- kiac automatically installs a LoadBalancer (
kiac-lb), a defaultStorageClass, and metrics-server.
Confirm the node is Ready and grab its IP - you’ll use it for the domain:
kubectl --context kiac-okteto get nodes -o wide
# NAME STATUS ROLES ... INTERNAL-IP
# kiac-okteto-control-plane Ready control-plane ... 192.168.64.3
Note the INTERNAL-IP (e.g. 192.168.64.3). We’ll turn it into a wildcard domain with nip.io: 192.168.64.3.nip.io resolves *.192.168.64.3.nip.io straight to that IP - no DNS setup needed.
Running more than one node? kiac routes all
type: LoadBalancertraffic (including Okteto’s ingress) through a single node it labelskiac.io/lb-primary=true. Use that node’s IP for the domain, not just any node’s:kubectl --context kiac-okteto get nodes -l kiac.io/lb-primary=true -o wideWith
--workers 0there’s only one node, so it’s the same IP either way.
Step 4 - Get a free Okteto license
Okteto self-hosted is free for up to 5 users with no license at all, and offers a free trial for up to 100 users for a month.
To get a trial license key:
- Go to okteto.com/signup and fill out the Self-Hosted Free Tier form.
- A license key is emailed to you automatically - no sales call required.
Keep the key handy for the next step. (See the license docs for details.)
Step 5 - Install Okteto with Helm
Add the chart repo:
helm repo add okteto https://charts.okteto.com
helm repo update
Create a values.yaml. Replace the license with yours and the IP with your node’s IP from Step 3. The replicaCount/replicas overrides pin every component to a single replica - ideal for a laptop trial.
# values.yaml
license: "PASTE-YOUR-LICENSE-KEY-HERE"
subdomain: "192.168.64.3.nip.io" # <node-ip>.nip.io
# One replica per component (laptop-friendly)
api:
replicaCount: 1
webhook:
replicaCount: 1
frontend:
replicaCount: 1
buildkit:
replicaCount: 1
hpa:
adapter:
replicaCount: 1
registry:
replicaCount: 1
autoscaler:
replicaCount: 1
sshAgent:
replicaCount: 1
defaultBackend:
replicaCount: 1
privateEndpoints:
replicaCount: 1
regcredsManager:
replicas: 1
ingress-nginx:
controller:
replicaCount: 1
okteto-nginx:
controller:
replicaCount: 1
This is the full Okteto platform - every feature is available. Single replicas don’t strip anything out; they just scale each component down to fit a laptop. That makes it a great way to try the complete product quickly.
Install and watch the pods come up (2-4 minutes on first pull):
helm install okteto okteto/okteto -n okteto --create-namespace -f values.yaml
kubectl -n okteto get pods -w
When everything is Running, confirm the ingress got your node IP, then reprint the dashboard URL and admin token from the install notes:
kubectl -n okteto get svc okteto-ingress-nginx-controller
# EXTERNAL-IP should equal your node IP
helm get notes okteto -n okteto
Open the dashboard URL (https://okteto.<node-ip>.nip.io) and accept the self-signed certificate to confirm the platform is live.
Step 6 - Log in with the Okteto CLI
Install the CLI:
brew install okteto
You need the admin token, which Okteto prints in the Helm install notes from Step 5. Reprint them any time:
helm get notes okteto -n okteto
The notes contain both the dashboard URL and a ready-to-run login command - copy the --token value from there:
Access your Okteto instance at https://okteto.192.168.64.3.nip.io/login#token=<TOKEN>
okteto context use https://okteto.192.168.64.3.nip.io --token <TOKEN> --insecure-skip-tls-verify
Run it, then confirm the context is active with a buildkit builder and a registry URL:
okteto context use https://okteto.192.168.64.3.nip.io \
--token <TOKEN> \
--insecure-skip-tls-verify
okteto context list
Step 7 - Deploy the oktetodo app
Clone the sample app and deploy it. Okteto reads okteto.yaml, builds the frontend and backend images with the in-cluster build service, pushes them to the in-cluster registry, and installs the three Helm charts (db, server, client).
git clone https://github.com/okteto/oktetodo
cd oktetodo
okteto deploy
The okteto.yaml in the repo does this:
build:
server:
context: server
client:
context: client
deploy:
- name: Deploy the DB
command: helm upgrade --install db db/chart
- name: Deploy the Node.js Backend
command: helm upgrade --install server server/chart --set image=${OKTETO_BUILD_SERVER_IMAGE}
- name: Deploy the React Frontend
command: helm upgrade --install client client/chart --set image=${OKTETO_BUILD_CLIENT_IMAGE}
Step 8 - Open the app
The app’s ingress is annotated with dev.okteto.com/generate-host: "true", so Okteto assigns it a public HTTPS host automatically. That single endpoint serves the React todo UI at / and the API at /todos.
Get the generated URL:
okteto endpoints
Then open it in your browser - you’ll get the todo list app, running end-to-end on your Mac. You can also hit the API directly:
curl -k https://<generated-host>/todos
Clean up
When you’re done, tear everything down:
kiac delete cluster --name okteto
To also stop the Apple runtime: container system stop.
Why this is nice
- Zero cloud. The whole platform - build service, registry, dashboard, ingress - runs in Apple VMs on your laptop.
- Real Kubernetes. kiac uses upstream kubeadm node images, so it behaves like a production cluster, not a toy.
- Free. No license needed for up to 5 users; the trial covers more.
- Disposable. One command to create, one to delete.
Keep going - Okteto is free for your team
You just ran the complete Okteto platform on your laptop. The same platform is free for up to 5 users, with no license - so you can keep using it for real work: give everyone production-like environments, spin up a preview for every pull request, and put dev, build, and deploy behind one CLI.
- Bring your team: grab a free license at okteto.com/signup
- Go deeper: Okteto docs
- On kiac: github.com/saiyam1814/kiac
Built something with kiac + Okteto? Share it back with the community - we’d love to see it.