Edge computing standards
Criteria verified as of August 2026. Re-verify on the web before committing to anything (§8).
1. Scope and triggers
Covers operating compute on nodes you cannot walk up to: deciding whether the edge is
necessary, the topology, fleet management and safe updating, disconnected
operation, observability over an intermittent link, the security of a node that is
physically in someone else's hands, and provisioning without human intervention.
Guiding principle: the edge is not defined by distance, but by constraint. A
system is an edge system when at least one of these four things forces it to be, and you must be able to say
which:
- Latency: there is a millisecond budget that the round trip to the centre does not meet.
- Bandwidth or upstream cost: generating the data is cheap, transporting it is not.
- Sovereignty or regulation: the data cannot leave a country, a building or a network.
- Survival without connectivity: the site must keep working with the link down.
If none of the four applies, it is not edge: it is a distributed monolith, and you have
bought all the difficulty of fleet management with none of its advantages. That is the
first question in any design and the one most often skipped.
Second thesis, which orders §3.2 onwards: the cost of the edge is not the hardware, it is the
fleet. One node is easy. Three thousand nodes with different firmware, bad links, drifting
clocks, certificates about to expire and no console are an operations problem that
is only solved with automation tested before you need it.
Triggers: "does this go at the edge or at the centre?", "latency budget", "we cannot upload
all that video", "it has to work without a line", device fleet, A/B update,
dual partition, automatic rollback, rpm-ostree, bootc, greenboot, Mender, RAUC,
SWUpdate, .swu, balenaOS, wave rollout, kill switch, k3s, MicroShift, KubeEdge,
Akri, "do we need Kubernetes here?", store-and-forward, local telemetry queue,
reconciliation after reconnect, clock drift, TPM, secure element, Secure Boot, measured
boot, LUKS, "the same key on every device", zero-touch provisioning,
remote attestation, "the certificate expired while it was powered off", inference at the edge.
Not applicable: see embedded-iot-standards (the microcontroller and
bare-metal or RTOS firmware — if there is no general-purpose operating system with a package
manager and containers, it is theirs; here from the Linux SBC/gateway upwards.
The A/B image boundary, which both could claim: the mechanism is chosen by what is
underneath, not by where the box is — firmware image (MCUboot, RAUC, SWUpdate, Mender,
hawkBit, slots with a rollback counter) is theirs; full OS image (rpm-ostree, bootc,
greenboot, balenaOS) belongs here. What does not change sides: the campaign —waves, kill
switch, percentage and stop criteria across thousands of nodes— belongs here whatever the
mechanism, because it is a fleet problem, not a board problem),
ot-ics-security-standards (the industrial plant: PLC, SCADA, fieldbus protocols,
Purdue model, functional safety — an edge node in a factory falls under their
constraints, and theirs win over the ones here),
kubernetes-standards (the central cluster and all of Kubernetes as a platform: manifests,
Helm, GitOps, admission policies, CNI, operators — here only the criteria for whether to put
Kubernetes at the edge and which distribution), podman-systemd-containers-standards (the
real alternative to Kubernetes at the edge: Quadlet units, containers under systemd,
podman auto-update — the mechanism is theirs, here the decision to use it),
os-provisioning-standards (installing the OS: Kickstart, image, bootc install, PXE — here
the nuance that at the edge nobody is standing in front of it and installation arrives by USB or by
zero-touch provisioning), rhel-fedora-standards (rpm-ostree, bootc and image mode
as a Red Hat ecosystem; here as an A/B update pattern),
iac-standards (Ansible/Terraform and the code that configures; careful: Ansible's push model
does not work against a node that is powered off or behind NAT — see §3.2),
local-inference-standards (the model and its engine: quantisation, memory, endpoint — here
only how it reaches and is updated across the fleet), gpu-computing-standards (the accelerator),
observability-standards (OTel, Prometheus, alerts and their design; here the nuance of the
intermittent link and cost per byte), networking-standards, vpn-standards (the tunnel back
home: WireGuard, meshes), dns-standards, firewall-policy-standards,
load-balancing-standards, caching-cdn-standards (the CDN edge and its functions: if
the problem is serving HTTP content closer to the reader, it is theirs, not this skill's),
gaming-infrastructure-standards (match servers near the player: the generic edge platform
belongs here; session orchestration, matchmaking and the game fleet
are theirs),
identity-access-management-standards (the human IdP; here machine identity),
cryptography-pki-standards (PKI, ACME, key custody and rotation: the mechanics are
theirs, here the problem of rotating against a disconnected node),
secrets-management-standards (where the secret lives), endpoint-security-standards (the
managed workstation), macos-fleet-standards (Apple fleet with MDM),
linux-hardening-standards and selinux-standards (OS baseline),
container-runtime-security-standards (seccomp, escape, --privileged),
cmdb-inventory-standards (the fleet inventory as a record),
bcdr-standards (RTO/RPO and continuity), backup-recovery-standards (do you back up an edge
node? Almost never: you rebuild it — see §3.5), datacenter-facilities-standards (the
central plant), finops-standards (cost), homelab-standards (proportionality),
privacy-engineering-standards (personal data captured at the edge: minimisation at source),
grc-compliance-standards, wireless-standards (the radio access link),
mobile-standards (the phone app).
2. Default decisions
Verify on the web the version, project status and licence read raw before committing
to anything (§8).
| Decision |
Default |
Reason / justifiable alternative |
| Edge or centre? |
Centre, unless one of the four constraints in §1 is named |
The edge multiplies the operating cost of every decision by N. You pay it only with a written reason |
| Orchestration on the node |
systemd + containers (Podman/Quadlet) |
See §2.1. Kubernetes at the edge only when its model brings something systemd does not |
| Lightweight Kubernetes, if needed |
k3s |
Apache-2.0 (read raw), CNCF project at Sandbox level since 2020, certified distribution, single binary. Alternatives: MicroShift if the site is already Red Hat and the subscription is paid for; KubeEdge (graduated in the CNCF) if its cloud-edge model with devices is genuinely needed |
| Update model |
Full A/B image with automatic rollback |
See §3.2. Updating by packages on an unreachable node is how a fleet is lost |
| Base system |
Immutable, transactional root filesystem (bootc/rpm-ostree, or A/B image with RAUC/SWUpdate/Mender) |
A node that can be modified live diverges, and divergence across a fleet is undiagnosable |
| Update gate |
Automatic health check that decides commit or revert (greenboot or your own equivalent) |
See §3.2: without a health check, A/B is not automatic rollback, it is just two partitions |
| Node identity |
One cryptographic identity per device, anchored in a TPM or secure element |
See §3.6. The shared credential is the design failure of this domain |
| Encryption at rest |
Yes, with the key sealed to the boot state (TPM) |
The attacker holds the device; the disk comes out with a screwdriver |
| Telemetry |
Aggregated and store-and-forward with a bounded local queue |
See §3.4. Sending everything raw is expensive and gets lost anyway when the link drops |
| Connectivity back home |
The node initiates the outbound connection; never an exposed inbound port |
The node is behind NAT, behind CGNAT or behind someone else's firewall. It also exposes no surface |
| Provisioning |
Zero-touch with attestation: the device identifies itself and receives its configuration |
Nobody with technical training is going to be standing there |
2.1 Kubernetes at the edge: when it is over-engineering
An edge node with four containers does not need a control plane. Kubernetes
solves scheduling across nodes, and at a single-node edge site there is nothing to
schedule. What it brings —scheduler, controllers, declarative API— costs memory, CPU,
a control plane that also has to be updated and a new failure mode (a corrupt etcd
at a site with no hands is a trip).
- systemd + containers is enough when: one node per site, a fixed set of services,
ordered startup with dependencies, restart on failure, and updating by whole-system
image.
systemd already gives dependencies, retries, watchdog, sockets and
timers; Quadlet adds declarative containers. It is less software to
maintain, and at the edge that is the metric that rules.
- Kubernetes at the edge is justified when: there are several nodes per site with
real rescheduling among them, the team already operates Kubernetes and the marginal cost of
learning something else exceeds that of bringing it in, or you need the same declarative model
end to end with GitOps all the way to the edge.
- Honest check: if the answer to "what would the scheduler do here?" is "nothing,
there is only one node", the answer is systemd.
- Project status, verified (re-verify, §8): k3s Apache-2.0, CNCF Sandbox,
releases aligned with Kubernetes versions (v1.36 observed in 2026). MicroShift
Apache-2.0 in the repository, but the Red Hat build is consumed by subscription (Red
Hat Device Edge / OpenShift) and is coupled by a version matrix to that of RHEL — that
is an architectural constraint, not a commercial detail. KubeEdge graduated in the
CNCF. Akri (exposing field devices —IP cameras, USB— as Kubernetes resources)
is still in CNCF Sandbox with recent activity, but it is a small project: assess
its maintenance pace before depending on it.
3. Structure and conventions
3.1 Topology: four tiers and who decides what
- Device: sensor, camera, PLC, SBC. Minimal resources, sometimes with no general OS.
- Far edge: the node in the shop, the substation, the truck, the operating theatre.
One or a few units, a link owned by someone else, zero technical staff. It is the tier that
defines this document.
- Near edge: a regional cabinet or small room with several nodes, a decent link
and perhaps schedulable physical access.
- Region / centre: where the control plane, the history and the trained model live.
Split rules that avoid most mistakes:
- The control plane lives at the centre; the data plane, at the edge. The edge executes;
it does not decide global policies.
- Every tier must work if the one above disappears, with declared degradation. If the
edge stops working without the centre, it was not an edge architecture.
- Data is reduced as early as possible. Filtering, aggregating and discarding on the node is the
lever for cost, privacy and bandwidth all at once. Uploading raw data "just in case" is the
most expensive decision made in this domain.
3.2 Updating: A/B, health and waves
The design requirement is this: a bad update cannot require someone to drive
to the node. Everything else follows from that.
Mandatory pattern:
- Two slots (A/B) or transactional root: the new image is written to the inactive slot
while the active one keeps serving. Reboot into the new slot.
- Health check after boot, with criteria specific to the service (do the services
start? is there network? does the control plane respond? is the disk healthy?).
- Automatic commit or revert: if the check does not pass within a deadline, the
bootloader returns to the previous slot on its own. Without this step, A/B is not automatic
rollback: it is two partitions and a phone call.
- The image is signed and verified before being written. An update channel without
signature verification is remote code execution with home delivery.
- Atomic update, resilient to power loss: cut the power halfway through
writing and the node has to boot. That is the test case, not an unforeseen event.
Tools, with licence read raw (§8): bootc and rpm-ostree (Apache-2.0,
container boot image model, with greenboot as the health gate in the Red Hat
family), RAUC (LGPL-2.1, bundles and slots, widely used with Yocto), SWUpdate
(GPL-2.0-only, with an LGPL-2.1 control library and Lua extensions under MIT; .swu
format), Mender (client and server Apache-2.0 in their repositories, with a commercial
offering on top — verify which edition is being deployed), balenaOS/balena (open OS
with a commercial balenaCloud platform: what locks you in is not the OS licence, it is the service).
Fleet rollout:
- In waves, always. A canary ring (dozens of representative nodes, not the
best ones), then a percentage, then the rest. Between rings, enough observation time
for slow failures to show up: memory leaks, disk filling up,
certificates, weekly reboot.
- Stop switch (kill switch) that halts the rollout in progress. And it gets tested.
- The cohort is defined by what differentiates the nodes: hardware model, source
version, country, link type. A "homogeneous" fleet never is.
- Update window per site: a node in an operating theatre or in a checkout till is not
rebooted at just any hour.
- Nodes that have been off for months: the system must support jumping several versions
at once, or declare and enforce a minimum version with a recovery path. This
case always happens and is almost never tested.
- The push does not work. An Ansible-style model against nodes that are powered off, behind NAT or with a
changing IP does not arrive. The node polls and pulls its desired state; the centre publishes.
3.3 Disconnected operation and reconciliation
- You explicitly declare what works without the link and what does not. Without that document, the
behaviour during an outage is whatever comes out, and it will come out in production.
- Bounded autonomy: how long the node can operate alone (days, weeks), and what happens when
that runs out (does it degrade? does it stop? does it carry on with stale data?). An authorisation cache that expires
after an hour turns a network outage into a service outage.
- Reconciliation on return: you must decide the conflict resolution rule —
last writer wins, the centre wins, union, or manual resolution with an exception queue.
"It'll sync eventually" is not a rule.
- Idempotency and retries: everything the node sends will be retried; without idempotency
keys, transactions get duplicated on reconnect.
- The clock lies. Without NTP for days the node drifts; events arrive with
impossible stamps, certificates look expired and signatures fail. Monotonic clocks
are used to measure intervals, the event is stamped with local time and
with receipt time, and ordering is by sequence as well as by time.
- Certificates: the case that breaks fleets is the node that was disconnected when it was due to
rotate. You design long lifetimes for the anchor identity, early and well-anticipated rotation
for service ones, and a recovery path that does not depend on the expired
certificate. Check the root CA's expiry before deploying, not after.
3.4 Observability over an intermittent link and cost per byte
- Agent with a persistent, bounded local queue (store-and-forward): it stores while there is no
link and sends on return. Bounded is the key word: an unbounded queue fills the disk
and takes the node down — at exactly the worst moment. On reaching the limit it discards by declared
policy (oldest first, or lowest priority).
- Aggregate on the node: percentiles and counters per interval, not raw events. The cost
of telemetry per node is multiplied by the size of the fleet; at 5,000 nodes, a few extra KB
per second are a bill.
- Sampling and levels: very reduced normal logging, with the ability to raise the detail on
demand for a specific node during an investigation. That lever is what replaces
the console you do not have.
- Alert on the fleet, not on the node. Five thousand nodes generate individual failures
constantly; the useful alert is "4 % of cohort X has not reported since yesterday's
rollout". A downed node is a ticket, not a page.
- Silence is a signal, and it has to be told apart: a powered-off node, a dropped link, a dead agent
and a stolen node all look the same from the centre. A heartbeat carrying the cause of last disconnection
when it returns resolves most of it.
- Bricked detection: an explicit metric of nodes that do not come back after an
update, with a threshold that triggers the kill switch from §3.2.
3.5 Disposable node
- The node is not backed up: it is rebuilt. Its state splits into three: image (comes
from the registry), configuration (comes from the control plane), local data (the only
irreplaceable part, and therefore synced to the centre or its loss explicitly accepted).
- Replacing a node must be a field procedure someone untrained can carry out:
unplug, plug in the new one, power it on. Everything else is done by zero-touch
provisioning (§3.6). If replacing it requires an engineer, the fleet does not scale.
- Decommissioning: a retired node has its identity and credentials revoked and its storage
wiped or destroyed. A retired device still on the trust list is an
open door with the keys left in.
3.6 Security: the attacker holds the device
This is the threat model change that separates the edge from the centre. There is no guard, no
door, no CCTV. You have to assume full physical access, with time and tools.
- One cryptographic identity per device, not shared. The single credential for
the whole fleet is the classic design failure of this domain: compromising one single device —
bought second-hand, stolen, or simply opened— hands over the entire fleet, and there is no
possible revocation without touching every node. Per-device identity means that
compromising one costs one, and revoking it is a routine operation.
- Hardware trust anchor: TPM 2.0 or secure element. The private key is generated
inside and never leaves. A private key in a file on disk is a public key with
extra steps.
- Secure and measured boot: UEFI Secure Boot with the owner's keys (not just the
manufacturer's) so that only signed software boots, and measured boot into TPM PCRs
so that the boot state is checkable.
- Encryption at rest with the key sealed to the boot state: LUKS with the key released
by the TPM only if the measurements match. That way the extracted disk cannot be read and a tampered
boot does not open the volume. Without sealing, encryption on an unattended node protects little:
the key is on the same device.
- Remote attestation: before handing over credentials or configuration, the centre checks
that the node is who it says it is and is in the expected state. That is what turns
zero-touch provisioning into something other than "handing out credentials to whoever asks".
- Ephemeral, least-privilege credentials: the node obtains short-lived tokens for
what it needs. Never a broad write credential against the central system; the node
pushes its telemetry and pulls its configuration, and neither of the two permissions
requires permissions over other nodes.
- Minimal surface: no unnecessary listening services, no permanent remote access
enabled by default, serial console and debug (JTAG/UART) disabled or protected in
production.
- Tamper detection: opening sensors, seals, and the corresponding alert.
And the uncomfortable operational rule: a node suspected of tampering is revoked first and
investigated afterwards.
- The update channel is the fleet's most valuable asset. Whoever controls it executes
code on every node. Image signing with custodied keys, verification on the
device, and the signing process treated as a critical system
(
cryptography-pki-standards, secrets-management-standards).
3.7 Inference at the edge
- It is a specific case of the four constraints in §1, and almost always of two: latency
(you cannot wait for the centre) and bandwidth (the video does not fit in the uplink).
- The model is a fleet artifact, not a loose file: it is versioned, signed,
distributed through the same channel as everything else, and can be rolled back just like the software.
A model change is a ringed rollout, not an SSH copy.
- You decide what goes up: prediction yes, raw data almost never. That is where both the saving and
the minimisation demanded by
privacy-engineering-standards live.
- Model drift at the edge is harder to see than at the centre, because labels
rarely come back. Monitoring and retraining belong to
mlops-standards; here only the distribution and rollback mechanism.
- The engine, quantisation and memory sizing belong to
local-inference-standards.
7. Long-term sustainability and prohibitions
§4 (quality and testing) and §6 (performance and operability) are deliberately omitted: in this
domain testing is that of the language skill and operability is spread between §2 and
§3, where it is actually decided. The catalogue's canonical numbering is kept so that the cross
references to §7 and §8 point to what they say.
The horizon is long and that is the problem. An edge node lives for years in places nobody
returns to. Consequences that are decided before buying:
- Hardware and OS end of life dated from day one, and a minimum supported version
that is enforced. A fleet with six generations of everything is undeployable.
- The expiry of certificates and of the root CA is planned at the scale of the device's
lifetime, not the project's.
- A defined and demonstrated security update cadence: if you cannot patch a
critical CVE across the whole fleet within a declared deadline, that deadline is the real risk, not whatever
the policy says.
- Vendor exit: if fleet management depends on someone else's cloud (balenaCloud,
a subscription, or a proprietary service), you document how control of the devices is
recovered if it disappears. Without that answer, the fleet is a hostage.
Prohibitions:
- ❌ One credential, key or certificate shared across the whole fleet.
- ❌ Updating live via the package manager on an unreachable node, with no alternative
slot and no rollback.
- ❌ A/B without an automatic health check that reverts. It is half the mechanism.
- ❌ Deploying to the whole fleet at once. Rings or nothing.
- ❌ An update channel without a signature verified on the device.
- ❌ An exposed inbound port on the node, or permanent remote access enabled by default.
- ❌ A telemetry queue with no size limit. It fills the disk and takes the node down.
- ❌ Uploading raw data by default without having calculated the upload cost or the
minimisation.
- ❌ Assuming the node's clock is correct, or ordering events only by their timestamp.
- ❌ Encryption at rest with the key on the disk itself on an unattended machine.
- ❌ Putting Kubernetes on a single-node site without being able to say what it schedules.
- ❌ Decommissioning a node without revoking its identity and without wiping or destroying its storage.
- ❌ Calling "edge" a deployment that meets none of the four constraints in §1.
- ❌ Stating the licence or maturity status of k3s, MicroShift, KubeEdge, Akri, Mender,
RAUC, SWUpdate or balenaOS from memory. Several change commercial model (§8).
(The separate "quality and testing" and "performance" sections are deliberately omitted:
in this domain the test is the ringed rollout with automatic revert (§3.2) and
capacity is measured as telemetry cost and autonomy without a link (§3.3–3.4). Separating them
would duplicate content without adding criteria.)
8. Mandatory web verification
Before committing to any data in this document:
- Licences read raw — result of this verification (August 2026):
- k3s:
LICENSE on master → Apache-2.0.
- MicroShift:
LICENSE on main → Apache-2.0 in the repository; the supported
Red Hat build requires a subscription and is coupled by a version matrix to
RHEL. Distinguish repository from product.
- Akri:
LICENSE on main → Apache-2.0.
- bootc:
LICENSE-APACHE present → Apache-2.0 (verify whether it is dual with MIT).
- RAUC:
COPYING → LGPL-2.1.
- SWUpdate:
COPYING → GPL-2.0; the README itself states: "SWUpdate is released
under GPLv2. A library to control SWUpdate is part of the project and it is released under
LGPLv2.1", with Lua extensions under MIT.
- Mender:
LICENSE of mender and of mender-server → Apache-2.0 (Northern.tech AS);
there is an overlaid commercial offering — verify the specific edition.
- balenaOS: declared gap. The
LICENSE of a board repository
(balena-raspberrypi) is Apache-2.0, but the licence file of
meta-balena has not been located on the paths tried (master and main return 404). Read it before
stating the OS licence, and bear in mind that the real lock-in is balenaCloud, which is
a commercial service, not the licence.
- KubeEdge: declared gap — its licence file was not read in this pass.
- Status and maturity: verified that k3s is in CNCF Sandbox (accepted in 2020, with
the maintainers stating their intention to promote it), KubeEdge is graduated in
the CNCF, and Akri is still in Sandbox since 2021 with recent activity (commits and
a release in July–August 2026). Re-verify on
cncf.io and in the landscape: the
levels change and the press does not always cover it.
- Versions: k3s follows Kubernetes versions (v1.36.x observed); check which
Kubernetes version it supports and until when. bootc, RAUC, Mender and SWUpdate are verified
through the repository's releases Atom feed.
api.github.com unauthenticated returns 403;
use the Atom feeds.
- MicroShift compatibility matrix with RHEL: it changes per version and is an architectural
constraint. Consult Red Hat's documentation before committing to a version.
- Hardware and secure boot: the availability of TPM 2.0, of Secure Boot with your own
keys and of LUKS sealing depends on the specific board. It is verified against the
real model before designing on top of it; on many SBCs it is absent or unusable.
- CVEs in the update channel and the lightweight control plane: triage with CVSS + EPSS +
KEV. A CVE in the update agent is the worst possible case for this architecture.
- Figures: no "edge computing" market number, typical latency or bandwidth
saving is written without a source and methodology. The latency budget and the
upload cost are calculated with the project's data, not with an industry statistic.
If the web contradicts this document, the web wins — flag the discrepancy.
1---2name: edge-computing-standards3description: Computing on nodes you cannot walk up to — fleet operations for edge sites and devices under an intermittent link. Use when deciding whether a workload actually belongs at the edge (latency budget, upstream bandwidth cost, data residency, offline survival) or is just a distributed monolith, designing an A/B dual-partition image update with automatic rollback and a health check gate (rpm-ostree, bootc, greenboot, balenaOS), rolling an update across thousands of nodes in waves with a kill switch, running a lightweight Kubernetes at the edge (k3s, MicroShift, KubeEdge, Akri) or deciding that systemd plus Podman Quadlet units are enough, store-and-forward telemetry, metric downsampling and egress cost per node, eventual reconciliation and conflict resolution after a reconnect, giving each node its own identity instead of one shared fleet credential, UEFI Secure Boot and measured boot on an unattended node, LUKS full-disk encryption where the attacker physically holds the device, zero-touch onboarding and remote a4---56# Edge computing standards78Criteria verified as of **August 2026**. Re-verify on the web before committing to anything (§8).910## 1. Scope and triggers1112Covers **operating compute on nodes you cannot walk up to**: deciding whether the edge is13necessary, the topology, fleet management and safe updating, disconnected14operation, observability over an intermittent link, the security of a node that is15physically in someone else's hands, and provisioning without human intervention.1617**Guiding principle**: **the edge is not defined by distance, but by constraint.** A18system is an edge system when at least one of these four things forces it to be, and you must be able to say19which:20211. **Latency**: there is a millisecond budget that the round trip to the centre does not meet.222. **Bandwidth or upstream cost**: generating the data is cheap, transporting it is not.233. **Sovereignty or regulation**: the data cannot leave a country, a building or a network.244. **Survival without connectivity**: the site must keep working with the link down.2526**If none of the four applies, it is not edge: it is a distributed monolith**, and you have27bought all the difficulty of fleet management with none of its advantages. That is the28first question in any design and the one most often skipped.2930**Second thesis, which orders §3.2 onwards**: **the cost of the edge is not the hardware, it is the31fleet.** One node is easy. Three thousand nodes with different firmware, bad links, drifting32clocks, certificates about to expire and no console are an operations problem that33is only solved with automation tested before you need it.3435Triggers: "does this go at the edge or at the centre?", "latency budget", "we cannot upload36all that video", "it has to work without a line", device fleet, A/B update,37dual partition, automatic *rollback*, `rpm-ostree`, `bootc`, `greenboot`, Mender, RAUC,38SWUpdate, `.swu`, balenaOS, wave rollout, *kill switch*, k3s, MicroShift, KubeEdge,39Akri, "do we need Kubernetes here?", *store-and-forward*, local telemetry queue,40reconciliation after reconnect, clock drift, TPM, secure element, Secure Boot, measured41boot, LUKS, "the same key on every device", zero-touch provisioning,42remote attestation, "the certificate expired while it was powered off", inference at the edge.4344**Not applicable**: see `embedded-iot-standards` (**the microcontroller and45bare-metal or RTOS firmware** — if there is no general-purpose operating system with a package46manager and containers, it is theirs; here from the Linux SBC/gateway upwards.47**The A/B image boundary, which both could claim**: the mechanism is chosen by what is48underneath, not by where the box is — **firmware image** (MCUboot, RAUC, SWUpdate, Mender,49hawkBit, slots with a rollback counter) is theirs; **full OS image** (rpm-ostree, bootc,50greenboot, balenaOS) belongs here. What does **not** change sides: the **campaign** —waves, *kill51switch*, percentage and stop criteria across thousands of nodes— belongs here whatever the52mechanism, because it is a fleet problem, not a board problem),53`ot-ics-security-standards` (**the industrial plant**: PLC, SCADA, fieldbus protocols,54Purdue model, functional safety — an edge node in a factory falls under **their**55constraints, and theirs win over the ones here),56`kubernetes-standards` (**the central cluster and all of Kubernetes as a platform**: manifests,57Helm, GitOps, admission policies, CNI, operators — here only the criteria for **whether** to put58Kubernetes at the edge and which distribution), `podman-systemd-containers-standards` (**the59real alternative to Kubernetes at the edge**: Quadlet units, containers under systemd,60`podman auto-update` — the mechanism is theirs, here the decision to use it),61`os-provisioning-standards` (**installing the OS**: Kickstart, image, `bootc install`, PXE — here62the nuance that at the edge nobody is standing in front of it and installation arrives by USB or by63zero-touch provisioning), `rhel-fedora-standards` (**`rpm-ostree`, `bootc` and *image mode*64as a Red Hat ecosystem**; here as an A/B update pattern),65`iac-standards` (Ansible/Terraform and the code that configures; **careful: Ansible's *push* model66does not work against a node that is powered off or behind NAT — see §3.2**),67`local-inference-standards` (**the model and its engine**: quantisation, memory, endpoint — here68only how it reaches and is updated across the fleet), `gpu-computing-standards` (the accelerator),69`observability-standards` (**OTel, Prometheus, alerts and their design**; here the nuance of the70intermittent link and cost per byte), `networking-standards`, `vpn-standards` (**the tunnel back71home**: WireGuard, meshes), `dns-standards`, `firewall-policy-standards`,72`load-balancing-standards`, `caching-cdn-standards` (**the CDN edge and its functions**: if73the problem is serving HTTP content closer to the reader, it is theirs, not this skill's),74`gaming-infrastructure-standards` (**match servers near the player**: the generic edge platform75belongs here; session orchestration, matchmaking and the game fleet76are theirs),77`identity-access-management-standards` (the human IdP; here **machine** identity),78`cryptography-pki-standards` (**PKI, ACME, key custody and rotation**: the mechanics are79theirs, here the problem of rotating against a disconnected node),80`secrets-management-standards` (where the secret lives), `endpoint-security-standards` (the81managed workstation), `macos-fleet-standards` (Apple fleet with MDM),82`linux-hardening-standards` and `selinux-standards` (OS baseline),83`container-runtime-security-standards` (seccomp, escape, `--privileged`),84`cmdb-inventory-standards` (**the fleet inventory** as a record),85`bcdr-standards` (RTO/RPO and continuity), `backup-recovery-standards` (**do you back up an edge86node? Almost never: you rebuild it — see §3.5**), `datacenter-facilities-standards` (the87central plant), `finops-standards` (cost), `homelab-standards` (proportionality),88`privacy-engineering-standards` (personal data captured at the edge: minimisation at source),89`grc-compliance-standards`, `wireless-standards` (the radio access link),90`mobile-standards` (the phone app).9192## 2. Default decisions9394> Verify on the web the version, project status and **licence read raw** before committing95> to anything (§8).9697| Decision | Default | Reason / justifiable alternative |98|---|---|---|99| Edge or centre? | **Centre**, unless one of the four constraints in §1 is named | The edge multiplies the operating cost of every decision by N. You pay it only with a written reason |100| Orchestration on the node | **systemd + containers (Podman/Quadlet)** | See §2.1. Kubernetes at the edge only when its model brings something systemd does not |101| Lightweight Kubernetes, if needed | **k3s** | **Apache-2.0** (read raw), **CNCF project at Sandbox level** since 2020, certified distribution, single binary. Alternatives: **MicroShift** if the site is already Red Hat and the subscription is paid for; **KubeEdge** (**graduated in the CNCF**) if its cloud-edge model with devices is genuinely needed |102| Update model | **Full A/B image with automatic *rollback*** | See §3.2. Updating by packages on an unreachable node is how a fleet is lost |103| Base system | **Immutable, transactional root filesystem** (`bootc`/`rpm-ostree`, or A/B image with RAUC/SWUpdate/Mender) | A node that can be modified live diverges, and divergence across a fleet is undiagnosable |104| Update gate | **Automatic health check that decides commit or revert** (`greenboot` or your own equivalent) | See §3.2: without a *health check*, A/B is not automatic *rollback*, it is just two partitions |105| Node identity | **One cryptographic identity per device**, anchored in a TPM or secure element | See §3.6. The shared credential is **the** design failure of this domain |106| Encryption at rest | **Yes, with the key sealed to the boot state (TPM)** | The attacker holds the device; the disk comes out with a screwdriver |107| Telemetry | **Aggregated and *store-and-forward* with a bounded local queue** | See §3.4. Sending everything raw is expensive and gets lost anyway when the link drops |108| Connectivity back home | **The node initiates the outbound connection**; never an exposed inbound port | The node is behind NAT, behind CGNAT or behind someone else's firewall. It also exposes no surface |109| Provisioning | **Zero-touch with attestation**: the device identifies itself and receives its configuration | Nobody with technical training is going to be standing there |110111### 2.1 Kubernetes at the edge: when it is over-engineering112113**An edge node with four containers does not need a control plane.** Kubernetes114solves **scheduling across nodes**, and at a single-node edge site there is nothing to115schedule. What it brings —scheduler, controllers, declarative API— costs memory, CPU,116a control plane that also has to be updated and a new failure mode (a corrupt `etcd`117at a site with no hands is a trip).118119- **systemd + containers is enough** when: one node per site, a fixed set of services,120 ordered startup with dependencies, restart on failure, and updating by whole-system121 image. `systemd` already gives dependencies, retries, *watchdog*, sockets and122 timers; Quadlet adds declarative containers. **It is less software to123 maintain, and at the edge that is the metric that rules.**124- **Kubernetes at the edge is justified** when: there are several nodes per site with125 real rescheduling among them, the team already operates Kubernetes and the marginal cost of126 learning something else exceeds that of bringing it in, or you need the same declarative model127 end to end with GitOps all the way to the edge.128- **Honest check**: if the answer to *"what would the scheduler do here?"* is *"nothing,129 there is only one node"*, the answer is systemd.130- **Project status, verified** (re-verify, §8): **k3s** Apache-2.0, CNCF Sandbox,131 releases aligned with Kubernetes versions (v1.36 observed in 2026). **MicroShift**132 Apache-2.0 in the repository, but **the Red Hat build is consumed by subscription** (Red133 Hat Device Edge / OpenShift) and is **coupled by a version matrix to that of RHEL** — that134 is an architectural constraint, not a commercial detail. **KubeEdge** graduated in the135 CNCF. **Akri** (exposing field devices —IP cameras, USB— as Kubernetes resources)136 is still in **CNCF Sandbox** with recent activity, but it is a small project: assess137 its maintenance pace before depending on it.138139## 3. Structure and conventions140141### 3.1 Topology: four tiers and who decides what142143- **Device**: sensor, camera, PLC, SBC. Minimal resources, sometimes with no general OS.144- **Far edge**: the node in the shop, the substation, the truck, the operating theatre.145 One or a few units, a link owned by someone else, zero technical staff. **It is the tier that146 defines this document.**147- **Near edge**: a regional cabinet or small room with several nodes, a decent link148 and perhaps schedulable physical access.149- **Region / centre**: where the control plane, the history and the trained model live.150151**Split rules that avoid most mistakes**:152153- **The control plane lives at the centre; the data plane, at the edge.** The edge executes;154 it does not decide global policies.155- **Every tier must work if the one above disappears**, with declared degradation. If the156 edge stops working without the centre, it was not an edge architecture.157- **Data is reduced as early as possible.** Filtering, aggregating and discarding on the node is the158 lever for cost, privacy and bandwidth all at once. Uploading raw data "just in case" is the159 most expensive decision made in this domain.160161### 3.2 Updating: A/B, health and waves162163**The design requirement is this: a bad update cannot require someone to drive164to the node.** Everything else follows from that.165166Mandatory pattern:1671681. **Two slots (A/B)** or transactional root: the new image is written to the inactive slot169 while the active one keeps serving. Reboot into the new slot.1702. **Health check after boot**, with criteria specific to the service (do the services171 start? is there network? does the control plane respond? is the disk healthy?).1723. **Automatic commit or revert**: if the check does not pass within a deadline, the173 bootloader returns to the previous slot on its own. **Without this step, A/B is not automatic174 *rollback*: it is two partitions and a phone call.**1754. **The image is signed and verified** before being written. An update channel without176 signature verification is remote code execution with home delivery.1775. **Atomic update, resilient to power loss**: cut the power halfway through178 writing and the node has to boot. That is the test case, not an unforeseen event.179180Tools, with licence **read raw** (§8): **bootc** and **rpm-ostree** (Apache-2.0,181container boot image model, with `greenboot` as the health *gate* in the Red Hat182family), **RAUC** (**LGPL-2.1**, bundles and slots, widely used with Yocto), **SWUpdate**183(**GPL-2.0-only**, with an LGPL-2.1 control library and Lua extensions under MIT; `.swu`184format), **Mender** (client and server **Apache-2.0** in their repositories, with a commercial185offering on top — verify which edition is being deployed), **balenaOS/balena** (open OS186with a **commercial balenaCloud platform**: what locks you in is not the OS licence, it is the service).187188Fleet rollout:189190- **In waves, always.** A canary ring (dozens of representative nodes, not the191 best ones), then a percentage, then the rest. Between rings, **enough observation time192 for slow failures to show up**: memory leaks, disk filling up,193 certificates, weekly reboot.194- **Stop switch (*kill switch*)** that halts the rollout in progress. And it gets tested.195- **The cohort is defined by what differentiates the nodes**: hardware model, source196 version, country, link type. A "homogeneous" fleet never is.197- **Update window per site**: a node in an operating theatre or in a checkout till is not198 rebooted at just any hour.199- **Nodes that have been off for months**: the system must support jumping several versions200 at once, or declare and enforce a minimum version with a recovery path. This201 case always happens and is almost never tested.202- **The *push* does not work.** An Ansible-style model against nodes that are powered off, behind NAT or with a203 changing IP does not arrive. **The node polls and pulls its desired state**; the centre publishes.204205### 3.3 Disconnected operation and reconciliation206207- **You explicitly declare what works without the link and what does not.** Without that document, the208 behaviour during an outage is whatever comes out, and it will come out in production.209- **Bounded autonomy**: how long the node can operate alone (days, weeks), and what happens when210 that runs out (does it degrade? does it stop? does it carry on with stale data?). An authorisation cache that expires211 after an hour turns a network outage into a service outage.212- **Reconciliation on return**: you must decide **the conflict resolution rule** —213 last writer wins, the centre wins, union, or manual resolution with an exception queue.214 "It'll sync eventually" is not a rule.215- **Idempotency and retries**: everything the node sends will be retried; without idempotency216 keys, transactions get duplicated on reconnect.217- **The clock lies.** Without NTP for days the node drifts; events arrive with218 impossible stamps, certificates look expired and signatures fail. Monotonic clocks219 are used to measure intervals, the event is stamped with local time **and**220 with receipt time, and ordering is by sequence as well as by time.221- **Certificates**: the case that breaks fleets is the node that was disconnected when it was due to222 rotate. You design long lifetimes for the anchor identity, early and well-anticipated rotation223 for service ones, and **a recovery path that does not depend on the expired224 certificate**. Check the root CA's expiry before deploying, not after.225226### 3.4 Observability over an intermittent link and cost per byte227228- **Agent with a persistent, bounded local queue** (*store-and-forward*): it stores while there is no229 link and sends on return. **Bounded** is the key word: an unbounded queue fills the disk230 and takes the node down — at exactly the worst moment. On reaching the limit it discards by declared231 policy (oldest first, or lowest priority).232- **Aggregate on the node**: percentiles and counters per interval, not raw events. The cost233 of telemetry per node is multiplied by the size of the fleet; at 5,000 nodes, a few extra KB234 per second are a bill.235- **Sampling and levels**: very reduced normal logging, with **the ability to raise the detail on236 demand for a specific node** during an investigation. That lever is what replaces237 the console you do not have.238- **Alert on the fleet, not on the node.** Five thousand nodes generate individual failures239 constantly; the useful alert is "4 % of cohort X has not reported since yesterday's240 rollout". A downed node is a ticket, not a page.241- **Silence is a signal, and it has to be told apart**: a powered-off node, a dropped link, a dead agent242 and a stolen node all look the same from the centre. A heartbeat carrying the cause of last disconnection243 when it returns resolves most of it.244- **Bricked detection**: an explicit metric of nodes that do not come back after an245 update, with a threshold that triggers the *kill switch* from §3.2.246247### 3.5 Disposable node248249- **The node is not backed up: it is rebuilt.** Its state splits into three: **image** (comes250 from the registry), **configuration** (comes from the control plane), **local data** (the only251 irreplaceable part, and therefore synced to the centre or its loss explicitly accepted).252- **Replacing a node must be a field procedure someone untrained can carry out**:253 unplug, plug in the new one, power it on. Everything else is done by zero-touch254 provisioning (§3.6). If replacing it requires an engineer, the fleet does not scale.255- **Decommissioning**: a retired node has its identity and credentials revoked **and** its storage256 wiped or destroyed. A retired device still on the trust list is an257 open door with the keys left in.258259### 3.6 Security: the attacker holds the device260261This is the threat model change that separates the edge from the centre. There is no guard, no262door, no CCTV. You have to assume **full physical access, with time and tools**.263264- **One cryptographic identity per device, not shared.** **The single credential for265 the whole fleet is the classic design failure of this domain**: compromising one single device —266 bought second-hand, stolen, or simply opened— hands over the entire fleet, and **there is no267 possible revocation without touching every node**. Per-device identity means that268 compromising one costs one, and revoking it is a routine operation.269- **Hardware trust anchor**: TPM 2.0 or secure element. The private key is generated270 inside and never leaves. A private key in a file on disk is a public key with271 extra steps.272- **Secure and measured boot**: UEFI Secure Boot with the owner's keys (not just the273 manufacturer's) so that only signed software boots, and measured boot into TPM PCRs274 so that the boot state is checkable.275- **Encryption at rest with the key sealed to the boot state**: LUKS with the key released276 by the TPM only if the measurements match. That way the extracted disk cannot be read and a tampered277 boot does not open the volume. **Without sealing, encryption on an unattended node protects little:278 the key is on the same device.**279- **Remote attestation**: before handing over credentials or configuration, the centre checks280 that the node is who it says it is and is in the expected state. That is what turns281 zero-touch provisioning into something other than "handing out credentials to whoever asks".282- **Ephemeral, least-privilege credentials**: the node obtains short-lived tokens for283 what it needs. Never a broad write credential against the central system; the node284 **pushes its telemetry** and **pulls its configuration**, and neither of the two permissions285 requires permissions over other nodes.286- **Minimal surface**: no unnecessary listening services, no permanent remote access287 enabled by default, serial console and debug (JTAG/UART) disabled or protected in288 production.289- **Tamper detection**: opening sensors, seals, and **the corresponding alert**.290 And the uncomfortable operational rule: **a node suspected of tampering is revoked first and291 investigated afterwards.**292- **The update channel is the fleet's most valuable asset.** Whoever controls it executes293 code on every node. Image signing with custodied keys, verification on the294 device, and the signing process treated as a critical system295 (`cryptography-pki-standards`, `secrets-management-standards`).296297### 3.7 Inference at the edge298299- **It is a specific case of the four constraints in §1**, and almost always of two: latency300 (you cannot wait for the centre) and bandwidth (the video does not fit in the uplink).301- **The model is a fleet artifact**, not a loose file: it is versioned, signed,302 distributed through the same channel as everything else, and **can be rolled back just like the software**.303 A model change is a ringed rollout, not an SSH copy.304- **You decide what goes up**: prediction yes, raw data almost never. That is where both the saving and305 the minimisation demanded by `privacy-engineering-standards` live.306- **Model drift at the edge is harder to see** than at the centre, because labels307 rarely come back. Monitoring and retraining belong to308 `mlops-standards`; here only the distribution and rollback mechanism.309- The engine, quantisation and memory sizing belong to `local-inference-standards`.310311## 7. Long-term sustainability and prohibitions312313> §4 (quality and testing) and §6 (performance and operability) are deliberately omitted: in this314> domain testing is that of the language skill and operability is spread between §2 and315> §3, where it is actually decided. The catalogue's canonical numbering is kept so that the cross316> references to §7 and §8 point to what they say.317318**The horizon is long and that is the problem.** An edge node lives for years in places nobody319returns to. Consequences that are decided **before** buying:320321- **Hardware and OS end of life dated from day one**, and a minimum supported version322 that is enforced. A fleet with six generations of everything is undeployable.323- **The expiry of certificates and of the root CA is planned at the scale of the device's324 lifetime**, not the project's.325- **A defined and demonstrated security update cadence**: if you cannot patch a326 critical CVE across the whole fleet within a declared deadline, that deadline is the real risk, not whatever327 the policy says.328- **Vendor exit**: if fleet management depends on someone else's cloud (balenaCloud,329 a subscription, or a proprietary service), you document **how control of the devices is330 recovered** if it disappears. Without that answer, the fleet is a hostage.331332Prohibitions:333334- ❌ **One credential, key or certificate shared across the whole fleet.**335- ❌ **Updating live via the package manager** on an unreachable node, with no alternative336 slot and no rollback.337- ❌ **A/B without an automatic health check that reverts.** It is half the mechanism.338- ❌ **Deploying to the whole fleet at once.** Rings or nothing.339- ❌ **An update channel without a signature verified on the device.**340- ❌ **An exposed inbound port on the node**, or permanent remote access enabled by default.341- ❌ **A telemetry queue with no size limit.** It fills the disk and takes the node down.342- ❌ **Uploading raw data by default** without having calculated the upload cost or the343 minimisation.344- ❌ **Assuming the node's clock is correct**, or ordering events only by their timestamp.345- ❌ **Encryption at rest with the key on the disk itself** on an unattended machine.346- ❌ **Putting Kubernetes on a single-node site** without being able to say what it schedules.347- ❌ **Decommissioning a node without revoking its identity** and without wiping or destroying its storage.348- ❌ **Calling "edge" a deployment that meets none of the four constraints in §1.**349- ❌ **Stating the licence or maturity status of k3s, MicroShift, KubeEdge, Akri, Mender,350 RAUC, SWUpdate or balenaOS from memory.** Several change commercial model (§8).351352*(The separate "quality and testing" and "performance" sections are deliberately omitted:353in this domain the test **is** the ringed rollout with automatic revert (§3.2) and354capacity is measured as telemetry cost and autonomy without a link (§3.3–3.4). Separating them355would duplicate content without adding criteria.)*356357## 8. Mandatory web verification358359Before committing to any data in this document:3603611. **Licences read raw — result of this verification (August 2026)**:362 - **k3s**: `LICENSE` on `master` → **Apache-2.0**.363 - **MicroShift**: `LICENSE` on `main` → **Apache-2.0** in the repository; **the supported364 Red Hat build requires a subscription** and is coupled by a version matrix to365 RHEL. Distinguish repository from product.366 - **Akri**: `LICENSE` on `main` → **Apache-2.0**.367 - **bootc**: `LICENSE-APACHE` present → **Apache-2.0** (verify whether it is dual with MIT).368 - **RAUC**: `COPYING` → **LGPL-2.1**.369 - **SWUpdate**: `COPYING` → **GPL-2.0**; the README itself states: *"SWUpdate is released370 under GPLv2. A library to control SWUpdate is part of the project and it is released under371 LGPLv2.1"*, with Lua extensions under MIT.372 - **Mender**: `LICENSE` of `mender` and of `mender-server` → **Apache-2.0** (Northern.tech AS);373 there is an overlaid commercial offering — **verify the specific edition**.374 - **balenaOS**: **declared gap.** The `LICENSE` of a board repository375 (`balena-raspberrypi`) is Apache-2.0, but **the licence file of376 `meta-balena` has not been located** on the paths tried (`master` and `main` return 404). Read it before377 stating the OS licence, and bear in mind that **the real lock-in is balenaCloud, which is378 a commercial service**, not the licence.379 - **KubeEdge**: **declared gap** — its licence file was not read in this pass.3802. **Status and maturity**: verified that **k3s** is in **CNCF Sandbox** (accepted in 2020, with381 the maintainers stating their intention to promote it), **KubeEdge** is **graduated** in382 the CNCF, and **Akri** is still in **Sandbox** since 2021 with recent activity (*commits* and383 a *release* in July–August 2026). Re-verify on `cncf.io` and in the *landscape*: the384 levels change and the press does not always cover it.3853. **Versions**: k3s follows Kubernetes versions (v1.36.x observed); check which386 Kubernetes version it supports and until when. bootc, RAUC, Mender and SWUpdate are verified387 through the repository's *releases* Atom feed. **`api.github.com` unauthenticated returns 403;388 use the Atom feeds.**3894. **MicroShift compatibility matrix with RHEL**: it changes per version and is an architectural390 constraint. Consult Red Hat's documentation before committing to a version.3915. **Hardware and secure boot**: the availability of TPM 2.0, of Secure Boot with your own392 keys and of LUKS sealing **depends on the specific board**. It is verified against the393 real model before designing on top of it; on many SBCs it is absent or unusable.3946. **CVEs in the update channel and the lightweight control plane**: triage with CVSS + EPSS +395 **KEV**. A CVE in the update agent is the worst possible case for this architecture.3967. **Figures**: **no "edge computing" market number, typical latency or bandwidth397 saving is written without a source and methodology.** The latency budget and the398 upload cost are calculated with the project's data, not with an industry statistic.399400If the web contradicts this document, **the web wins** — flag the discrepancy.