advanced 3 min answer

On 8 March 2023 a systemd security update was applied automatically across a large fraction of Datadog's virtual machines. The restart of systemd-networkd removed routes managed by the container network plugin and took roughly half the Kubernetes nodes offline across five regions. The deployment pipeline was not involved. What failed, and which design decision allowed it?

datadogchange-managementstaged-rolloutunattended-updatesblast-radius
Show the full answer Hide the answer

The trigger

An operating-system security update, delivered by a package mechanism that ran unattended on the fleet. On a running node, restarting systemd-networkd deleted the routes the container network plugin had installed, so the node lost pod connectivity. Datadog's published analysis notes the interaction did not reproduce on a fresh or rebooted node, because during a normal boot the network daemon starts before the plugin installs its routes. The defect required a specific sequence that only occurs on an already-running machine.

Why it propagated

Not because the bug was subtle - because the change path had no rollout controls at all.

Every property the deployment pipeline provides was absent: no canary, no per-region sequencing, no bake time, no health gate that halts on a drop in node readiness, no approval. The update applied on a schedule, globally, at once. Roughly 50-60% of production Kubernetes nodes lost connectivity across five regions, which is a blast radius that no code deployment in the same organisation would have been permitted.

The second propagation mechanism is coupling: nodes going offline simultaneously in several regions defeats the isolation that having regions is supposed to buy. Independent regions are only independent with respect to the failures they do not share, and a global change schedule is a shared failure.

Why detection lagged, and recovery took long

Nodes that lose pod networking are not obviously "down" - the machines are up, the control plane is reachable, and the symptom is distributed. And recovery required touching every affected node rather than reverting one artefact, because the change had been applied N times independently rather than rolled out once.

The structural fix versus the tempting local fix

Tempting: pin the systemd version, or disable unattended upgrades. Both are correct and neither addresses the class.

Structural: every mechanism that can change production is a deployment mechanism and gets the same controls.

  • Inventory the change paths. Package updates, base-image refreshes, agent auto-updates, certificate rotation, DNS changes, feature-flag services, vendor-pushed configuration, cloud-provider maintenance. Most organisations can name ten and have twenty.
  • Route each one through staged rollout with a health gate, or explicitly accept the risk with a named owner. Unattended security patching is legitimate and it still needs waves.
  • Sequence regions. Nothing should reach all regions on the same schedule, including patches.
  • Test on running machines, not fresh ones. This defect was invisible to any test that started from a clean node, which is what most infrastructure testing does.

When this is the wrong correction

Unattended security patching exists for a reason, and a review that concludes "stop patching automatically" has traded a rare availability incident for a continuous security exposure. Choose waves over delay: the same patch applied to 5% of the fleet with a node-readiness gate keeps the speed and removes the global simultaneous failure. The correction to reject is a human approval step, which cannot evaluate whether a systemd update will interact with a network plugin.

The general lesson

The pipeline protects the changes that go through it. An organisation with excellent deployment discipline and an unmanaged patch mechanism has excellent discipline over a fraction of its change surface, and the incidents come from the rest. The question worth asking in any review is not "how do we deploy safely" but "what else can change production, and what governs that?"