atlas pods: per-namespace top node via topk

This commit is contained in:
Brad Stein 2025-12-13 15:51:45 -03:00
parent 6ac01e5879
commit e87d54f19d
3 changed files with 14 additions and 15 deletions

View File

@ -219,6 +219,12 @@ CONTROL_READY_FRACTION_EXPR = (
UPTIME_AVAIL_EXPR = ( UPTIME_AVAIL_EXPR = (
f"min(({CONTROL_READY_FRACTION_EXPR}), ({TRAEFIK_READY_EXPR}))" f"min(({CONTROL_READY_FRACTION_EXPR}), ({TRAEFIK_READY_EXPR}))"
) )
# Tie-breaker to deterministically pick one node per namespace when shares tie.
NODE_TIEBREAKER = " + ".join(
f"({node_filter(node)}) * 1e-6 * {idx}"
for idx, node in enumerate(CONTROL_ALL + WORKER_NODES, start=1)
)
UPTIME_AVG_EXPR = f"avg_over_time(({UPTIME_AVAIL_EXPR})[{UPTIME_WINDOW}:5m])" UPTIME_AVG_EXPR = f"avg_over_time(({UPTIME_AVAIL_EXPR})[{UPTIME_WINDOW}:5m])"
UPTIME_PERCENT_EXPR = UPTIME_AVG_EXPR UPTIME_PERCENT_EXPR = UPTIME_AVG_EXPR
UPTIME_NINES_EXPR = f"-log10(1 - clamp_max({UPTIME_AVG_EXPR}, 0.999999999))" UPTIME_NINES_EXPR = f"-log10(1 - clamp_max({UPTIME_AVG_EXPR}, 0.999999999))"
@ -1173,23 +1179,15 @@ def build_pods_dashboard():
instant=True, instant=True,
) )
) )
panels.append( panels.append(
table_panel( table_panel(
10, 10,
"Namespace Plurality by Node", "Namespace Plurality by Node",
( 'topk by (namespace) (1, '
"max by (namespace,node) (" '(sum by (namespace,node) (kube_pod_info{pod!=""}) '
" {share}" '/ on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=""}), 1) * 100)'
" * on(namespace) group_left(node) (" ')',
" {share} == bool on(namespace) group_left() (max by (namespace) ({share}))"
" )"
")"
).format(
share=(
"(sum by (namespace,node) (kube_pod_info{pod!=\"\"}) "
"/ on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100)"
)
),
{"h": 8, "w": 24, "x": 0, "y": 42}, {"h": 8, "w": 24, "x": 0, "y": 42},
unit="percent", unit="percent",
transformations=[ transformations=[
@ -1199,6 +1197,7 @@ def build_pods_dashboard():
instant=True, instant=True,
) )
) )
return { return {
"uid": "atlas-pods", "uid": "atlas-pods",
"title": "Atlas Pods", "title": "Atlas Pods",

View File

@ -508,7 +508,7 @@
}, },
"targets": [ "targets": [
{ {
"expr": "max by (namespace,node) ( (sum by (namespace,node) (kube_pod_info{pod!=\"\"}) / on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100) * on(namespace) group_left(node) ( (sum by (namespace,node) (kube_pod_info{pod!=\"\"}) / on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100) == bool on(namespace) group_left() (max by (namespace) ((sum by (namespace,node) (kube_pod_info{pod!=\"\"}) / on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100))) ))", "expr": "topk by (namespace) (1, (sum by (namespace,node) (kube_pod_info{pod!=\"\"}) / on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100))",
"refId": "A", "refId": "A",
"instant": true "instant": true
} }

View File

@ -517,7 +517,7 @@ data:
}, },
"targets": [ "targets": [
{ {
"expr": "max by (namespace,node) ( (sum by (namespace,node) (kube_pod_info{pod!=\"\"}) / on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100) * on(namespace) group_left(node) ( (sum by (namespace,node) (kube_pod_info{pod!=\"\"}) / on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100) == bool on(namespace) group_left() (max by (namespace) ((sum by (namespace,node) (kube_pod_info{pod!=\"\"}) / on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100))) ))", "expr": "topk by (namespace) (1, (sum by (namespace,node) (kube_pod_info{pod!=\"\"}) / on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100))",
"refId": "A", "refId": "A",
"instant": true "instant": true
} }