Skip to main content
Version: v3.8.0

Edgelet deployment

Production deployment topology for Edgelet on linux, darwin, and windows.

Installation, upgrade, rollback, and OTA readiness: see Installation.

Install script distribution

install.sh and uninstall.sh are self-contained monoliths. Online install, airgap staging, and GitHub Releases need only those scripts plus the platform binary (or install.sh --bin-path=…).

After install on linux, /usr/share/edgelet/ holds:

PathRole
install.sh, uninstall.shOTA lifecycle copies
edgelet-config.yaml.sampleDefault config template
edgelet-controller-ca.crt.sampleLab bootstrap CA sample

Init units and edgelet-shutdown are written directly to system paths at install time.

Product model

PlatformBinaryEmbedded enginecontainerEngineDefault engine
linuxThin wrapper (~30 MB) + fat in zstd embedYesedgelet, docker, podmanedgelet
darwinMonolithicNodocker, podmandocker
windowsMonolithic .exeNodocker, podmandocker

Linux thin path: /usr/local/bin/edgelet → lazy extract → /var/lib/edgelet/data/current/bin/edgelet (fat).

Prerequisites

PlatformRequirements
linuxRoot/sudo; Ubuntu 20.04+, RHEL 8+, Debian 11+ (or equivalent); network to Controller for online install
darwinAdmin for /usr/local/bin; Docker or Podman for containerEngine
windowsAdmin; Docker or Podman
edgelet engine (linux)No external container runtime
docker / podmanDocker 26.10+ or Podman 3.0+ on host

potctl contract

Orchestrators must not pass provision keys to install.sh.

  1. SSH to the edge host.
  2. Online: run install.sh on the remote (see Installation).
  3. Airgap: verify SHA256SUMS on the orchestrator → SCP binary → install.sh --airgap --bin-path=….
  4. Provision: SSH edgelet provision <key> (and edgelet config … as needed).

When deploying a local ControlPlane controller on a system fog, create that fog on Controller with isSystem: true so Edgelet can register the controller microservice after provision.

Daemon and systemd

Production linux uses the thin binary as the service entry point:

edgelet daemon # extract fat bundle if needed → exec runtime
systemctl start edgelet # ExecStart=/usr/local/bin/edgelet daemon

For docker or podman, systemd installs a drop-in After=docker.service (or podman). The daemon retries socket connection with backoff before staying in WARNING.

Embedded runtime layout (containerEngine: edgelet)

PathRole
/var/lib/edgelet/data/<hash>/Content-addressed fat bundle extract
data/currentSymlink to active hash
data/previousLast current before rotation (manual / coordinated rollback)

Operator CLI (edgelet ms, edgelet deploy, …) runs in the thin process and does not trigger extract.

Thin-binary and fat-bundle OTA: Installation.

Runtime engine selection

# /etc/edgelet/config.yaml
currentProfile: production
profiles:
production:
containerEngine: edgelet # linux default
containerEngineUrl: unix:///run/edgelet/containerd.sock
pruningFrequency: 24 # hours between image prune cycles
watchdogEnabled: true # orphan container cleanup
arch: auto
upgradeScanFrequency: 24 # hours between OTA readiness scans
containerEngineLinux extract?Host requirement
edgeletYes (first daemon start)None
dockerNoDocker socket
podmanNoPodman socket

Verify:

edgelet --version
edgelet system version -o json | jq '{embeddedEngine, allowedEngines, containerEngine}'

Full config reference: Configuration.

EdgeletAPI PKI

Daemon creates /etc/edgelet/edgelet-api and TLS material on first start. CLI uses bearer token + edgeletapi-ca.crt.

Provisioning

edgelet provision <provisioning-key>
edgelet system status
edgelet deprovision

In Controller YAML you still declare kind: Agent. In UI prose the enrolled host is an Edgelet node.

Container image (linux)

ItemValue
Imageghcr.io/datasance/edgelet:1.0.0 (multi-arch manifest)
Entrypointedgelet daemon
EnvEDGELET_DAEMON=container
Volumes/var/lib/edgelet, /etc/edgelet (optional override)
OTAOrchestrator replaces image tag (not install.sh)

Architectures (arch)

NamearchId
auto0
amd641
arm642
riscv643
arm (32-bit, armv7)4

Config arch values: auto, amd64, arm64, arm, riscv64.

See also

Group 3See anything wrong with the document? Help us improve it!