|
55 | 55 | summary: "Flare cluster {{`{{ $labels.cluster }}`}}: draining master has NO successor — data-bearing node dies at grace expiry" |
56 | 56 | runbook: docs/RUNBOOK.md#drain-no-successor |
57 | 57 |
|
| 58 | + # Pod memory pressure vs the limit. The POD cgroup slice |
| 59 | + # (container="") is what the OOM killer enforces and is the only |
| 60 | + # series that includes the tmpfs data pages (container-level |
| 61 | + # working_set misses most of them; kubectl top sums containers and |
| 62 | + # misses reparented tmpfs charges after container restarts). On a |
| 63 | + # tmpfs cluster OOM = data loss on that node, so page before it. |
| 64 | + - alert: FlarePodMemoryHigh |
| 65 | + expr: >- |
| 66 | + 100 * container_memory_working_set_bytes{container="", pod=~".+-nodes-.+"} |
| 67 | + / on(namespace, pod) group_left() |
| 68 | + cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{container="flared"} |
| 69 | + > 85 |
| 70 | + for: 10m |
| 71 | + labels: |
| 72 | + severity: warning |
| 73 | + annotations: |
| 74 | + summary: "Flare pod {{`{{ $labels.pod }}`}}: memory (incl. tmpfs data) above 85% of the limit" |
| 75 | + - alert: FlarePodMemoryCritical |
| 76 | + expr: >- |
| 77 | + 100 * container_memory_working_set_bytes{container="", pod=~".+-nodes-.+"} |
| 78 | + / on(namespace, pod) group_left() |
| 79 | + cluster:namespace:pod_memory:active:kube_pod_container_resource_limits{container="flared"} |
| 80 | + > 95 |
| 81 | + for: 2m |
| 82 | + labels: |
| 83 | + severity: critical |
| 84 | + annotations: |
| 85 | + summary: "Flare pod {{`{{ $labels.pod }}`}}: memory above 95% of the limit — OOM (= tmpfs data loss) imminent" |
| 86 | + |
58 | 87 | # A node stuck in Prepare is reconstructing forever — it will never |
59 | 88 | # serve and never be failed over (Prepare is exempt from dead |
60 | 89 | # detection by design). Runbook: docs/RUNBOOK.md#prepare-stuck |
|
0 commit comments