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

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

Archived in project

Development

Successfully merging this pull request may close these issues.

1 participant