Skip to content

feat(cilium): stage homogeneous wildcard device selection for datapath activation#2697

Merged
devantler merged 4 commits into
mainfrom
claude/cilium-device-normalization-2610
Jul 18, 2026
Merged

feat(cilium): stage homogeneous wildcard device selection for datapath activation#2697
devantler merged 4 commits into
mainfrom
claude/cilium-device-normalization-2610

Conversation

@devantler

Copy link
Copy Markdown
Contributor

🤖 Generated by the Daily AI Engineer

Why

The staged bandwidth-manager and BPF-masquerade datapath work cannot activate on today's private-NIC device pin: pod egress leaves via the public NICs the pin excludes, and the pin's per-role premise went stale when the control planes were rebuilt (a fresh nine-node inventory shows the split is static-vs-autoscale now, with each node matching only one pinned name by luck of the union).

What

Stages a default-off wildcard device selection (en+ eth+) that covers both NICs on every node — the upstream-documented mechanism for inconsistent cross-node names — and restructures the live pin into an always-on component so the staged flip can actually take effect (render-proven: a parent-patch value can never be overridden by a component). The default render is byte-identical, so merging rolls no Cilium agents; activation is a later one-line flip with a first-node verification runbook and documented rollback.

Part of #2610. Part of #2029.

…h activation

Stages a default-off homogeneous-devices component (devices: "en+ eth+")
so the BPF masquerade program can attach to the public default-route NICs
when ebpf-host-routing activates, and restructures the live private-NIC pin
into an always-on private-nic-devices component — render-verified that a
parent-patch value can never be overridden by a component, so the pin had
to become a component for the staged flip to win (later component wins,
also render-verified).

Live nine-node inventory (talosctl, 2026-07-18) corrected the stale
premise: static nodes (CPs AND workers) are enp1s0/enp7s0, autoscale nodes
eth0/eth1 — the old pin covers private NICs only by union. Wildcards are
upstream's documented answer for cross-node-inconsistent names and absorb
future autoscaler naming drift.

Default render is byte-identical (devices: enp7s0 eth1) — merging rolls no
agents. Activation is a separate one-line flip following the component's
runbook (first-node primary-address verification, rollback documented).

Part of #2610. Part of #2029.
@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Daily AI Engineer

CI is green at bb45a3a — requesting review while the PR is a draft, per the green-while-draft discipline.

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bb45a3a86b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…e rollout

Codex round-1 P2: rollOutCiliumPods: true would auto-roll the fleet the
moment the component is referenced, making the runbook's first-node
verification unexecutable. The component now also sets the agent
updateStrategy to OnDelete, so activation stages config without restarting
any agent and the operator steps the roll pod-by-pod; removing the override
after the fleet soak is a strategy-only change that rolls nothing, and a
mid-activation rollback (re-comment) auto-rolls stepped nodes back under
the restored RollingUpdate. Render-verified: OnDelete appears exactly once
in the staged render and never in the default.
@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Daily AI Engineer

Round-1 P2 fixed at d762635 (details on the thread). Re-requesting review at the new head.

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d762635079

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…n runbook

Codex round-2 P2: OnDelete only gates template-driven replacement — an
incidental pod restart or an autoscaler-added node boots the widened set
immediately. The runbook now suspends autoscaler node creation for the
window (the deployment is ksail-provisioned, so the scale-down holds),
treats incidental restarts as involuntary canaries to verify at once, and
corrects the rollback claim accordingly.
@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Daily AI Engineer

Round-2 P2 fixed at 53f4b5a (details on the thread). Re-requesting review at the new head.

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: 53f4b5a745

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Daily AI Engineer

Readiness record @ 53f4b5a — promoting

  1. Programmatically tested / pentad clear: all checks green at head, 0/3 review threads unresolved (two Codex P2 rounds fixed at the root: the OnDelete rollout gate, then its bypass paths), mergeStateStatus: CLEAN, no CodeRabbit pre-merge summary because CodeRabbit never reviewed (Codex lane — the lane-choice consequence, not a gap). ksail workload validate green for both overlays at every commit.
  2. Reviewed: Codex green at 53f4b5a == head (19:27Z).
  3. Tried and evaluated as a user (this comment is the record): this PR deliberately has no exercisable runtime surface — the staged component is default-off and the default render is byte-identical (devices: enp7s0 eth1, render-diffed), so merging rolls nothing; the runtime flip is the activation step the runbook gates. What IS exercisable was exercised: both states rendered and value-asserted (default enp7s0 eth1 / staged en+ eth+, OnDelete present exactly once in staged and never in default), the merge-order mechanism was proven by rendering the failing design first (a parent-patch pin cannot be overridden by a component — that render is why the pin moved into a component), and the AC1 inventory came from the live cluster (talosctl/kubectl, all nine nodes), including live confirmation that no Flux HelmRelease owns the autoscaler deployment the runbook suspends.

Promoting now; merging once CLEAN.

@devantler
devantler marked this pull request as ready for review July 18, 2026 19:33
@devantler
devantler added this pull request to the merge queue Jul 18, 2026
Merged via the queue into main with commit eaf5211 Jul 18, 2026
20 checks passed
@devantler
devantler deleted the claude/cilium-device-normalization-2610 branch July 18, 2026 19:39
@github-project-automation github-project-automation Bot moved this from 🫴 Ready to ✅ Done in 🌊 Project Board Jul 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: ✅ Done

Development

Successfully merging this pull request may close these issues.

1 participant