@@ -22,10 +22,59 @@ tests:
2222 runbook_url : " https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeapidown"
2323
2424- interval : 1m
25- name : KubeletDown fires when kubelet target is absent
25+ name : KubeletDown fires when kubelet target is absent but nodes exist
2626 input_series :
27+ # kube_node_info from kube-state-metrics - stays present to indicate nodes exist
28+ - series : ' kube_node_info{job="kube-state-metrics", cluster="test-cluster", node="node1"}'
29+ values : ' 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1'
30+ # kubelet up metric - goes absent after 5 minutes
31+ - series : ' up{job="kubelet", cluster="test-cluster", instance="node1"}'
32+ values : ' 1 1 1 1 1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _'
33+ alert_rule_test :
34+ - eval_time : 10m
35+ alertname : KubeletDown
36+ - eval_time : 25m
37+ alertname : KubeletDown
38+ exp_alerts :
39+ - exp_labels :
40+ severity : " critical"
41+ cluster : " test-cluster"
42+ exp_annotations :
43+ description : " Kubelet has disappeared from Prometheus target discovery."
44+ summary : " Target disappeared from Prometheus target discovery."
45+ runbook_url : " https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletdown"
46+
47+ - interval : 1m
48+ name : KubeletDown does not fire when kubelet is up
49+ input_series :
50+ - series : ' kube_node_info{job="kube-state-metrics", cluster="test-cluster", node="node1"}'
51+ values : ' 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1'
52+ - series : ' up{job="kubelet", cluster="test-cluster", instance="node1"}'
53+ values : ' 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1'
54+ alert_rule_test :
55+ - eval_time : 25m
56+ alertname : KubeletDown
57+ exp_alerts : []
58+
59+ - interval : 1m
60+ name : KubeletDown does not fire when no nodes exist (no kube_node_info)
61+ input_series :
62+ # No kube_node_info means no nodes in this cluster - kubelet absence is expected
63+ - series : ' up{job="kubelet", cluster="test-cluster", instance="node1"}'
64+ values : ' 1 1 1 1 1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _'
65+ alert_rule_test :
66+ - eval_time : 25m
67+ alertname : KubeletDown
68+ exp_alerts : []
69+
70+ - interval : 1m
71+ name : KubeletDown fires without cluster label (single-cluster setup)
72+ input_series :
73+ # Metrics without cluster label - common in single-cluster setups without external_labels
74+ - series : ' kube_node_info{job="kube-state-metrics", node="node1"}'
75+ values : ' 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1'
2776 - series : ' up{job="kubelet", instance="node1"}'
28- values : ' 1 1 1 1 1 0 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _'
77+ values : ' 1 1 1 1 1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _'
2978 alert_rule_test :
3079 - eval_time : 10m
3180 alertname : KubeletDown
@@ -34,12 +83,35 @@ tests:
3483 exp_alerts :
3584 - exp_labels :
3685 severity : " critical"
37- job : " kubelet"
3886 exp_annotations :
3987 description : " Kubelet has disappeared from Prometheus target discovery."
4088 summary : " Target disappeared from Prometheus target discovery."
4189 runbook_url : " https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubeletdown"
4290
91+ - interval : 1m
92+ name : KubeletDown does not fire when kubelet is up (single-cluster setup)
93+ input_series :
94+ # Metrics without cluster label - healthy single-cluster setup
95+ - series : ' kube_node_info{job="kube-state-metrics", node="node1"}'
96+ values : ' 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1'
97+ - series : ' up{job="kubelet", instance="node1"}'
98+ values : ' 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1'
99+ alert_rule_test :
100+ - eval_time : 25m
101+ alertname : KubeletDown
102+ exp_alerts : []
103+
104+ - interval : 1m
105+ name : KubeletDown does not fire when no nodes exist (single-cluster setup)
106+ input_series :
107+ # No kube_node_info and no cluster label - kubelet absence is expected
108+ - series : ' up{job="kubelet", instance="node1"}'
109+ values : ' 1 1 1 1 1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _'
110+ alert_rule_test :
111+ - eval_time : 25m
112+ alertname : KubeletDown
113+ exp_alerts : []
114+
43115- interval : 1m
44116 name : KubeSchedulerDown fires when kube-scheduler target is absent
45117 input_series :
0 commit comments