Skip to main content
Version: v3.9.0

Engine lifecycle

Operator guide for containerEngine and containerEngineUrl changes.

Engine values​

containerEnginePlatformcontainerEngineUrl
edgeletlinux onlyFixed unix:///run/edgelet/containerd.sock: not user-editable
dockerlinux, darwin, windowsDefault unix:///var/run/docker.sock (auto-set on engine change)
podmanlinux, darwin, windowsDefault unix:///run/podman/podman.sock (auto-set on engine change)

Change classes​

ClassKeysAction
Hotfrequencies, log level, controller URL, GPS, etc.SIGHUP reload in-process
WarmcontainerEngineUrl with same docker/podman engineReconnect socket: no restart
ColdcontainerEngineQuiesce + MS cleanup + pendingRestart + restart required

Never hot-switch containerEngine at runtime.

Cold engine change​

edgelet config --ce docker
# or PATCH /v1/system/config {"set":{"containerEngine":"docker"}}
edgelet system status | grep runtime.pendingRestart # true
sudo systemctl restart edgelet

After restart:

  • New engine is active (runtime.engine, runtime.engineReady)
  • Microservice spec rows in SQLite are kept; containers are recreated on the new engine
  • Images/volumes on the old engine are lost (not migrated)

Warm containerEngineUrl reload (docker/podman)​

edgelet config --cu unix:///var/run/docker.sock

On failure the daemon reverts YAML to the last-known-good URL and keeps the existing client.

Linux startup​

Thin edgelet daemon always execs the fat runtime at /var/lib/edgelet/data/current/bin/edgelet. The supervisor and engines run in fat only. Never in the thin wrapper.

EngineThin edgelet daemonFat runtime after exec
edgeletEnsureExtracted (if needed) → exec fatBootstrap embedded containerd
docker / podmanExec fat when already on disk; skip full extract if bundle presentConnect external socket (retry at boot)

First start on a node with no extracted bundle (any engine) runs EnsureExtracted once so fat exists on disk.

Switching away from edgelet stops orphaned embedded containerd before exec; the extract tree remains on disk.

External engine degraded mode​

  • Boot without socket: degraded + background recovery.
  • Recovery reads live config each attempt.
  • Never auto-fallback to embedded edgelet.

Status fields​

GET /v1/system/status includes:

  • runtime.engine
  • runtime.containerEngineUrl
  • runtime.pendingRestart
  • runtime.engineReady

Out of scope​

  • QoS classes (Guaranteed/Burstable/BestEffort)
  • Rootless edgelet
  • Engine migration of images/volumes between engines

Integration tests​

./test/engine-lifecycle/run-all.sh

See test/engine-lifecycle/README.md.

Related: Container engines

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