From 0a50cabaf9740b4ffcd18a89058469ed08350991 Mon Sep 17 00:00:00 2001 From: Rishab87 Date: Mon, 4 Aug 2025 22:01:35 +0530 Subject: [PATCH 1/5] added reason label --- docs/metrics/workload/deployment-metrics.md | 2 +- internal/store/deployment.go | 17 ++++- internal/store/deployment_test.go | 74 +++++++++++++++------ 3 files changed, 70 insertions(+), 23 deletions(-) diff --git a/docs/metrics/workload/deployment-metrics.md b/docs/metrics/workload/deployment-metrics.md index 94f5159015..6b07e50b9b 100644 --- a/docs/metrics/workload/deployment-metrics.md +++ b/docs/metrics/workload/deployment-metrics.md @@ -9,7 +9,7 @@ | kube_deployment_status_replicas_unavailable | Gauge | | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> | STABLE | | kube_deployment_status_replicas_updated | Gauge | | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> | STABLE | | kube_deployment_status_observed_generation | Gauge | | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> | STABLE | -| kube_deployment_status_condition | Gauge | | `deployment`=<deployment-name>
`namespace`=<deployment-namespace>
`condition`=<deployment-condition>
`status`=<true\|false\|unknown> | STABLE | +| kube_deployment_status_condition | Gauge | | `deployment`=<deployment-name>
`namespace`=<deployment-namespace>
`reason`=<deployment-transition-reason>
`condition`=<deployment-condition>
`status`=<true\|false\|unknown> | STABLE | | kube_deployment_spec_replicas | Gauge | | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> | STABLE | | kube_deployment_spec_paused | Gauge | | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> | STABLE | | kube_deployment_spec_strategy_rollingupdate_max_unavailable | Gauge | | `deployment`=<deployment-name>
`namespace`=<deployment-namespace> | STABLE | diff --git a/internal/store/deployment.go b/internal/store/deployment.go index 7f902b0c16..02a1d0e66a 100644 --- a/internal/store/deployment.go +++ b/internal/store/deployment.go @@ -41,6 +41,14 @@ var ( descDeploymentLabelsDefaultLabels = []string{"namespace", "deployment"} ) +var ( + allowedDeploymentReasons = map[string]struct{}{ + "MinimumReplicasAvailable": {}, + "NewReplicaSetAvailable": {}, + "FailedCreate": {}, + } +) + func deploymentMetricFamilies(allowAnnotationsList, allowLabelsList []string) []generator.FamilyGenerator { return []generator.FamilyGenerator{ *generator.NewFamilyGeneratorWithStability( @@ -174,8 +182,13 @@ func deploymentMetricFamilies(allowAnnotationsList, allowLabelsList []string) [] for j, m := range conditionMetrics { metric := m - metric.LabelKeys = []string{"condition", "status"} - metric.LabelValues = append([]string{string(c.Type)}, metric.LabelValues...) + reason := c.Reason + if _, ok := allowedDeploymentReasons[reason]; !ok { + reason = "" + } + + metric.LabelKeys = []string{"reason", "condition", "status"} + metric.LabelValues = append([]string{reason, string(c.Type)}, metric.LabelValues...) ms[i*len(conditionStatuses)+j] = metric } } diff --git a/internal/store/deployment_test.go b/internal/store/deployment_test.go index 31be4a17d6..3d65a666bc 100644 --- a/internal/store/deployment_test.go +++ b/internal/store/deployment_test.go @@ -31,6 +31,7 @@ import ( var ( depl1Replicas int32 = 200 depl2Replicas int32 = 5 + depl3Replicas int32 = 1 depl1MaxUnavailable = intstr.FromInt(10) depl2MaxUnavailable = intstr.FromString("25%") @@ -98,8 +99,8 @@ func TestDeploymentStore(t *testing.T) { UpdatedReplicas: 2, ObservedGeneration: 111, Conditions: []v1.DeploymentCondition{ - {Type: v1.DeploymentAvailable, Status: corev1.ConditionTrue}, - {Type: v1.DeploymentProgressing, Status: corev1.ConditionTrue}, + {Type: v1.DeploymentAvailable, Status: corev1.ConditionTrue, Reason: "MinimumReplicasAvailable"}, + {Type: v1.DeploymentProgressing, Status: corev1.ConditionTrue, Reason: "NewReplicaSetAvailable"}, }, }, Spec: v1.DeploymentSpec{ @@ -126,12 +127,12 @@ func TestDeploymentStore(t *testing.T) { kube_deployment_status_replicas_updated{deployment="depl1",namespace="ns1"} 2 kube_deployment_status_replicas{deployment="depl1",namespace="ns1"} 15 kube_deployment_status_replicas_ready{deployment="depl1",namespace="ns1"} 10 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Available",status="true"} 1 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Progressing",status="true"} 1 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Available",status="false"} 0 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Progressing",status="false"} 0 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Available",status="unknown"} 0 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",condition="Progressing",status="unknown"} 0 + kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",condition="Available",status="true"} 1 + kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",condition="Progressing",status="true"} 1 + kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",condition="Available",status="false"} 0 + kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",condition="Progressing",status="false"} 0 + kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",condition="Available",status="unknown"} 0 + kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",condition="Progressing",status="unknown"} 0 `, }, { @@ -152,9 +153,9 @@ func TestDeploymentStore(t *testing.T) { UpdatedReplicas: 1, ObservedGeneration: 1111, Conditions: []v1.DeploymentCondition{ - {Type: v1.DeploymentAvailable, Status: corev1.ConditionFalse}, - {Type: v1.DeploymentProgressing, Status: corev1.ConditionFalse}, - {Type: v1.DeploymentReplicaFailure, Status: corev1.ConditionTrue}, + {Type: v1.DeploymentAvailable, Status: corev1.ConditionFalse, Reason: "MinimumReplicasAvailable"}, + {Type: v1.DeploymentProgressing, Status: corev1.ConditionFalse, Reason: "NewReplicaSetAvailable"}, + {Type: v1.DeploymentReplicaFailure, Status: corev1.ConditionTrue, Reason: "FailedCreate"}, }, }, Spec: v1.DeploymentSpec{ @@ -180,17 +181,50 @@ func TestDeploymentStore(t *testing.T) { kube_deployment_status_replicas_updated{deployment="depl2",namespace="ns2"} 1 kube_deployment_status_replicas{deployment="depl2",namespace="ns2"} 10 kube_deployment_status_replicas_ready{deployment="depl2",namespace="ns2"} 5 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Available",status="true"} 0 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Progressing",status="true"} 0 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="ReplicaFailure",status="true"} 1 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Available",status="false"} 1 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Progressing",status="false"} 1 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="ReplicaFailure",status="false"} 0 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Available",status="unknown"} 0 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="Progressing",status="unknown"} 0 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",condition="ReplicaFailure",status="unknown"} 0 + kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="MinimumReplicasAvailable",condition="Available",status="true"} 0 + kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="NewReplicaSetAvailable",condition="Progressing",status="true"} 0 + kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="FailedCreate",condition="ReplicaFailure",status="true"} 1 + kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="MinimumReplicasAvailable",condition="Available",status="false"} 1 + kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="NewReplicaSetAvailable",condition="Progressing",status="false"} 1 + kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="FailedCreate",condition="ReplicaFailure",status="false"} 0 + kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="MinimumReplicasAvailable",condition="Available",status="unknown"} 0 + kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="NewReplicaSetAvailable",condition="Progressing",status="unknown"} 0 + kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="FailedCreate",condition="ReplicaFailure",status="unknown"} 0 `, }, + { + Obj: &v1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: "depl3", + Namespace: "ns3", + }, + Status: v1.DeploymentStatus{ + Conditions: []v1.DeploymentCondition{ + {Type: v1.DeploymentAvailable, Status: corev1.ConditionFalse, Reason: "ThisReasonIsNotAllowed"}, + {Type: v1.DeploymentProgressing, Status: corev1.ConditionTrue}, + }, + }, + Spec: v1.DeploymentSpec{ + Replicas: &depl3Replicas, + }, + }, + Want: metadata + ` + kube_deployment_metadata_generation{deployment="depl3",namespace="ns3"} 0 + kube_deployment_spec_paused{deployment="depl3",namespace="ns3"} 0 + kube_deployment_spec_replicas{deployment="depl3",namespace="ns3"} 1 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Available",status="true"} 0 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Available",status="false"} 1 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Available",status="unknown"} 0 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="true"} 1 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="false"} 0 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="unknown"} 0 + kube_deployment_status_observed_generation{deployment="depl3",namespace="ns3"} 0 + kube_deployment_status_replicas_available{deployment="depl3",namespace="ns3"} 0 + kube_deployment_status_replicas_ready{deployment="depl3",namespace="ns3"} 0 + kube_deployment_status_replicas_unavailable{deployment="depl3",namespace="ns3"} 0 + kube_deployment_status_replicas_updated{deployment="depl3",namespace="ns3"} 0 + kube_deployment_status_replicas{deployment="depl3",namespace="ns3"} 0`, + }, } for i, c := range cases { From b30335fa5445e9e3acae2e1f1a9b4d2fa398aa0b Mon Sep 17 00:00:00 2001 From: Rishab87 Date: Fri, 8 Aug 2025 21:46:48 +0530 Subject: [PATCH 2/5] changing empty reasons to unkown --- internal/store/deployment.go | 2 +- internal/store/deployment_test.go | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/store/deployment.go b/internal/store/deployment.go index 02a1d0e66a..7169d7e63e 100644 --- a/internal/store/deployment.go +++ b/internal/store/deployment.go @@ -184,7 +184,7 @@ func deploymentMetricFamilies(allowAnnotationsList, allowLabelsList []string) [] reason := c.Reason if _, ok := allowedDeploymentReasons[reason]; !ok { - reason = "" + reason = "unknown" } metric.LabelKeys = []string{"reason", "condition", "status"} diff --git a/internal/store/deployment_test.go b/internal/store/deployment_test.go index 3d65a666bc..24c60727f3 100644 --- a/internal/store/deployment_test.go +++ b/internal/store/deployment_test.go @@ -212,12 +212,12 @@ func TestDeploymentStore(t *testing.T) { kube_deployment_metadata_generation{deployment="depl3",namespace="ns3"} 0 kube_deployment_spec_paused{deployment="depl3",namespace="ns3"} 0 kube_deployment_spec_replicas{deployment="depl3",namespace="ns3"} 1 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Available",status="true"} 0 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Available",status="false"} 1 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Available",status="unknown"} 0 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="true"} 1 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="false"} 0 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="unknown"} 0 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="true"} 0 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="false"} 1 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="unknown"} 0 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Progressing",status="true"} 1 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Progressing",status="false"} 0 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Progressing",status="unknown"} 0 kube_deployment_status_observed_generation{deployment="depl3",namespace="ns3"} 0 kube_deployment_status_replicas_available{deployment="depl3",namespace="ns3"} 0 kube_deployment_status_replicas_ready{deployment="depl3",namespace="ns3"} 0 From bc1e7f8965f16f46905af5da056bee497efc8b4b Mon Sep 17 00:00:00 2001 From: Rishab87 Date: Mon, 11 Aug 2025 20:16:08 +0530 Subject: [PATCH 3/5] fixing empty reasons and adding tests --- internal/store/deployment.go | 6 ++++-- internal/store/deployment_test.go | 9 +++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/internal/store/deployment.go b/internal/store/deployment.go index 7169d7e63e..13e2d8c187 100644 --- a/internal/store/deployment.go +++ b/internal/store/deployment.go @@ -183,8 +183,10 @@ func deploymentMetricFamilies(allowAnnotationsList, allowLabelsList []string) [] metric := m reason := c.Reason - if _, ok := allowedDeploymentReasons[reason]; !ok { - reason = "unknown" + if reason != "" { + if _, ok := allowedDeploymentReasons[reason]; !ok { + reason = "unknown" + } } metric.LabelKeys = []string{"reason", "condition", "status"} diff --git a/internal/store/deployment_test.go b/internal/store/deployment_test.go index 24c60727f3..68c5dd944c 100644 --- a/internal/store/deployment_test.go +++ b/internal/store/deployment_test.go @@ -215,15 +215,16 @@ func TestDeploymentStore(t *testing.T) { kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="true"} 0 kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="false"} 1 kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="unknown"} 0 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Progressing",status="true"} 1 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Progressing",status="false"} 0 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Progressing",status="unknown"} 0 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="true"} 1 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="false"} 0 + kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="unknown"} 0 kube_deployment_status_observed_generation{deployment="depl3",namespace="ns3"} 0 + kube_deployment_status_replicas{deployment="depl3",namespace="ns3"} 0 kube_deployment_status_replicas_available{deployment="depl3",namespace="ns3"} 0 kube_deployment_status_replicas_ready{deployment="depl3",namespace="ns3"} 0 kube_deployment_status_replicas_unavailable{deployment="depl3",namespace="ns3"} 0 kube_deployment_status_replicas_updated{deployment="depl3",namespace="ns3"} 0 - kube_deployment_status_replicas{deployment="depl3",namespace="ns3"} 0`, +`, }, } From b5820387c02b1275a4b340ff942639ed6158573a Mon Sep 17 00:00:00 2001 From: Rishab87 Date: Mon, 11 Aug 2025 20:50:42 +0530 Subject: [PATCH 4/5] adding empty reason in allowedList --- internal/store/deployment.go | 7 +++---- internal/store/deployment_test.go | 9 ++++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/internal/store/deployment.go b/internal/store/deployment.go index 13e2d8c187..5e1c074adf 100644 --- a/internal/store/deployment.go +++ b/internal/store/deployment.go @@ -46,6 +46,7 @@ var ( "MinimumReplicasAvailable": {}, "NewReplicaSetAvailable": {}, "FailedCreate": {}, + "": {}, } ) @@ -183,10 +184,8 @@ func deploymentMetricFamilies(allowAnnotationsList, allowLabelsList []string) [] metric := m reason := c.Reason - if reason != "" { - if _, ok := allowedDeploymentReasons[reason]; !ok { - reason = "unknown" - } + if _, ok := allowedDeploymentReasons[reason]; !ok { + reason = "unknown" } metric.LabelKeys = []string{"reason", "condition", "status"} diff --git a/internal/store/deployment_test.go b/internal/store/deployment_test.go index 68c5dd944c..595dda45f2 100644 --- a/internal/store/deployment_test.go +++ b/internal/store/deployment_test.go @@ -156,6 +156,7 @@ func TestDeploymentStore(t *testing.T) { {Type: v1.DeploymentAvailable, Status: corev1.ConditionFalse, Reason: "MinimumReplicasAvailable"}, {Type: v1.DeploymentProgressing, Status: corev1.ConditionFalse, Reason: "NewReplicaSetAvailable"}, {Type: v1.DeploymentReplicaFailure, Status: corev1.ConditionTrue, Reason: "FailedCreate"}, + {Type: v1.DeploymentProgressing, Status: corev1.ConditionTrue}, }, }, Spec: v1.DeploymentSpec{ @@ -190,7 +191,9 @@ func TestDeploymentStore(t *testing.T) { kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="MinimumReplicasAvailable",condition="Available",status="unknown"} 0 kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="NewReplicaSetAvailable",condition="Progressing",status="unknown"} 0 kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="FailedCreate",condition="ReplicaFailure",status="unknown"} 0 -`, + kube_deployment_status_condition{condition="Progressing",deployment="depl2",namespace="ns2",reason="",status="false"} 0 + kube_deployment_status_condition{condition="Progressing",deployment="depl2",namespace="ns2",reason="",status="true"} 1 + kube_deployment_status_condition{condition="Progressing",deployment="depl2",namespace="ns2",reason="",status="unknown"} 0`, }, { Obj: &v1.Deployment{ @@ -201,7 +204,6 @@ func TestDeploymentStore(t *testing.T) { Status: v1.DeploymentStatus{ Conditions: []v1.DeploymentCondition{ {Type: v1.DeploymentAvailable, Status: corev1.ConditionFalse, Reason: "ThisReasonIsNotAllowed"}, - {Type: v1.DeploymentProgressing, Status: corev1.ConditionTrue}, }, }, Spec: v1.DeploymentSpec{ @@ -215,9 +217,6 @@ func TestDeploymentStore(t *testing.T) { kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="true"} 0 kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="false"} 1 kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="unknown"} 0 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="true"} 1 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="false"} 0 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="",condition="Progressing",status="unknown"} 0 kube_deployment_status_observed_generation{deployment="depl3",namespace="ns3"} 0 kube_deployment_status_replicas{deployment="depl3",namespace="ns3"} 0 kube_deployment_status_replicas_available{deployment="depl3",namespace="ns3"} 0 From 547afad2820713fc3da0666c52f1e2736155495f Mon Sep 17 00:00:00 2001 From: Rishab87 Date: Wed, 13 Aug 2025 22:35:44 +0530 Subject: [PATCH 5/5] adding reasons from deployment_utils.go --- internal/store/deployment.go | 15 +++++-- internal/store/deployment_test.go | 65 +++++++++++++++---------------- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/internal/store/deployment.go b/internal/store/deployment.go index 5e1c074adf..7b6c71afa8 100644 --- a/internal/store/deployment.go +++ b/internal/store/deployment.go @@ -41,12 +41,19 @@ var ( descDeploymentLabelsDefaultLabels = []string{"namespace", "deployment"} ) +// Reasons copied from kubernetes/pkg/controller/deployment/deployment_utils.go. var ( allowedDeploymentReasons = map[string]struct{}{ - "MinimumReplicasAvailable": {}, - "NewReplicaSetAvailable": {}, - "FailedCreate": {}, - "": {}, + "ReplicaSetUpdated": {}, + "ReplicaSetCreateError": {}, + "NewReplicaSetCreated": {}, + "FoundNewReplicaSet": {}, + "NewReplicaSetAvailable": {}, + "ProgressDeadlineExceeded": {}, + "DeploymentPaused": {}, + "DeploymentResumed": {}, + "MinimumReplicasAvailable": {}, + "MinimumReplicasUnavailable": {}, } ) diff --git a/internal/store/deployment_test.go b/internal/store/deployment_test.go index 595dda45f2..662a44cb50 100644 --- a/internal/store/deployment_test.go +++ b/internal/store/deployment_test.go @@ -127,12 +127,12 @@ func TestDeploymentStore(t *testing.T) { kube_deployment_status_replicas_updated{deployment="depl1",namespace="ns1"} 2 kube_deployment_status_replicas{deployment="depl1",namespace="ns1"} 15 kube_deployment_status_replicas_ready{deployment="depl1",namespace="ns1"} 10 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",condition="Available",status="true"} 1 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",condition="Progressing",status="true"} 1 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",condition="Available",status="false"} 0 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",condition="Progressing",status="false"} 0 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",condition="Available",status="unknown"} 0 - kube_deployment_status_condition{deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",condition="Progressing",status="unknown"} 0 + kube_deployment_status_condition{condition="Available",deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",status="true"} 1 + kube_deployment_status_condition{condition="Available",deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",status="false"} 0 + kube_deployment_status_condition{condition="Available",deployment="depl1",namespace="ns1",reason="MinimumReplicasAvailable",status="unknown"} 0 + kube_deployment_status_condition{condition="Progressing",deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",status="true"} 1 + kube_deployment_status_condition{condition="Progressing",deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",status="false"} 0 + kube_deployment_status_condition{condition="Progressing",deployment="depl1",namespace="ns1",reason="NewReplicaSetAvailable",status="unknown"} 0 `, }, { @@ -153,10 +153,9 @@ func TestDeploymentStore(t *testing.T) { UpdatedReplicas: 1, ObservedGeneration: 1111, Conditions: []v1.DeploymentCondition{ - {Type: v1.DeploymentAvailable, Status: corev1.ConditionFalse, Reason: "MinimumReplicasAvailable"}, - {Type: v1.DeploymentProgressing, Status: corev1.ConditionFalse, Reason: "NewReplicaSetAvailable"}, - {Type: v1.DeploymentReplicaFailure, Status: corev1.ConditionTrue, Reason: "FailedCreate"}, - {Type: v1.DeploymentProgressing, Status: corev1.ConditionTrue}, + {Type: v1.DeploymentAvailable, Status: corev1.ConditionFalse, Reason: "MinimumReplicasUnavailable"}, + {Type: v1.DeploymentProgressing, Status: corev1.ConditionFalse, Reason: "ProgressDeadlineExceeded"}, + {Type: v1.DeploymentReplicaFailure, Status: corev1.ConditionTrue, Reason: "ReplicaSetCreateError"}, }, }, Spec: v1.DeploymentSpec{ @@ -182,18 +181,16 @@ func TestDeploymentStore(t *testing.T) { kube_deployment_status_replicas_updated{deployment="depl2",namespace="ns2"} 1 kube_deployment_status_replicas{deployment="depl2",namespace="ns2"} 10 kube_deployment_status_replicas_ready{deployment="depl2",namespace="ns2"} 5 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="MinimumReplicasAvailable",condition="Available",status="true"} 0 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="NewReplicaSetAvailable",condition="Progressing",status="true"} 0 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="FailedCreate",condition="ReplicaFailure",status="true"} 1 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="MinimumReplicasAvailable",condition="Available",status="false"} 1 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="NewReplicaSetAvailable",condition="Progressing",status="false"} 1 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="FailedCreate",condition="ReplicaFailure",status="false"} 0 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="MinimumReplicasAvailable",condition="Available",status="unknown"} 0 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="NewReplicaSetAvailable",condition="Progressing",status="unknown"} 0 - kube_deployment_status_condition{deployment="depl2",namespace="ns2",reason="FailedCreate",condition="ReplicaFailure",status="unknown"} 0 - kube_deployment_status_condition{condition="Progressing",deployment="depl2",namespace="ns2",reason="",status="false"} 0 - kube_deployment_status_condition{condition="Progressing",deployment="depl2",namespace="ns2",reason="",status="true"} 1 - kube_deployment_status_condition{condition="Progressing",deployment="depl2",namespace="ns2",reason="",status="unknown"} 0`, + kube_deployment_status_condition{condition="Available",deployment="depl2",namespace="ns2",reason="MinimumReplicasUnavailable",status="true"} 0 + kube_deployment_status_condition{condition="Available",deployment="depl2",namespace="ns2",reason="MinimumReplicasUnavailable",status="false"} 1 + kube_deployment_status_condition{condition="Available",deployment="depl2",namespace="ns2",reason="MinimumReplicasUnavailable",status="unknown"} 0 + kube_deployment_status_condition{condition="Progressing",deployment="depl2",namespace="ns2",reason="ProgressDeadlineExceeded",status="true"} 0 + kube_deployment_status_condition{condition="Progressing",deployment="depl2",namespace="ns2",reason="ProgressDeadlineExceeded",status="false"} 1 + kube_deployment_status_condition{condition="Progressing",deployment="depl2",namespace="ns2",reason="ProgressDeadlineExceeded",status="unknown"} 0 + kube_deployment_status_condition{condition="ReplicaFailure",deployment="depl2",namespace="ns2",reason="ReplicaSetCreateError",status="true"} 1 + kube_deployment_status_condition{condition="ReplicaFailure",deployment="depl2",namespace="ns2",reason="ReplicaSetCreateError",status="false"} 0 + kube_deployment_status_condition{condition="ReplicaFailure",deployment="depl2",namespace="ns2",reason="ReplicaSetCreateError",status="unknown"} 0 +`, }, { Obj: &v1.Deployment{ @@ -211,18 +208,18 @@ func TestDeploymentStore(t *testing.T) { }, }, Want: metadata + ` - kube_deployment_metadata_generation{deployment="depl3",namespace="ns3"} 0 - kube_deployment_spec_paused{deployment="depl3",namespace="ns3"} 0 - kube_deployment_spec_replicas{deployment="depl3",namespace="ns3"} 1 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="true"} 0 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="false"} 1 - kube_deployment_status_condition{deployment="depl3",namespace="ns3",reason="unknown",condition="Available",status="unknown"} 0 - kube_deployment_status_observed_generation{deployment="depl3",namespace="ns3"} 0 - kube_deployment_status_replicas{deployment="depl3",namespace="ns3"} 0 - kube_deployment_status_replicas_available{deployment="depl3",namespace="ns3"} 0 - kube_deployment_status_replicas_ready{deployment="depl3",namespace="ns3"} 0 - kube_deployment_status_replicas_unavailable{deployment="depl3",namespace="ns3"} 0 - kube_deployment_status_replicas_updated{deployment="depl3",namespace="ns3"} 0 + kube_deployment_metadata_generation{deployment="depl3",namespace="ns3"} 0 + kube_deployment_spec_paused{deployment="depl3",namespace="ns3"} 0 + kube_deployment_spec_replicas{deployment="depl3",namespace="ns3"} 1 + kube_deployment_status_condition{condition="Available",deployment="depl3",namespace="ns3",reason="unknown",status="true"} 0 + kube_deployment_status_condition{condition="Available",deployment="depl3",namespace="ns3",reason="unknown",status="false"} 1 + kube_deployment_status_condition{condition="Available",deployment="depl3",namespace="ns3",reason="unknown",status="unknown"} 0 + kube_deployment_status_observed_generation{deployment="depl3",namespace="ns3"} 0 + kube_deployment_status_replicas{deployment="depl3",namespace="ns3"} 0 + kube_deployment_status_replicas_available{deployment="depl3",namespace="ns3"} 0 + kube_deployment_status_replicas_ready{deployment="depl3",namespace="ns3"} 0 + kube_deployment_status_replicas_unavailable{deployment="depl3",namespace="ns3"} 0 + kube_deployment_status_replicas_updated{deployment="depl3",namespace="ns3"} 0 `, }, }