This guide walks you through running EdgeKit locally and then deploying it to a k3s cluster.
- Docker ≥ 24 (with Compose v2)
- Git
git clone https://github.com/perspikapps/edgekit.git
cd edgekit./scripts/build.sh./scripts/start-local.shExpected output:
==> Starting edgekit stack (builds images if needed)…
[+] Building …
[+] Running 2/2
✔ Container edgekit-server Started
✔ Container edgekit-client Started
✅ edgekit is running!
MQTT broker: mqtt://localhost:1883
MQTT over WS: ws://localhost:9001
View logs: docker compose logs -f
Stop: ./scripts/stop-local.sh
Open a second terminal and subscribe to all topics:
docker run --rm --network host eclipse-mosquitto:2.0 \
mosquitto_sub -h localhost -t "edgekit/#" -vOnce the edge node's device services can reach real devices (Modbus/REST — see
client/res/), exported EdgeX Events arrive on edgekit/events:
edgekit/events {"apiVersion":"v3","id":"...","deviceName":"modbus-th-01","readings":[{"resourceName":"Temperature","value":"21.4"}],"tags":{"site":"edge-local-1"}}
The first start also bootstraps the embedded Postgres database, so the edge container takes longer to become ready than the broker.
./scripts/stop-local.sh- A k3s cluster (single node is fine for testing)
- Helm ≥ 3.14
kubectlconfigured for the cluster
helm install edgekit oci://ghcr.io/perspikapps/charts/edgekit \
--namespace edgekit \
--create-namespace \
--waithelm install edgekit ./helm/edgekit \
--namespace edgekit \
--create-namespace \
--waitkubectl -n edgekit get pods
# NAME READY STATUS RESTARTS
# edgekit-server-xxxxxxxxxx-xxxxx 1/1 Running 0
# edgekit-client-xxxxxxxxxx-xxxxx 1/1 Running 0
kubectl -n edgekit logs -f -l app.kubernetes.io/component=client
# [entrypoint] Initialising embedded Postgres ...
# core-metadata ... Service started ...
# app-export ... MQTT export ready ...helm upgrade edgekit ./helm/edgekit \
--namespace edgekit \
--set client.replicaCount=3helm upgrade edgekit ./helm/edgekit \
--namespace edgekit \
--set client.centralBrokerAddress=tcp://central.example.com:1883helm uninstall edgekit --namespace edgekit
kubectl delete namespace edgekitForward the WebSocket port to your local machine:
kubectl -n edgekit port-forward svc/edgekit-server 9001:9001Then connect any MQTT-over-WebSocket client to ws://localhost:9001.
Example using mosquitto_sub with WebSocket support:
docker run --rm --network host eclipse-mosquitto:2.0 \
mosquitto_sub -h localhost -p 9001 -t "edgekit/#" -vThe edge client is configured via client/env/edge.env and Helm
values.yaml. The most common knobs:
| Variable | Default | Description |
|---|---|---|
WRITABLE_PIPELINE_FUNCTIONS_MQTTEXPORT_PARAMETERS_BROKERADDRESS |
tcp://edgekit-server:1883 |
Central broker URL |
WRITABLE_PIPELINE_FUNCTIONS_MQTTEXPORT_PARAMETERS_TOPIC |
edgekit/events |
Central export topic |
WRITABLE_PIPELINE_FUNCTIONS_ADDTAGS_PARAMETERS_TAGS |
site=edge-site-001 |
Per-site identity stamp |
WRITABLE_STOREANDFORWARD_ENABLED |
true |
Offline buffering |
EDGEKIT_ENABLE_CORE_DATA |
false |
Optional local Event persistence |
See edge-operations.md for the full reference.