Skip to content

Commit 0a50cab

Browse files
committed
added reason label
1 parent 61cb551 commit 0a50cab

File tree

3 files changed

+70
-23
lines changed

3 files changed

+70
-23
lines changed

docs/metrics/workload/deployment-metrics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
| kube_deployment_status_replicas_unavailable | Gauge | | `deployment`=&lt;deployment-name&gt; <br> `namespace`=&lt;deployment-namespace&gt; | STABLE |
1010
| kube_deployment_status_replicas_updated | Gauge | | `deployment`=&lt;deployment-name&gt; <br> `namespace`=&lt;deployment-namespace&gt; | STABLE |
1111
| kube_deployment_status_observed_generation | Gauge | | `deployment`=&lt;deployment-name&gt; <br> `namespace`=&lt;deployment-namespace&gt; | STABLE |
12-
| kube_deployment_status_condition | Gauge | | `deployment`=&lt;deployment-name&gt; <br> `namespace`=&lt;deployment-namespace&gt; <br> `condition`=&lt;deployment-condition&gt; <br> `status`=&lt;true\|false\|unknown&gt; | STABLE |
12+
| kube_deployment_status_condition | Gauge | | `deployment`=&lt;deployment-name&gt; <br> `namespace`=&lt;deployment-namespace&gt; <br> `reason`=&lt;deployment-transition-reason&gt; <br> `condition`=&lt;deployment-condition&gt; <br> `status`=&lt;true\|false\|unknown&gt; | STABLE |
1313
| kube_deployment_spec_replicas | Gauge | | `deployment`=&lt;deployment-name&gt; <br> `namespace`=&lt;deployment-namespace&gt; | STABLE |
1414
| kube_deployment_spec_paused | Gauge | | `deployment`=&lt;deployment-name&gt; <br> `namespace`=&lt;deployment-namespace&gt; | STABLE |
1515
| kube_deployment_spec_strategy_rollingupdate_max_unavailable | Gauge | | `deployment`=&lt;deployment-name&gt; <br> `namespace`=&lt;deployment-namespace&gt; | STABLE |

internal/store/deployment.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ var (
4141
descDeploymentLabelsDefaultLabels = []string{"namespace", "deployment"}
4242
)
4343

