You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Deploy GHCR step refuses node drains when its pull-probe pod runs out of memory #5009
46 failed merge-group runs between 2026-10-08 17:45Z and 2026-10-09 17:24Z, across 13 different pull requests, failed in the deploy job's GHCR credential stage: the runtime pull-probe pod was killed for running out of memory on a nearly full node, so the credential was never exercised and the script refused to drain the node.
🩹 Heal Prod on main failed the same way, so production had no automatic recovery for about 24 hours.
34 of the 46 pull requests' later attempts merged with no new push, so the candidates did not cause the failure.
Evidence basis: 4 deploy logs, 1 heal log and 2 check annotations were read; the other 39 runs are grouped by the same deploy-job duration and the failing heal, not by their own logs.
This is the costliest single cause in the window: 28.8% of all failed runs and about 1,910 run-minutes. Every candidate in the queue failed for a fault none of them caused, and the heal path could not recover either.
Expected behaviour
A full node does not stop the deploy's credential proof. Either the probe can always run, or the deploy names the cause and the heal path still recovers production.
Acceptance criteria
Confirm whether the trigger can still happen today: what the probe pod requests and is limited to, and what headroom the node it lands on has. Record the answer here, without node names or addresses.
If it can, the probe pod can no longer be killed for memory on a full node, or the step fails with a message naming that cause instead of refusing the drain.
Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.
Create Plan
🧪 Issue enrichment is currently in open beta.
You can configure auto-planning by selecting labels in the issue_enrichment configuration.
To disable automatic issue enrichment, add the following to your .coderabbit.yaml:
issue_enrichment:
auto_enrich:
enabled: false
💬 Have feedback or questions? Drop into our discord!
🤖 Generated by the Agentic Engineer (interactive Claude Code session)
Duplicate of #4664, which #4710 fixed. This issue's evidence window (2026-10-08 17:45Z to 2026-10-09 17:24Z) is the same incident #4664 recorded: run 37818995791 on 2026-10-08, a node-pinned probe refused with OutOfmemory on a worker with about 15 Mi left. #4664 was closed as completed on 2026-10-10 when #4710 merged; this issue was filed later from the failure count and names only the earlier, superseded attempt (#4666).
Checked against this issue's criteria on platform main1e8dad92 and, read-only, against production today:
If it does happen, the step names the cause: a probe the kubelet refuses now fails at once with "did not run … not credential evidence" and the pod reason, instead of waiting out the budget and blaming the credential.
Self-test:TestRuntimeProbeKubeletRejectionFailsFastAndDistinctly drives an OutOfmemory rejection and asserts that message, and that the kubelet's raw message stays out of the log.
Heal path: it runs the same script, so it gets the same fix. No refusal of this kind has recurred since 2026-10-09.
Reopen #4664, as its closing note asks, if a later deploy is refused at the probe on a full worker again.
Activity
coderabbitai commentedon Oct 17, 2026
📝 Issue Planner
Check the box below or use the
@coderabbitai plancommand to generate an implementation plan and prompts that you can use with your favorite coding assistant.🧪 Issue enrichment is currently in open beta.
You can configure auto-planning by selecting labels in the issue_enrichment configuration.
To disable automatic issue enrichment, add the following to your
.coderabbit.yaml:💬 Have feedback or questions? Drop into our discord!
devantler commentedon Oct 24, 2026
Duplicate of #4664, which #4710 fixed. This issue's evidence window (2026-10-08 17:45Z to 2026-10-09 17:24Z) is the same incident #4664 recorded: run 37818995791 on 2026-10-08, a node-pinned probe refused with
OutOfmemoryon a worker with about 15 Mi left. #4664 was closed as completed on 2026-10-10 when #4710 merged; this issue was filed later from the failure count and names only the earlier, superseded attempt (#4666).Checked against this issue's criteria on platform
main1e8dad92and, read-only, against production today:scripts/refresh-flux-ghcr-auth.sh); a fixture test pins those exact requests. Production's tightest node today has about 512 MiB of memory left to request, so the probe fits with a wide margin.TestRuntimeProbeKubeletRejectionFailsFastAndDistinctlydrives anOutOfmemoryrejection and asserts that message, and that the kubelet's raw message stays out of the log.Reopen #4664, as its closing note asks, if a later deploy is refused at the probe on a full worker again.