resource-control/docs/evidence/2026-10-21-node-allocation-review/2026-10-21-node-budget.json
tegwick 3d9b1bd080 Consume Vergabe target replay into node allocation budget; finish T02
Fill the Vergabe slot from railiance-apps 1af6d82 (RAPPS-WP-0014-T04): keep
60m request and 1000m/1Gi limits, raise memory request 256Mi->512Mi next wave,
keep apps-pg at 100m for incremental pilot DB demand. Regenerated budget:
serialized CPU +90m / memory +165Mi; all-concurrent CPU -390m / memory -347Mi.
T03 stays in progress pending wave-1/wave-2 receiving tasks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 8340@bnt-lap001
Assistant-Session: 2e192b3d-b3e8-4403-94d4-d55a2c8b476c
2026-10-21 08:40:36 +02:00

1789 lines
52 KiB
JSON

{
"schema": "resource-control.node-allocation-review.v1",
"workplan": "RESOURCE-WP-0008",
"beneficiary": "CUST-WP-0071-T03",
"observed_at": "2026-10-21T06:08:20Z",
"allocatable_cpu_m": 4000,
"allocatable_memory_mi": 15993,
"rule": {
"cpu": "max(floor, p95x1.5, peakx0.5) rounded up to 5m; floors 50m/pod databases, 10m/pod critical path, 5m/pod other; change only if |delta|>=15m or request is zero",
"memory": "request = 7d p95 working set x1.15 rounded to 16Mi when |delta|>=64Mi; limits unchanged (requests only affect placement/eviction ranking)"
},
"budget_rows": [
{
"item": "Proposed steady pod requests (incl. Vergabe 60m provisional)",
"current_m": 3605,
"proposed_m": 2450,
"basis": "Kubernetes API 06:08Z + proposals"
},
{
"item": "Host / k3s control plane (no system/kube-reserved; allocatable == capacity)",
"current_m": 900,
"proposed_m": 900,
"basis": "kubelet summary 8 samples 06:25Z: non-pod 677-871m, k3s 415-504m; no 7d series"
},
{
"item": "Release surge + migration hook (one release at a time)",
"current_m": 310,
"proposed_m": 310,
"basis": "state-hub API 250m surge + MCP 10m + migrate 50m; largest live RollingUpdate"
},
{
"item": "Admitted factory/build execution (one runner job burst above runner request)",
"current_m": 250,
"proposed_m": 250,
"basis": "forgejo-runner pod peak 243m; namespace peak 1033m incl. gitea"
},
{
"item": "Maintenance CronJobs (7 jobs, 10-25m, overlapping 02:40-04:00)",
"current_m": 50,
"proposed_m": 50,
"basis": "kubectl cronjobs; keycape-factor-renewer every 10 min"
},
{
"item": "Knative HPA scale-out headroom (requests at max replicas minus 1)",
"current_m": 1520,
"proposed_m": 230,
"basis": "activator 20/gateway 10/webhook 5 -> proposed caps 3/3/2"
},
{
"item": "Pilot growth reserve (next tenant / user growth; Vergabe itself is in steady requests)",
"current_m": 0,
"proposed_m": 200,
"basis": "Replay: two-user pilot needs no CPU request increase; reserve is unmeasured headroom for growth and human-paced apps-pg demand"
}
],
"budget_total_all_concurrent": {
"current_m": 6635,
"proposed_m": 4390,
"residual_current_m": -2635,
"residual_proposed_m": -390
},
"budget_total_serialized_events": {
"current_m": 6075,
"proposed_m": 3910,
"residual_current_m": -2075,
"residual_proposed_m": 90
},
"measured_demand_7d": {
"containers_cpu_p95_m": 966,
"containers_cpu_peak_m": 1740,
"host_non_pod_cpu_m_sample": [
677,
871
],
"note": "Measured demand (containers p95 + host) ~1.8 cores, peaks ~2.6 cores; the deficit is reservation, not demand."
},
"memory_budget_mi": {
"allocatable": 15993,
"host_k3s_sample": 2604,
"release_surge_state_hub_api": 864,
"build_runner_burst": 512,
"pilot_growth_reserve": 256,
"current": {
"requests": 9856,
"total_all_concurrent": 13836,
"residual_all_concurrent": 2157,
"total_serialized": 13324,
"residual_serialized": 2669
},
"proposed": {
"requests": 12104,
"total_all_concurrent": 16340,
"residual_all_concurrent": -347,
"total_serialized": 15828,
"residual_serialized": 165
}
},
"vergabe_slot": {
"current_request_m": 60,
"proposed_request_m": 60,
"current_memory_request_mi": 256,
"proposed_memory_request_mi": 512,
"status": "replay-backed keep (CPU), memory request raise in next wave",
"replay_result": {
"source": "railiance-apps 1af6d82 docs/evidence/2026-10-21-vergabe-target-replay/ (RAPPS-WP-0014-T04)",
"image": "deployed digest sha256:a26444f5..., 3 gunicorn workers, 60m/256Mi request, 1000m/1Gi limit, target node",
"ordinary_ops": 3675,
"errors": 0,
"ordinary_p95_s": 0.192,
"transfer_p95_s": 0.076,
"restart_to_ready_s": 18.98,
"app_cpu_mean_p95_peak_m": [
775,
998,
1020
],
"app_throttle_ratio": 0.357,
"app_memory_peak_mib": 483,
"db_incremental_cpu_mean_p95_m": [
320,
480
],
"db_note": "isolated PostgreSQL 16 pod, not shared CNPG apps-pg",
"rate": "~25 req/s closed loop, far above two human users",
"recommendation": "keep 60m request and 1000m/1Gi limits; raise memory request 256Mi->512Mi next wave; budget 0.3-0.5 core incremental apps-pg demand at synthetic load",
"not_established": [
"production settings (SSO, ingress/TLS)",
"shared apps-pg contention",
"observed human demand",
"busy-hour node contention (CI, backups)",
"human/recovery acceptance (RAPPS-WP-0014-T03)"
]
}
},
"pilot_stress_note": "At the synthetic rate the pilot used ~1.1 core (app ~775m + db ~320m) inside limits; that is burst usage, not reservation. During the replay node free CPU p5 fell to ~150m.",
"workloads": [
{
"namespace": "activity-core",
"workload": "activity-core",
"pods": 10,
"cpu_request_m": 100,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 8,
"memory_request_mi": 256.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 62.8,
"cpu_peak_m_7d": 132.5,
"memory_p95_mi_7d": 811.0,
"memory_peak_mi_7d": 1011.0,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 95,
"action": "keep + memory up",
"proposed_cpu_request_m": 100,
"proposed_memory_request_mi": 944,
"owner_repo": "activity-core",
"receiving_record": "needs receiving task in activity-core",
"rationale": "Within rule tolerance; keep. Memory p95 811Mi vs 256Mi request; one container without CPU limit."
},
{
"namespace": "argocd",
"workload": "argocd-application-controller",
"pods": 1,
"cpu_request_m": 50,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 19.0,
"cpu_peak_m_7d": 35.5,
"memory_p95_mi_7d": 365.8,
"memory_peak_mi_7d": 438.5,
"throttle_ratio_7d": 0.005,
"restarts_7d": 0.0,
"rule_cpu_m": 30,
"action": "decrease + memory up",
"proposed_cpu_request_m": 30,
"proposed_memory_request_mi": 432,
"owner_repo": "railiance-enablement",
"receiving_record": "needs receiving task in railiance-enablement",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "argocd",
"workload": "argocd-repo-server",
"pods": 1,
"cpu_request_m": 25,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 128.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 0.9,
"cpu_peak_m_7d": 4.9,
"memory_p95_mi_7d": 63.1,
"memory_peak_mi_7d": 73.4,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "decrease",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 128.0,
"owner_repo": "railiance-enablement",
"receiving_record": "needs receiving task in railiance-enablement",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "audit-core",
"workload": "audit-core",
"pods": 1,
"cpu_request_m": 50,
"cpu_limit_m": 500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 64.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 1.5,
"cpu_peak_m_7d": 12.2,
"memory_p95_mi_7d": 26.4,
"memory_peak_mi_7d": 26.6,
"throttle_ratio_7d": 0.001,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "decrease",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 64.0,
"owner_repo": "audit-core",
"receiving_record": "needs receiving task in audit-core",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "canned-prompts",
"workload": "canned-prompts",
"pods": 1,
"cpu_request_m": 25,
"cpu_limit_m": 500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 96.0,
"memory_limit_mi": 384.0,
"cpu_p95_m_7d": 2.5,
"cpu_peak_m_7d": 6.6,
"memory_p95_mi_7d": 63.3,
"memory_peak_mi_7d": 65.0,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 96.0,
"owner_repo": "canned-prompts",
"receiving_record": "needs receiving task in canned-prompts",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "cert-manager",
"workload": "cainjector",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 1.1,
"cpu_peak_m_7d": 2.8,
"memory_p95_mi_7d": 70.7,
"memory_peak_mi_7d": 94.1,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "increase + memory up",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 96,
"owner_repo": "railiance-cluster",
"receiving_record": "needs receiving task in railiance-cluster",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "cert-manager",
"workload": "cert-manager",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 1.4,
"cpu_peak_m_7d": 3.5,
"memory_p95_mi_7d": 56.3,
"memory_peak_mi_7d": 89.8,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "increase + memory up",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 80,
"owner_repo": "railiance-cluster",
"receiving_record": "needs receiving task in railiance-cluster",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "cert-manager",
"workload": "webhook",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 0.4,
"cpu_peak_m_7d": 0.9,
"memory_p95_mi_7d": 29.1,
"memory_peak_mi_7d": 57.0,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "increase",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 0.0,
"owner_repo": "railiance-cluster",
"receiving_record": "needs receiving task in railiance-cluster",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "cnpg-system",
"workload": "cloudnative-pg",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 100,
"containers_without_cpu_limit": 0,
"memory_request_mi": 100.0,
"memory_limit_mi": 200.0,
"cpu_p95_m_7d": 2.5,
"cpu_peak_m_7d": 4.4,
"memory_p95_mi_7d": 72.4,
"memory_peak_mi_7d": 86.5,
"throttle_ratio_7d": 0.005,
"restarts_7d": 1.0,
"rule_cpu_m": 50,
"action": "decrease",
"proposed_cpu_request_m": 50,
"proposed_memory_request_mi": 100.0,
"owner_repo": "rapp-postgres",
"receiving_record": "needs receiving task in rapp-postgres",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "core-hub",
"workload": "rapp-core-hub",
"pods": 3,
"cpu_request_m": 200,
"cpu_limit_m": 2500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 896.0,
"memory_limit_mi": 2560.0,
"cpu_p95_m_7d": 39.2,
"cpu_peak_m_7d": 63.5,
"memory_p95_mi_7d": 247.0,
"memory_peak_mi_7d": 292.0,
"throttle_ratio_7d": 0.002,
"restarts_7d": 0.0,
"rule_cpu_m": 60,
"action": "decrease + memory down",
"proposed_cpu_request_m": 60,
"proposed_memory_request_mi": 288,
"owner_repo": "core-hub",
"receiving_record": "needs receiving task in core-hub",
"rationale": "Rule p95x1.5 / peakx0.5 / floor. Production hub.coulomb.social: verify startup and rollout before lowering."
},
{
"namespace": "coulomb",
"workload": "ihp-railiance-probe",
"pods": 1,
"cpu_request_m": 50,
"cpu_limit_m": 200,
"containers_without_cpu_limit": 0,
"memory_request_mi": 128.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 0.0,
"cpu_peak_m_7d": 0.0,
"memory_p95_mi_7d": 0.0,
"memory_peak_mi_7d": 0.0,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "retire/scale-to-zero (owner decision)",
"proposed_cpu_request_m": 0,
"proposed_memory_request_mi": 128.0,
"owner_repo": "ihp-railiance-probe (unconfirmed; namespace owner unknown)",
"receiving_record": "needs receiving task in ihp-railiance-probe",
"rationale": "ImagePullBackOff 21d from legacy registry 92.205.130.254; 50m reserved, 0 usage, two more stale pods. Scale to zero/retire only by owner decision."
},
{
"namespace": "coulomb-social",
"workload": "coulomb-social",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 0.4,
"cpu_peak_m_7d": 24.6,
"memory_p95_mi_7d": 146.2,
"memory_peak_mi_7d": 146.3,
"throttle_ratio_7d": 0.0,
"restarts_7d": 1.0,
"rule_cpu_m": 15,
"action": "decrease + memory down",
"proposed_cpu_request_m": 15,
"proposed_memory_request_mi": 176,
"owner_repo": "coulomb-social",
"receiving_record": "needs receiving task in coulomb-social",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "databases",
"workload": "forgejo-db",
"pods": 1,
"cpu_request_m": 200,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 512.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 68.8,
"cpu_peak_m_7d": 160.9,
"memory_p95_mi_7d": 249.4,
"memory_peak_mi_7d": 286.4,
"throttle_ratio_7d": 0.07,
"restarts_7d": 0.0,
"rule_cpu_m": 105,
"action": "decrease + memory down",
"proposed_cpu_request_m": 105,
"proposed_memory_request_mi": 288,
"owner_repo": "rapp-postgres",
"receiving_record": "needs receiving task in rapp-postgres",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "databases",
"workload": "net-kingdom-pg",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 10.3,
"cpu_peak_m_7d": 48.0,
"memory_p95_mi_7d": 228.7,
"memory_peak_mi_7d": 497.3,
"throttle_ratio_7d": 0.001,
"restarts_7d": 0.0,
"rule_cpu_m": 50,
"action": "decrease",
"proposed_cpu_request_m": 50,
"proposed_memory_request_mi": 256.0,
"owner_repo": "rapp-postgres",
"receiving_record": "needs receiving task in rapp-postgres",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "databases",
"workload": "platform-pg",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 13.0,
"cpu_peak_m_7d": 68.7,
"memory_p95_mi_7d": 160.1,
"memory_peak_mi_7d": 263.9,
"throttle_ratio_7d": 0.001,
"restarts_7d": 0.0,
"rule_cpu_m": 50,
"action": "decrease + memory down",
"proposed_cpu_request_m": 50,
"proposed_memory_request_mi": 192,
"owner_repo": "rapp-postgres",
"receiving_record": "needs receiving task in rapp-postgres",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "databases",
"workload": "platform-pg-2",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 12.0,
"cpu_peak_m_7d": 62.3,
"memory_p95_mi_7d": 198.8,
"memory_peak_mi_7d": 267.7,
"throttle_ratio_7d": 0.001,
"restarts_7d": 1.0,
"rule_cpu_m": 50,
"action": "decrease",
"proposed_cpu_request_m": 50,
"proposed_memory_request_mi": 256.0,
"owner_repo": "rapp-postgres",
"receiving_record": "needs receiving task in rapp-postgres",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "databases",
"workload": "state-hub-db",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 36.7,
"cpu_peak_m_7d": 133.2,
"memory_p95_mi_7d": 349.4,
"memory_peak_mi_7d": 359.0,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 70,
"action": "increase + memory up",
"proposed_cpu_request_m": 70,
"proposed_memory_request_mi": 416,
"owner_repo": "state-hub",
"receiving_record": "needs receiving task in state-hub",
"rationale": "Rule p95x1.5 / peakx0.5 / floor. Zero-request CNPG cluster, source state-hub/deploy/railiance/platform/state-hub-db-cluster.yaml; memory p95 349Mi."
},
{
"namespace": "email-connect",
"workload": "email-connect",
"pods": 1,
"cpu_request_m": 25,
"cpu_limit_m": 250,
"containers_without_cpu_limit": 0,
"memory_request_mi": 64.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 0.3,
"cpu_peak_m_7d": 0.8,
"memory_p95_mi_7d": 13.0,
"memory_peak_mi_7d": 13.0,
"throttle_ratio_7d": 0.001,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 64.0,
"owner_repo": "email-connect",
"receiving_record": "needs receiving task in email-connect",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "external-secrets",
"workload": "external-secrets",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 4.1,
"cpu_peak_m_7d": 5.5,
"memory_p95_mi_7d": 51.2,
"memory_peak_mi_7d": 53.3,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "increase + memory up",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 64,
"owner_repo": "railiance-platform",
"receiving_record": "needs receiving task in railiance-platform",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "external-secrets",
"workload": "external-secrets-cert-controller",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 1.0,
"cpu_peak_m_7d": 1.5,
"memory_p95_mi_7d": 42.2,
"memory_peak_mi_7d": 51.4,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "increase + memory up",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 64,
"owner_repo": "railiance-platform",
"receiving_record": "needs receiving task in railiance-platform",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "external-secrets",
"workload": "external-secrets-webhook",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 0.5,
"cpu_peak_m_7d": 0.6,
"memory_p95_mi_7d": 63.2,
"memory_peak_mi_7d": 111.9,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "increase + memory up",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 80,
"owner_repo": "railiance-platform",
"receiving_record": "needs receiving task in railiance-platform",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "flex-auth",
"workload": "flex-auth",
"pods": 9,
"cpu_request_m": 145,
"cpu_limit_m": 2700,
"containers_without_cpu_limit": 0,
"memory_request_mi": 288.0,
"memory_limit_mi": 1728.0,
"cpu_p95_m_7d": 2.2,
"cpu_peak_m_7d": 18.6,
"memory_p95_mi_7d": 139.8,
"memory_peak_mi_7d": 191.1,
"throttle_ratio_7d": 0.002,
"restarts_7d": 0.0,
"rule_cpu_m": 45,
"action": "decrease + memory down",
"proposed_cpu_request_m": 45,
"proposed_memory_request_mi": 176,
"owner_repo": "flex-auth (no local checkout)",
"receiving_record": "needs receiving task in flex-auth",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "forgejo",
"workload": "forgejo-runner",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 2,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 13.1,
"cpu_peak_m_7d": 243.2,
"memory_p95_mi_7d": 428.0,
"memory_peak_mi_7d": 734.1,
"throttle_ratio_7d": null,
"restarts_7d": 2.0,
"rule_cpu_m": 125,
"action": "increase + memory up",
"proposed_cpu_request_m": 125,
"proposed_memory_request_mi": 496,
"owner_repo": "railiance-forge",
"receiving_record": "needs receiving task in railiance-forge",
"rationale": "Rule p95x1.5 / peakx0.5 / floor. Zero request, dind unbounded. Admit one concurrent job: request ~125m/512Mi, dind limit ~1500m/2Gi; job bursts above the request are the build reserve."
},
{
"namespace": "forgejo",
"workload": "gitea",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 128.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 133.2,
"cpu_peak_m_7d": 376.7,
"memory_p95_mi_7d": 955.5,
"memory_peak_mi_7d": 1005.0,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 200,
"action": "increase + memory up",
"proposed_cpu_request_m": 200,
"proposed_memory_request_mi": 1104,
"owner_repo": "railiance-forge",
"receiving_record": "needs receiving task in railiance-forge",
"rationale": "Rule p95x1.5 / peakx0.5 / floor. Main container has no requests/limits (100m effective comes from the init container); memory p95 956Mi vs 128Mi. Add memory request ~1Gi and limit ~1.5Gi."
},
{
"namespace": "issue-core",
"workload": "issue-core",
"pods": 1,
"cpu_request_m": 50,
"cpu_limit_m": 500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 128.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 2.0,
"cpu_peak_m_7d": 3.4,
"memory_p95_mi_7d": 41.4,
"memory_peak_mi_7d": 50.7,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease + memory down",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 48,
"owner_repo": "issue-core",
"receiving_record": "needs receiving task in issue-core",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "knative-serving",
"workload": "knative-serving",
"pods": 4,
"cpu_request_m": 140,
"cpu_limit_m": 3500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 360.0,
"memory_limit_mi": 3100.0,
"cpu_p95_m_7d": 7.2,
"cpu_peak_m_7d": 9.9,
"memory_p95_mi_7d": 145.7,
"memory_peak_mi_7d": 210.9,
"throttle_ratio_7d": 0,
"restarts_7d": 0.0,
"rule_cpu_m": 40,
"action": "decrease + memory down",
"proposed_cpu_request_m": 40,
"proposed_memory_request_mi": 176,
"owner_repo": "rail-knative",
"receiving_record": "needs receiving task in rail-knative",
"rationale": "Rule p95x1.5 / peakx0.5 / floor. Requests already reduced by RAIL-KNATIVE-WP-0002 (finished); the open risk is HPA maxReplicas (see budget)."
},
{
"namespace": "knative-serving",
"workload": "net-kourier-controller",
"pods": 1,
"cpu_request_m": 30,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 200.0,
"memory_limit_mi": 500.0,
"cpu_p95_m_7d": 0.8,
"cpu_peak_m_7d": 1.6,
"memory_p95_mi_7d": 53.3,
"memory_peak_mi_7d": 79.5,
"throttle_ratio_7d": 0,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "decrease + memory down",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 64,
"owner_repo": "rail-knative",
"receiving_record": "needs receiving task in rail-knative",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "kourier-system",
"workload": "3scale-kourier-gateway",
"pods": 1,
"cpu_request_m": 50,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 200.0,
"memory_limit_mi": 800.0,
"cpu_p95_m_7d": 3.6,
"cpu_peak_m_7d": 3.8,
"memory_p95_mi_7d": 28.6,
"memory_peak_mi_7d": 33.3,
"throttle_ratio_7d": 0,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "decrease + memory down",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 48,
"owner_repo": "rail-knative",
"receiving_record": "needs receiving task in rail-knative",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "kube-system",
"workload": "coredns-7bdb54f89",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 70.0,
"memory_limit_mi": 170.0,
"cpu_p95_m_7d": 7.8,
"cpu_peak_m_7d": 10.3,
"memory_p95_mi_7d": 35.3,
"memory_peak_mi_7d": 76.7,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 15,
"action": "decrease",
"proposed_cpu_request_m": 50,
"proposed_memory_request_mi": 70.0,
"owner_repo": "railiance-cluster",
"receiving_record": "needs receiving task in railiance-cluster",
"rationale": "DNS for every workload: floor 50m regardless of p95 7.8m."
},
{
"namespace": "kube-system",
"workload": "local-path-provisioner",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 0.1,
"cpu_peak_m_7d": 0.3,
"memory_p95_mi_7d": 21.8,
"memory_peak_mi_7d": 24.4,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "increase",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 0.0,
"owner_repo": "railiance-cluster",
"receiving_record": "needs receiving task in railiance-cluster",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "kube-system",
"workload": "metrics-server-786d997795",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 70.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 4.9,
"cpu_peak_m_7d": 5.1,
"memory_p95_mi_7d": 46.6,
"memory_peak_mi_7d": 48.4,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "decrease",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 70.0,
"owner_repo": "railiance-cluster",
"receiving_record": "needs receiving task in railiance-cluster",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "kube-system",
"workload": "traefik",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 3.8,
"cpu_peak_m_7d": 16.0,
"memory_p95_mi_7d": 69.1,
"memory_peak_mi_7d": 148.7,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "increase + memory up",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 80,
"owner_repo": "railiance-cluster",
"receiving_record": "needs receiving task in railiance-cluster",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "mas",
"workload": "mas-mx",
"pods": 1,
"cpu_request_m": 20,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 64.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 0.6,
"cpu_peak_m_7d": 3.6,
"memory_p95_mi_7d": 43.3,
"memory_peak_mi_7d": 47.9,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 64.0,
"owner_repo": "mail-address-semantics",
"receiving_record": "needs receiving task in mail-address-semantics",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "mfa",
"workload": "net-kingdom-sso-mfa",
"pods": 1,
"cpu_request_m": 110,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 384.0,
"memory_limit_mi": 896.0,
"cpu_p95_m_7d": 12.2,
"cpu_peak_m_7d": 23.1,
"memory_p95_mi_7d": 225.6,
"memory_peak_mi_7d": 225.8,
"throttle_ratio_7d": 0.049,
"restarts_7d": 0.0,
"rule_cpu_m": 20,
"action": "decrease + memory down",
"proposed_cpu_request_m": 20,
"proposed_memory_request_mi": 272,
"owner_repo": "net-kingdom",
"receiving_record": "needs receiving task in net-kingdom",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "openbao",
"workload": "railiance-platform",
"pods": 1,
"cpu_request_m": 25,
"cpu_limit_m": 200,
"containers_without_cpu_limit": 0,
"memory_request_mi": 32.0,
"memory_limit_mi": 128.0,
"cpu_p95_m_7d": 0.2,
"cpu_peak_m_7d": 0.5,
"memory_p95_mi_7d": 4.8,
"memory_peak_mi_7d": 4.8,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "decrease",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 32.0,
"owner_repo": "railiance-platform",
"receiving_record": "needs receiving task in railiance-platform",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "playwright",
"workload": "rapp-playwright",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 41.5,
"cpu_peak_m_7d": 62.7,
"memory_p95_mi_7d": 285.1,
"memory_peak_mi_7d": 437.2,
"throttle_ratio_7d": 0.238,
"restarts_7d": 1.0,
"rule_cpu_m": 65,
"action": "decrease + review CPU limit (throttled) + memory up",
"proposed_cpu_request_m": 65,
"proposed_memory_request_mi": 336,
"owner_repo": "railiance-platform",
"receiving_record": "needs receiving task in railiance-platform",
"rationale": "Rule p95x1.5 / peakx0.5 / floor. 23.8% throttled; RPF-WP-0056 covers admission, not sizing."
},
{
"namespace": "rapp-qonto",
"workload": "rapp-qonto-audit-collector",
"pods": 1,
"cpu_request_m": 20,
"cpu_limit_m": 200,
"containers_without_cpu_limit": 0,
"memory_request_mi": 32.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 0.4,
"cpu_peak_m_7d": 3.5,
"memory_p95_mi_7d": 14.2,
"memory_peak_mi_7d": 14.5,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 32.0,
"owner_repo": "rapp-qonto",
"receiving_record": "needs receiving task in rapp-qonto",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "rapp-qonto-egress",
"workload": "qonto-egress-proxy",
"pods": 1,
"cpu_request_m": 20,
"cpu_limit_m": 200,
"containers_without_cpu_limit": 0,
"memory_request_mi": 64.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 0.4,
"cpu_peak_m_7d": 0.4,
"memory_p95_mi_7d": 161.8,
"memory_peak_mi_7d": 190.2,
"throttle_ratio_7d": 0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease + memory up",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 192,
"owner_repo": "rapp-qonto",
"receiving_record": "needs receiving task in rapp-qonto",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "rein-aharness",
"workload": "rein-aharness",
"pods": 1,
"cpu_request_m": 25,
"cpu_limit_m": 500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 64.0,
"memory_limit_mi": 512.0,
"cpu_p95_m_7d": 0.0,
"cpu_peak_m_7d": 0.0,
"memory_p95_mi_7d": 0.4,
"memory_peak_mi_7d": 0.4,
"throttle_ratio_7d": 0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 64.0,
"owner_repo": "rein-aharness",
"receiving_record": "needs receiving task in rein-aharness",
"rationale": "Rule p95x1.5 / peakx0.5 / floor. 0m/0Mi recorded over 7d; confirm the service is meant to run."
},
{
"namespace": "reuse",
"workload": "reuse-surface",
"pods": 2,
"cpu_request_m": 110,
"cpu_limit_m": 550,
"containers_without_cpu_limit": 0,
"memory_request_mi": 288.0,
"memory_limit_mi": 576.0,
"cpu_p95_m_7d": 2.1,
"cpu_peak_m_7d": 10.2,
"memory_p95_mi_7d": 56.2,
"memory_peak_mi_7d": 57.0,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "decrease + memory down",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 80,
"owner_repo": "reuse-surface",
"receiving_record": "needs receiving task in reuse-surface",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "sbom-nexus",
"workload": "sbom-nexus",
"pods": 1,
"cpu_request_m": 25,
"cpu_limit_m": 500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 64.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 3.8,
"cpu_peak_m_7d": 5.8,
"memory_p95_mi_7d": 80.0,
"memory_peak_mi_7d": 80.0,
"throttle_ratio_7d": 0.0,
"restarts_7d": 1.0,
"rule_cpu_m": 10,
"action": "decrease",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 64.0,
"owner_repo": "sbom-nexus",
"receiving_record": "needs receiving task in sbom-nexus",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "sso",
"workload": "net-kingdom-sso-mfa",
"pods": 4,
"cpu_request_m": 150,
"cpu_limit_m": 1150,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 640.0,
"cpu_p95_m_7d": 22.4,
"cpu_peak_m_7d": 34.5,
"memory_p95_mi_7d": 140.5,
"memory_peak_mi_7d": 179.1,
"throttle_ratio_7d": 0.537,
"restarts_7d": 2.0,
"rule_cpu_m": 40,
"action": "decrease + review CPU limit (throttled) + memory down",
"proposed_cpu_request_m": 40,
"proposed_memory_request_mi": 176,
"owner_repo": "net-kingdom",
"receiving_record": "needs receiving task in net-kingdom",
"rationale": "Rule p95x1.5 / peakx0.5 / floor. 53.7% of CFS periods throttled: review the CPU limit on the login path, independent of the request."
},
{
"namespace": "state-hub",
"workload": "railiance-apps",
"pods": 2,
"cpu_request_m": 260,
"cpu_limit_m": 1500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 640.0,
"memory_limit_mi": 2560.0,
"cpu_p95_m_7d": 258.5,
"cpu_peak_m_7d": 975.0,
"memory_p95_mi_7d": 744.5,
"memory_peak_mi_7d": 797.5,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 490,
"action": "increase",
"proposed_cpu_request_m": 390,
"proposed_memory_request_mi": 640.0,
"owner_repo": "state-hub",
"receiving_record": "needs receiving task in state-hub",
"rationale": "API p95 258m at 250m request = p95x1.5; the 975m peak is release/migration bursts carried by the surge reserve. Preflight models API surge 100m but live API pod requests 250m."
},
{
"namespace": "target-revenue",
"workload": "target-revenue",
"pods": 1,
"cpu_request_m": 50,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 512.0,
"cpu_p95_m_7d": 2.5,
"cpu_peak_m_7d": 2.6,
"memory_p95_mi_7d": 52.0,
"memory_peak_mi_7d": 70.9,
"throttle_ratio_7d": 0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease + memory down",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 64,
"owner_repo": "target-revenue",
"receiving_record": "needs receiving task in target-revenue",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "target-revenue",
"workload": "target-revenue-pg",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 7.6,
"cpu_peak_m_7d": 9.2,
"memory_p95_mi_7d": 56.2,
"memory_peak_mi_7d": 63.4,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 50,
"action": "increase + memory up",
"proposed_cpu_request_m": 50,
"proposed_memory_request_mi": 80,
"owner_repo": "target-revenue",
"receiving_record": "needs receiving task in target-revenue",
"rationale": "Rule p95x1.5 / peakx0.5 / floor. Zero-request CNPG cluster, source target-revenue/k8s/railiance/cnpg-cluster.yaml."
},
{
"namespace": "telemetry",
"workload": "alertmanager",
"pods": 1,
"cpu_request_m": 25,
"cpu_limit_m": 250,
"containers_without_cpu_limit": 1,
"memory_request_mi": 64.0,
"memory_limit_mi": 128.0,
"cpu_p95_m_7d": 0.7,
"cpu_peak_m_7d": 0.8,
"memory_p95_mi_7d": 38.6,
"memory_peak_mi_7d": 56.8,
"throttle_ratio_7d": 0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 64.0,
"owner_repo": "rapp-telemetry",
"receiving_record": "needs receiving task in rapp-telemetry",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "telemetry",
"workload": "grafana",
"pods": 1,
"cpu_request_m": 70,
"cpu_limit_m": 700,
"containers_without_cpu_limit": 0,
"memory_request_mi": 192.0,
"memory_limit_mi": 640.0,
"cpu_p95_m_7d": 12.5,
"cpu_peak_m_7d": 61.0,
"memory_p95_mi_7d": 436.0,
"memory_peak_mi_7d": 520.0,
"throttle_ratio_7d": 0.007,
"restarts_7d": 3.0,
"rule_cpu_m": 35,
"action": "decrease + memory up",
"proposed_cpu_request_m": 35,
"proposed_memory_request_mi": 512,
"owner_repo": "rapp-telemetry",
"receiving_record": "needs receiving task in rapp-telemetry",
"rationale": "Rule p95x1.5 / peakx0.5 / floor. Memory p95 436Mi vs 192Mi request; 3 restarts in 7d (cause not verified)."
},
{
"namespace": "telemetry",
"workload": "kube-state-metrics",
"pods": 1,
"cpu_request_m": 25,
"cpu_limit_m": 250,
"containers_without_cpu_limit": 0,
"memory_request_mi": 64.0,
"memory_limit_mi": 128.0,
"cpu_p95_m_7d": 2.7,
"cpu_peak_m_7d": 4.5,
"memory_p95_mi_7d": 34.1,
"memory_peak_mi_7d": 63.5,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 64.0,
"owner_repo": "rapp-telemetry",
"receiving_record": "needs receiving task in rapp-telemetry",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "telemetry",
"workload": "prometheus",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 1,
"memory_request_mi": 512.0,
"memory_limit_mi": 1536.0,
"cpu_p95_m_7d": 134.5,
"cpu_peak_m_7d": 192.4,
"memory_p95_mi_7d": 992.4,
"memory_peak_mi_7d": 1088.9,
"throttle_ratio_7d": 0.002,
"restarts_7d": 0.0,
"rule_cpu_m": 205,
"action": "increase + memory up",
"proposed_cpu_request_m": 205,
"proposed_memory_request_mi": 1152,
"owner_repo": "rapp-telemetry",
"receiving_record": "needs receiving task in rapp-telemetry",
"rationale": "Rule p95x1.5 / peakx0.5 / floor. Memory p95 992Mi vs 512Mi request. Forgejo request recording rule still returns no series."
},
{
"namespace": "telemetry",
"workload": "rapp-telemetry",
"pods": 1,
"cpu_request_m": 25,
"cpu_limit_m": 500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 128.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 2.6,
"cpu_peak_m_7d": 4.4,
"memory_p95_mi_7d": 30.3,
"memory_peak_mi_7d": 38.0,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease + memory down",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 48,
"owner_repo": "rapp-telemetry",
"receiving_record": "needs receiving task in rapp-telemetry",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "tenant-engine",
"workload": "tenant-engine",
"pods": 1,
"cpu_request_m": 25,
"cpu_limit_m": 300,
"containers_without_cpu_limit": 0,
"memory_request_mi": 48.0,
"memory_limit_mi": 192.0,
"cpu_p95_m_7d": 2.4,
"cpu_peak_m_7d": 2.6,
"memory_p95_mi_7d": 53.1,
"memory_peak_mi_7d": 67.8,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 48.0,
"owner_repo": "tenant-engine",
"receiving_record": "needs receiving task in tenant-engine",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "user-engine",
"workload": "user-engine",
"pods": 1,
"cpu_request_m": 50,
"cpu_limit_m": 500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 64.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 0.4,
"cpu_peak_m_7d": 4.2,
"memory_p95_mi_7d": 55.7,
"memory_peak_mi_7d": 56.7,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "decrease",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 64.0,
"owner_repo": "user-engine",
"receiving_record": "needs receiving task in user-engine",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "user-engine",
"workload": "user-engine-pg",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 7.5,
"cpu_peak_m_7d": 9.7,
"memory_p95_mi_7d": 78.3,
"memory_peak_mi_7d": 102.7,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 50,
"action": "decrease + memory down",
"proposed_cpu_request_m": 50,
"proposed_memory_request_mi": 96,
"owner_repo": "user-engine",
"receiving_record": "needs receiving task in user-engine",
"rationale": "Rule p95x1.5 / peakx0.5 / floor."
},
{
"namespace": "vergabe-demo-company",
"workload": "vergabe-teilnahme",
"pods": 1,
"cpu_request_m": 60,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 0.5,
"cpu_peak_m_7d": 20.3,
"memory_p95_mi_7d": 171.5,
"memory_peak_mi_7d": 171.6,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 15,
"action": "keep CPU (replay-backed) + memory up",
"proposed_cpu_request_m": 60,
"proposed_memory_request_mi": 512,
"owner_repo": "railiance-apps",
"receiving_record": "needs receiving task in railiance-apps",
"rationale": "Target replay (RAPPS-WP-0014-T04, railiance-apps 1af6d82): keep 60m request and 1000m/1Gi limits; 0 errors, ordinary p95 0.192s under 36% throttling at ~25 req/s; loaded working set 320-480MiB exceeds the 256Mi request -> 512Mi."
},
{
"namespace": "activity-core",
"workload": "actcore-temporal-ui-tls-2-1888679036-1756117428",
"pods": 1,
"cpu_request_m": 10,
"cpu_limit_m": 100,
"containers_without_cpu_limit": 0,
"memory_request_mi": 64.0,
"memory_limit_mi": 64.0,
"cpu_p95_m_7d": 0.0,
"cpu_peak_m_7d": 0.1,
"memory_p95_mi_7d": 12.8,
"memory_peak_mi_7d": 18.5,
"throttle_ratio_7d": 0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "keep",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 64.0,
"owner_repo": "activity-core",
"receiving_record": null,
"rationale": "Within rule tolerance; keep."
},
{
"namespace": "approval-engine",
"workload": "approval-engine",
"pods": 1,
"cpu_request_m": 10,
"cpu_limit_m": 500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 64.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 0.7,
"cpu_peak_m_7d": 16.3,
"memory_p95_mi_7d": 30.1,
"memory_peak_mi_7d": 30.6,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "keep",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 64.0,
"owner_repo": "approval-engine",
"receiving_record": null,
"rationale": "Within rule tolerance; keep."
},
{
"namespace": "argocd",
"workload": "argocd-applicationset-controller",
"pods": 1,
"cpu_request_m": 10,
"cpu_limit_m": 250,
"containers_without_cpu_limit": 0,
"memory_request_mi": 64.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 0.7,
"cpu_peak_m_7d": 1.0,
"memory_p95_mi_7d": 84.1,
"memory_peak_mi_7d": 113.1,
"throttle_ratio_7d": 0,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "keep",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 64.0,
"owner_repo": "railiance-enablement",
"receiving_record": null,
"rationale": "Within rule tolerance; keep."
},
{
"namespace": "argocd",
"workload": "argocd-redis",
"pods": 1,
"cpu_request_m": 10,
"cpu_limit_m": 200,
"containers_without_cpu_limit": 0,
"memory_request_mi": 32.0,
"memory_limit_mi": 128.0,
"cpu_p95_m_7d": 5.0,
"cpu_peak_m_7d": 5.1,
"memory_p95_mi_7d": 6.4,
"memory_peak_mi_7d": 26.9,
"throttle_ratio_7d": 0,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "keep",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 32.0,
"owner_repo": "railiance-enablement",
"receiving_record": null,
"rationale": "Within rule tolerance; keep."
},
{
"namespace": "bao-notice",
"workload": "bao-notice",
"pods": 1,
"cpu_request_m": 5,
"cpu_limit_m": 100,
"containers_without_cpu_limit": 0,
"memory_request_mi": 16.0,
"memory_limit_mi": 64.0,
"cpu_p95_m_7d": 0.0,
"cpu_peak_m_7d": 0.1,
"memory_p95_mi_7d": 4.3,
"memory_peak_mi_7d": 4.4,
"throttle_ratio_7d": 0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "keep",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 16.0,
"owner_repo": "railiance-platform",
"receiving_record": null,
"rationale": "Within rule tolerance; keep."
},
{
"namespace": "databases",
"workload": "apps-pg",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 1000,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 1024.0,
"cpu_p95_m_7d": 8.0,
"cpu_peak_m_7d": 55.6,
"memory_p95_mi_7d": 89.1,
"memory_peak_mi_7d": 116.1,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 50,
"action": "keep",
"proposed_cpu_request_m": 100,
"proposed_memory_request_mi": 256.0,
"owner_repo": "rapp-postgres",
"receiving_record": null,
"rationale": "Keep 100m (rule would give 50m): Vergabe replay adds ~320m mean / ~480m p95 incremental PostgreSQL CPU at synthetic load; shared apps-pg behaviour unproven."
},
{
"namespace": "informed-decision",
"workload": "informed-decision",
"pods": 1,
"cpu_request_m": 5,
"cpu_limit_m": 500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 64.0,
"memory_limit_mi": 256.0,
"cpu_p95_m_7d": 1.2,
"cpu_peak_m_7d": 23.2,
"memory_p95_mi_7d": 38.8,
"memory_peak_mi_7d": 46.7,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 15,
"action": "keep",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 64.0,
"owner_repo": "informed-decision",
"receiving_record": null,
"rationale": "Within rule tolerance; keep."
},
{
"namespace": "kube-system",
"workload": "svclb-mas-smtp-d86db2b1",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 0.0,
"cpu_peak_m_7d": 0.0,
"memory_p95_mi_7d": 0.5,
"memory_peak_mi_7d": 1.9,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "keep",
"proposed_cpu_request_m": 0,
"proposed_memory_request_mi": 0.0,
"owner_repo": "railiance-cluster",
"receiving_record": null,
"rationale": "k3s klipper DaemonSet, ~0m measured; accepted documented zero."
},
{
"namespace": "kube-system",
"workload": "svclb-traefik-0c8aecaf",
"pods": 1,
"cpu_request_m": 0,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 2,
"memory_request_mi": 0.0,
"memory_limit_mi": 0.0,
"cpu_p95_m_7d": 0.0,
"cpu_peak_m_7d": 0.0,
"memory_p95_mi_7d": 0.9,
"memory_peak_mi_7d": 2.3,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "keep",
"proposed_cpu_request_m": 0,
"proposed_memory_request_mi": 0.0,
"owner_repo": "railiance-cluster",
"receiving_record": null,
"rationale": "k3s klipper DaemonSet, ~0m measured; accepted documented zero."
},
{
"namespace": "mas",
"workload": "mas-statute",
"pods": 1,
"cpu_request_m": 5,
"cpu_limit_m": 0,
"containers_without_cpu_limit": 1,
"memory_request_mi": 32.0,
"memory_limit_mi": 64.0,
"cpu_p95_m_7d": 0.3,
"cpu_peak_m_7d": 0.5,
"memory_p95_mi_7d": 9.6,
"memory_peak_mi_7d": 9.6,
"throttle_ratio_7d": null,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "keep",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 32.0,
"owner_repo": "mail-address-semantics",
"receiving_record": null,
"rationale": "Within rule tolerance; keep."
},
{
"namespace": "openbao",
"workload": "openbao",
"pods": 1,
"cpu_request_m": 100,
"cpu_limit_m": 500,
"containers_without_cpu_limit": 0,
"memory_request_mi": 256.0,
"memory_limit_mi": 512.0,
"cpu_p95_m_7d": 13.1,
"cpu_peak_m_7d": 181.3,
"memory_p95_mi_7d": 177.0,
"memory_peak_mi_7d": 399.0,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 95,
"action": "keep",
"proposed_cpu_request_m": 100,
"proposed_memory_request_mi": 256.0,
"owner_repo": "railiance-platform",
"receiving_record": null,
"rationale": "Within rule tolerance; keep."
},
{
"namespace": "policy-nexus",
"workload": "policy-nexus",
"pods": 1,
"cpu_request_m": 10,
"cpu_limit_m": 100,
"containers_without_cpu_limit": 0,
"memory_request_mi": 32.0,
"memory_limit_mi": 64.0,
"cpu_p95_m_7d": 0.1,
"cpu_peak_m_7d": 0.4,
"memory_p95_mi_7d": 11.4,
"memory_peak_mi_7d": 11.4,
"throttle_ratio_7d": 0.0,
"restarts_7d": 0.0,
"rule_cpu_m": 5,
"action": "keep",
"proposed_cpu_request_m": 10,
"proposed_memory_request_mi": 32.0,
"owner_repo": "policy-nexus",
"receiving_record": null,
"rationale": "Within rule tolerance; keep."
},
{
"namespace": "state-hub",
"workload": "state-hub",
"pods": 1,
"cpu_request_m": 5,
"cpu_limit_m": 100,
"containers_without_cpu_limit": 0,
"memory_request_mi": 24.0,
"memory_limit_mi": 96.0,
"cpu_p95_m_7d": 2.0,
"cpu_peak_m_7d": 6.1,
"memory_p95_mi_7d": 25.9,
"memory_peak_mi_7d": 26.1,
"throttle_ratio_7d": 0.001,
"restarts_7d": 0.0,
"rule_cpu_m": 10,
"action": "keep",
"proposed_cpu_request_m": 5,
"proposed_memory_request_mi": 24.0,
"owner_repo": "state-hub",
"receiving_record": null,
"rationale": "Within rule tolerance; keep."
}
],
"missing_receiving_tasks": {
"activity-core": [
"activity-core/activity-core"
],
"audit-core": [
"audit-core/audit-core"
],
"canned-prompts": [
"canned-prompts/canned-prompts"
],
"core-hub": [
"core-hub/rapp-core-hub"
],
"coulomb-social": [
"coulomb-social/coulomb-social"
],
"email-connect": [
"email-connect/email-connect"
],
"flex-auth": [
"flex-auth/flex-auth"
],
"ihp-railiance-probe": [
"coulomb/ihp-railiance-probe"
],
"issue-core": [
"issue-core/issue-core"
],
"mail-address-semantics": [
"mas/mas-mx"
],
"net-kingdom": [
"mfa/net-kingdom-sso-mfa",
"sso/net-kingdom-sso-mfa"
],
"rail-knative": [
"knative-serving/knative-serving",
"knative-serving/net-kourier-controller",
"kourier-system/3scale-kourier-gateway"
],
"railiance-apps": [
"vergabe-demo-company/vergabe-teilnahme"
],
"railiance-cluster": [
"cert-manager/cainjector",
"cert-manager/cert-manager",
"cert-manager/webhook",
"kube-system/coredns-7bdb54f89",
"kube-system/local-path-provisioner",
"kube-system/metrics-server-786d997795",
"kube-system/traefik"
],
"railiance-enablement": [
"argocd/argocd-application-controller",
"argocd/argocd-repo-server"
],
"railiance-forge": [
"forgejo/forgejo-runner",
"forgejo/gitea"
],
"railiance-platform": [
"external-secrets/external-secrets",
"external-secrets/external-secrets-cert-controller",
"external-secrets/external-secrets-webhook",
"openbao/railiance-platform",
"playwright/rapp-playwright"
],
"rapp-postgres": [
"cnpg-system/cloudnative-pg",
"databases/forgejo-db",
"databases/net-kingdom-pg",
"databases/platform-pg",
"databases/platform-pg-2"
],
"rapp-qonto": [
"rapp-qonto/rapp-qonto-audit-collector",
"rapp-qonto-egress/qonto-egress-proxy"
],
"rapp-telemetry": [
"telemetry/alertmanager",
"telemetry/grafana",
"telemetry/kube-state-metrics",
"telemetry/prometheus",
"telemetry/rapp-telemetry"
],
"rein-aharness": [
"rein-aharness/rein-aharness"
],
"reuse-surface": [
"reuse/reuse-surface"
],
"sbom-nexus": [
"sbom-nexus/sbom-nexus"
],
"state-hub": [
"databases/state-hub-db",
"state-hub/railiance-apps"
],
"target-revenue": [
"target-revenue/target-revenue",
"target-revenue/target-revenue-pg"
],
"tenant-engine": [
"tenant-engine/tenant-engine"
],
"user-engine": [
"user-engine/user-engine",
"user-engine/user-engine-pg"
]
}
}