44+
var (
45+
allowedDeploymentReasons = map[string]struct{}{
46+
"MinimumReplicasAvailable": {},
47+
"NewReplicaSetAvailable": {},
48+
"FailedCreate": {},
49+
}
50+
)
51+
4452
func deploymentMetricFamilies(allowAnnotationsList, allowLabelsList []string) []generator.FamilyGenerator {
4553
return []generator.FamilyGenerator{
4654
*generator.NewFamilyGeneratorWithStability(
@@ -174,8 +182,13 @@ func deploymentMetricFamilies(allowAnnotationsList, allowLabelsList []string) []
174182
for j, m := range conditionMetrics {
175183
metric := m
176184

177-
metric.LabelKeys = []string{"condition", "status"}
178-
metric.LabelValues = append([]string{string(c.Type)}, metric.LabelValues...)
185+
reason := c.Reason
186+
if _, ok := allowedDeploymentReasons[reason]; !ok {
187+
reason = ""
188+
}
189+
190+
metric.LabelKeys = []string{"reason", "condition", "status"}
191+
metric.LabelValues = append([]string{reason, string(c.Type)}, metric.LabelValues...)
179192
ms[i*len(conditionStatuses)+j] = metric
180193
}
181194
}

internal/store/deployment_test.go

Lines changed: 54 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
var (
3232
depl1Replicas int32 = 200
3333
depl2Replicas int32 = 5
34+
depl3Replicas int32 = 1
3435

3536
depl1MaxUnavailable = intstr.FromInt(10)
3637
depl2MaxUnavailable = intstr.FromString("25%")
@@ -98,8 +99,8 @@ func TestDeploymentStore(t *testing.T) {
9899
UpdatedReplicas: 2,
99100
ObservedGeneration: 111,
100101
Conditions: []v1.DeploymentCondition{
101-
{Type: v1.DeploymentAvailable, Status: corev1.ConditionTrue},
102-
{Type: v1.DeploymentProgressing, Status: corev1.ConditionTrue},
102+
{Type: v1.DeploymentAvailable, Status: corev1.ConditionTrue, Reason: "MinimumReplicasAvailable"},
103+
{Type: v1.DeploymentProgressing, Status: corev1.ConditionTrue, Reason: "NewReplicaSetAvailable"},
103104
},
104105
},
105106
Spec: v1.DeploymentSpec{
@@ -126,12 +127,12 @@ func TestDeploymentStore(t *testing.T) {
126127
kube_deployment_status_replicas_updated{deployment="depl1",namespace="ns1"} 2
127128
kube_deployment_status_replicas{deployment="depl1",namespace="ns1"} 15
128129
kube_deployment_status_replicas_ready{deployment="depl1",namespace="ns1"} 10
129-
kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Available",status="true"} 1
130-
kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Progressing",status="true"} 1
131-
kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Available",status="false"} 0
132-
kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Progressing",status="false"} 0
133-
kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Available",status="unknown"} 0
134-
kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Progressing",status="unknown"} 0
130+
kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",condition="Available",status="true"} 1
131+
kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",condition="Progressing",status="true"} 1
132+
kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",condition="Available",status="false"} 0
133+
kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",condition="Progressing",status="false"} 0
134+
kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",condition="Available",status="unknown"} 0
135+
kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",condition="Progressing",status="unknown"} 0
135136
`,
136137
},
137138
{
@@ -152,9 +153,9 @@ func TestDeploymentStore(t *testing.T) {
152153
UpdatedReplicas: 1,
153154
ObservedGeneration: 1111,
154155
Conditions: []v1.DeploymentCondition{
155-
{Type: v1.DeploymentAvailable, Status: corev1.ConditionFalse},
156-
{Type: v1.DeploymentProgressing, Status: corev1.ConditionFalse},
157-
{Type: v1.DeploymentReplicaFailure, Status: corev1.ConditionTrue},
156+
{Type: v1.DeploymentAvailable, Status: corev1.ConditionFalse, Reason: "MinimumReplicasAvailable"},
157+
{Type: v1.DeploymentProgressing, Status: corev1.ConditionFalse, Reason: "NewReplicaSetAvailable"},
158+
{Type: v1.DeploymentReplicaFailure, Status: corev1.ConditionTrue, Reason: "FailedCreate"},
158159
},
159160
},
160161
Spec: v1.DeploymentSpec{
@@ -180,17 +181,50 @@ func TestDeploymentStore(t *testing.T) {
180181
kube_deployment_status_replicas_updated{deployment="depl2",namespace="ns2"} 1
181182
kube_deployment_status_replicas{deployment="depl2",namespace="ns2"} 10
182183
kube_deployment_status_replicas_ready{deployment="depl2",namespace="ns2"} 5
183-
kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Available",status="true"} 0
184-
kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Progressing",status="true"} 0
185-
kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="ReplicaFailure",status="true"} 1
186-
kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Available",status="false"} 1
187-
kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Progressing",status="false"} 1
188-
kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="ReplicaFailure",status="false"} 0
189-
kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Available",status="unknown"} 0
190-
kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Progressing",status="unknown"} 0
191-
kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="ReplicaFailure",status="unknown"} 0
184+
kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="MinimumReplicasAvailable",condition="Available",status="true"} 0
185+
kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="NewReplicaSetAvailable",condition="Progressing",status="true"} 0
186+
kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="FailedCreate",condition="ReplicaFailure",status="true"} 1
187+
kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="MinimumReplicasAvailable",condition="Available",status="false"} 1
188+
kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="NewReplicaSetAvailable",condition="Progressing",status="false"} 1
189+
kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="FailedCreate",condition="ReplicaFailure",status="false"} 0
190+
kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="MinimumReplicasAvailable",condition="Available",status="unknown"} 0
191+
kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="NewReplicaSetAvailable",condition="Progressing",status="unknown"} 0
192+
kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="FailedCreate",condition="ReplicaFailure",status="unknown"} 0
192193
`,
193194
},
195+
{
196+
Obj: &v1.Deployment{
197+
ObjectMeta: metav1.ObjectMeta{
198+
Name: "depl3",
199+
Namespace: "ns3",
200+
},
201+
Status: v1.DeploymentStatus{
202+
Conditions: []v1.DeploymentCondition{
203+
{Type: v1.DeploymentAvailable, Status: corev1.ConditionFalse, Reason: "ThisReasonIsNotAllowed"},
204+
{Type: v1.DeploymentProgressing, Status: corev1.ConditionTrue},
205+
},
206+
},
207+
Spec: v1.DeploymentSpec{
208+
Replicas: &depl3Replicas,
209+
},
210+
},
211+
Want: metadata + `
212+
kube_deployment_metadata_generation{deployment="depl3",namespace="ns3"} 0
213+
kube_deployment_spec_paused{deployment="depl3",namespace="ns3"} 0
214+
kube_deployment_spec_replicas{deployment="depl3",namespace="ns3"} 1
215+
kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Available",status="true"} 0
216+
kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Available",status="false"} 1
217+
kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Available",status="unknown"} 0
218+
kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="true"} 1
219+
kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="false"} 0
220+
kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="unknown"} 0
221+
kube_deployment_status_observed_generation{deployment="depl3",namespace="ns3"} 0
222+
kube_deployment_status_replicas_available{deployment="depl3",namespace="ns3"} 0
223+
kube_deployment_status_replicas_ready{deployment="depl3",namespace="ns3"} 0
224+
kube_deployment_status_replicas_unavailable{deployment="depl3",namespace="ns3"} 0
225+
kube_deployment_status_replicas_updated{deployment="depl3",namespace="ns3"} 0
226+
kube_deployment_status_replicas{deployment="depl3",namespace="ns3"} 0`,
227+
},
194228
}
195229

196230
for i, c := range cases {

0 commit comments

Comments
 (0)