Skip to main content
Version: v3.9.0

Workload metadata

Edgelet stamps every container with a canonical metadata contract so identity, ownership, and selectors work the same across edgelet, docker, and podman engines.

Source of truth: internal/workloadmeta/ (spec.go, build.go).


Overview​

ItemValue
Label namespaceedgelet.iofog.org/* (plus standard app.kubernetes.io/*)
Env prefixEDGELET_*
Managed-byapp.kubernetes.io/managed-by: edgelet
Container name prefixedgelet_<uuid>: debug only; never use for identity

User-supplied labels and env vars are merged in, but protected keys cannot be overridden.


LabelSpec​

Required labels (agent-written)​

LabelValue
app.kubernetes.io/nameMicroservice name
app.kubernetes.io/instanceMicroservice UUID
app.kubernetes.io/part-ofApplication / namespace name
app.kubernetes.io/managed-byedgelet
edgelet.iofog.org/microservice-uidMicroservice UUID
edgelet.iofog.org/node-uidEdgelet node UUID (iofogUuid in config)
edgelet.iofog.org/scopemanaged or local
edgelet.iofog.org/runtime-engineedgelet, docker, or podman
edgelet.iofog.org/roleworkload, router, nats, controller, or edgelet

Optional labels​

LabelWhen set
edgelet.iofog.org/systemtrue for system workloads (router, nats, controller, edgelet daemon container)
edgelet.iofog.org/host-networktrue when hostNetworkMode is enabled
edgelet.iofog.org/sandbox-idCRI pod sandbox ID (containerEngine: edgelet only)
edgelet.iofog.org/healthcheckJSON-encoded healthcheck (models.Healthcheck)

Normalization​

  • Label keys are lowercased on merge.
  • Booleans serialize as "true" / "false".
  • Protected labels reject user overrides (see ProtectedLabelKeys in spec.go).

Legacy labels (removed)​

Runtime code must not read or write:

iofog-ms, iofog-name, iofog-app, iofog-uuid, iofog.uuid, iofog-router, iofog-nats, iofog-system, iofog-hostnet, iofog-sandbox-id, iofog-healthcheck

Engine-internal operational labels (edgelet engine only)​

Non-identity state on containerd workloads (not part of LabelSpec):

  • iofog-ip, iofog-netns, iofog-started-at, iofog-ports, iofog-log-size

EnvSpec​

Required predefined env vars​

VariableMeaning
EDGELET_MICROSERVICE_UIDMicroservice UUID
EDGELET_MICROSERVICE_NAMEMicroservice name
EDGELET_APPLICATION_NAMEApplication / namespace
EDGELET_NODE_UIDEdgelet node UUID
EDGELET_SCOPEmanaged or local
EDGELET_RUNTIME_ENGINEedgelet, docker, or podman
EDGELET_ROLERole string (see below)

TZ policy​

  • If the user env already contains TZ, that value is preserved.
  • Otherwise Edgelet injects TZ from config (timeZone), default UTC.

Reserved env vars​

The keys above cannot be overridden by user env injection (ReservedEnvKeys).

Legacy env (removed)​

  • SELFNAME. Superseded by EDGELET_MICROSERVICE_UID and related keys.

Role​

Derived with deterministic precedence:

  1. Controller workloads → controller
  2. Else if IsRouter → router
  3. Else if IsNats → nats
  4. Else → workload

If both router and nats flags are set, router wins.

The edgelet daemon container itself uses role edgelet when labeled by the watchdog path.


Scope​

ConditionScope
hostNetworkMode: truemanaged (host network bypasses bridge scoping)
metadata.namespace / application is edgelet (local deploy)local
All other managed workloadsmanaged

Local deploy manifests use metadata.namespace: edgelet (see Manifests).

Control plane workloads are treated as local scope for DNS listener partitioning.


Examples​

Docker / Podman (managed workload)​

labels:
app.kubernetes.io/name: video-analyzer
app.kubernetes.io/instance: 6f2f347f-a43b-43fb-9f72-2f6f47aa91be
app.kubernetes.io/part-of: smart-city
app.kubernetes.io/managed-by: edgelet
edgelet.iofog.org/microservice-uid: 6f2f347f-a43b-43fb-9f72-2f6f47aa91be
edgelet.iofog.org/node-uid: node-123
edgelet.iofog.org/scope: managed
edgelet.iofog.org/runtime-engine: docker
edgelet.iofog.org/role: workload
edgelet.iofog.org/system: "false"
edgelet.iofog.org/host-network: "false"
env:
- EDGELET_MICROSERVICE_UID=6f2f347f-a43b-43fb-9f72-2f6f47aa91be
- EDGELET_MICROSERVICE_NAME=video-analyzer
- EDGELET_APPLICATION_NAME=smart-city
- EDGELET_NODE_UID=node-123
- EDGELET_SCOPE=managed
- EDGELET_RUNTIME_ENGINE=docker
- EDGELET_ROLE=workload
- TZ=UTC

Local deploy (edgelet ms / edgelet deploy -f)​

labels:
app.kubernetes.io/part-of: edgelet
edgelet.iofog.org/scope: local
edgelet.iofog.org/runtime-engine: edgelet

Identity helpers​

Code should use:

  • workloadmeta.MicroserviceUIDFromLabels(labels). Canonical UUID
  • workloadmeta.IsManagedByIofog(labels). Managed-by + UUID present
  • workloadmeta.ResolveScope(application, hostNetwork). Scope string

Do not parse container names or legacy iofog-* labels for identity.


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