diff --git a/docs/pod-metrics.md b/docs/pod-metrics.md
index 44750d8332..039e7c7cb2 100644
--- a/docs/pod-metrics.md
+++ b/docs/pod-metrics.md
@@ -3,55 +3,55 @@
| Metric name| Metric type | Labels/tags | Status |
| ---------- | ----------- | ----------- | ----------- |
| kube_pod_info | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`host_ip`=<host-ip>
`pod_ip`=<pod-ip>
`node`=<node-name>
`created_by_kind`=<created_by_kind>
`created_by_name`=<created_by_name>
`uid`=<pod-uid>
`priority_class`=<priority_class>
`host_network`=<host_network>| STABLE |
-| kube_pod_start_time | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_completion_time | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_owner | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`owner_kind`=<owner kind>
`owner_name`=<owner name>
`owner_is_controller`=<whether owner is controller> | STABLE |
-| kube_pod_labels | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`label_POD_LABEL`=<POD_LABEL> | STABLE |
-| kube_pod_status_phase | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`phase`=<Pending\|Running\|Succeeded\|Failed\|Unknown> | STABLE |
-| kube_pod_status_ready | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`condition`=<true\|false\|unknown> | STABLE |
-| kube_pod_status_scheduled | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`condition`=<true\|false\|unknown> | STABLE |
-| kube_pod_container_info | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`image`=<image-name>
`image_id`=<image-id>
`container_id`=<containerid> | STABLE |
-| kube_pod_container_status_waiting | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_container_status_waiting_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<ContainerCreating\|CrashLoopBackOff\|ErrImagePull\|ImagePullBackOff\|CreateContainerConfigError\|InvalidImageName\|CreateContainerError> | STABLE |
-| kube_pod_container_status_running | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_container_state_started | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_container_status_terminated | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_container_status_terminated_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<OOMKilled\|Error\|Completed\|ContainerCannotRun\|DeadlineExceeded\|Evicted> | STABLE |
-| kube_pod_container_status_last_terminated_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<OOMKilled\|Error\|Completed\|ContainerCannotRun\|DeadlineExceeded\|Evicted> | STABLE |
-| kube_pod_container_status_ready | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_container_status_restarts_total | Counter | `container`=<container-name>
`namespace`=<pod-namespace>
`pod`=<pod-name> | STABLE |
-| kube_pod_container_resource_requests | Gauge | `resource`=<resource-name>
`unit`=<resource-unit>
`container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name> | EXPERIMENTAL |
-| kube_pod_container_resource_limits | Gauge | `resource`=<resource-name>
`unit`=<resource-unit>
`container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name> | EXPERIMENTAL |
-| kube_pod_overhead_cpu_cores | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_overhead_memory_bytes | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_runtimeclass_name_info | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_created | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_deletion_timestamp | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_restart_policy | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`type`=<Always\|Never\|OnFailure> | STABLE |
-| kube_pod_init_container_info | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`image`=<image-name>
`image_id`=<image-id>
`container_id`=<containerid> | STABLE |
-| kube_pod_init_container_status_waiting | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_init_container_status_waiting_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<ContainerCreating\|CrashLoopBackOff\|ErrImagePull\|ImagePullBackOff\|CreateContainerConfigError\|CreateContainerError\|InvalidImageName> | STABLE |
-| kube_pod_init_container_status_running | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_init_container_status_terminated | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_init_container_status_terminated_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<OOMKilled\|Error\|Completed\|ContainerCannotRun\|DeadlineExceeded\|Evicted> | STABLE |
-| kube_pod_init_container_status_last_terminated_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<OOMKilled\|Error\|Completed\|ContainerCannotRun\|DeadlineExceeded\|Evicted> | STABLE |
-| kube_pod_init_container_status_ready | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_init_container_status_restarts_total | Counter | `container`=<container-name>
`namespace`=<pod-namespace>
`pod`=<pod-name> | STABLE |
-| kube_pod_init_container_resource_limits | Gauge | `resource`=<resource-name>
`unit`=<resource-unit>
`container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_init_container_resource_limits_cpu_cores | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_init_container_resource_limits_memory_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_init_container_resource_limits_storage_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_init_container_resource_limits_ephemeral_storage_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_init_container_resource_requests | Gauge | `resource`=<resource-name>
`unit`=<resource-unit>
`container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_init_container_resource_requests_cpu_cores | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_init_container_resource_requests_memory_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_init_container_resource_requests_storage_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_init_container_resource_requests_ephemeral_storage_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace> | EXPERIMENTAL |
-| kube_pod_spec_volumes_persistentvolumeclaims_info | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`volume`=<volume-name>
`persistentvolumeclaim`=<persistentvolumeclaim-claimname> | STABLE |
-| kube_pod_spec_volumes_persistentvolumeclaims_readonly | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`volume`=<volume-name>
`persistentvolumeclaim`=<persistentvolumeclaim-claimname> | STABLE |
-| kube_pod_status_reason | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<NodeLost\|Evicted\|UnexpectedAdmissionError> | EXPERIMENTAL |
-| kube_pod_status_scheduled_time | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
-| kube_pod_status_unschedulable | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace> | STABLE |
+| kube_pod_start_time | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_completion_time | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_owner | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`owner_kind`=<owner kind>
`owner_name`=<owner name>
`owner_is_controller`=<whether owner is controller>
`uid`=<pod-uid> | STABLE |
+| kube_pod_labels | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`label_POD_LABEL`=<POD_LABEL>
`uid`=<pod-uid> | STABLE |
+| kube_pod_status_phase | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`phase`=<Pending\|Running\|Succeeded\|Failed\|Unknown>
`uid`=<pod-uid> | STABLE |
+| kube_pod_status_ready | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`condition`=<true\|false\|unknown>
`uid`=<pod-uid> | STABLE |
+| kube_pod_status_scheduled | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`condition`=<true\|false\|unknown>
`uid`=<pod-uid> | STABLE |
+| kube_pod_container_info | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`image`=<image-name>
`image_id`=<image-id>
`container_id`=<containerid>
`uid`=<pod-uid> | STABLE |
+| kube_pod_container_status_waiting | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_container_status_waiting_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<ContainerCreating\|CrashLoopBackOff\|ErrImagePull\|ImagePullBackOff\|CreateContainerConfigError\|InvalidImageName\|CreateContainerError>
`uid`=<pod-uid> | STABLE |
+| kube_pod_container_status_running | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_container_state_started | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_container_status_terminated | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_container_status_terminated_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<OOMKilled\|Error\|Completed\|ContainerCannotRun\|DeadlineExceeded\|Evicted>
`uid`=<pod-uid> | STABLE |
+| kube_pod_container_status_last_terminated_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<OOMKilled\|Error\|Completed\|ContainerCannotRun\|DeadlineExceeded\|Evicted>
`uid`=<pod-uid> | STABLE |
+| kube_pod_container_status_ready | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_container_status_restarts_total | Counter | `container`=<container-name>
`namespace`=<pod-namespace>
`pod`=<pod-name>
`uid`=<pod-uid> | STABLE |
+| kube_pod_container_resource_requests | Gauge | `resource`=<resource-name>
`unit`=<resource-unit>
`container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_container_resource_limits | Gauge | `resource`=<resource-name>
`unit`=<resource-unit>
`container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`node`=< node-name>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_overhead_cpu_cores | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_overhead_memory_bytes | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_runtimeclass_name_info | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_created | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_deletion_timestamp | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_restart_policy | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`type`=<Always\|Never\|OnFailure>
`uid`=<pod-uid> | STABLE |
+| kube_pod_init_container_info | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`image`=<image-name>
`image_id`=<image-id>
`container_id`=<containerid>
`uid`=<pod-uid> | STABLE |
+| kube_pod_init_container_status_waiting | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_init_container_status_waiting_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<ContainerCreating\|CrashLoopBackOff\|ErrImagePull\|ImagePullBackOff\|CreateContainerConfigError\|CreateContainerError\|InvalidImageName>
`uid`=<pod-uid> | STABLE |
+| kube_pod_init_container_status_running | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_init_container_status_terminated | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_init_container_status_terminated_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<OOMKilled\|Error\|Completed\|ContainerCannotRun\|DeadlineExceeded\|Evicted>
`uid`=<pod-uid> | STABLE |
+| kube_pod_init_container_status_last_terminated_reason | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<OOMKilled\|Error\|Completed\|ContainerCannotRun\|DeadlineExceeded\|Evicted>
`uid`=<pod-uid> | STABLE |
+| kube_pod_init_container_status_ready | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_init_container_status_restarts_total | Counter | `container`=<container-name>
`namespace`=<pod-namespace>
`pod`=<pod-name>
`uid`=<pod-uid> | STABLE |
+| kube_pod_init_container_resource_limits | Gauge | `resource`=<resource-name>
`unit`=<resource-unit>
`container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_init_container_resource_limits_cpu_cores | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_init_container_resource_limits_memory_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_init_container_resource_limits_storage_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_init_container_resource_limits_ephemeral_storage_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_init_container_resource_requests | Gauge | `resource`=<resource-name>
`unit`=<resource-unit>
`container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_init_container_resource_requests_cpu_cores | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_init_container_resource_requests_memory_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_init_container_resource_requests_storage_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_init_container_resource_requests_ephemeral_storage_bytes | Gauge | `container`=<container-name>
`pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_spec_volumes_persistentvolumeclaims_info | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`volume`=<volume-name>
`persistentvolumeclaim`=<persistentvolumeclaim-claimname>
`uid`=<pod-uid> | STABLE |
+| kube_pod_spec_volumes_persistentvolumeclaims_readonly | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`volume`=<volume-name>
`persistentvolumeclaim`=<persistentvolumeclaim-claimname>
`uid`=<pod-uid> | STABLE |
+| kube_pod_status_reason | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`reason`=<NodeLost\|Evicted\|UnexpectedAdmissionError>
`uid`=<pod-uid> | EXPERIMENTAL |
+| kube_pod_status_scheduled_time | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
+| kube_pod_status_unschedulable | Gauge | `pod`=<pod-name>
`namespace`=<pod-namespace>
`uid`=<pod-uid> | STABLE |
## Useful metrics queries
diff --git a/internal/store/pod.go b/internal/store/pod.go
index 091108dc42..184bdb558b 100644
--- a/internal/store/pod.go
+++ b/internal/store/pod.go
@@ -33,7 +33,7 @@ import (
)
var (
- descPodLabelsDefaultLabels = []string{"namespace", "pod"}
+ descPodLabelsDefaultLabels = []string{"namespace", "pod", "uid"}
containerWaitingReasons = []string{"ContainerCreating", "CrashLoopBackOff", "CreateContainerConfigError", "ErrImagePull", "ImagePullBackOff", "CreateContainerError", "InvalidImageName"}
containerTerminatedReasons = []string{"OOMKilled", "Completed", "Error", "ContainerCannotRun", "DeadlineExceeded", "Evicted"}
podStatusReasons = []string{"NodeLost", "Evicted", "UnexpectedAdmissionError"}
@@ -61,8 +61,8 @@ func podMetricFamilies(allowLabelsList []string) []generator.FamilyGenerator {
m := metric.Metric{
- LabelKeys: []string{"host_ip", "pod_ip", "uid", "node", "created_by_kind", "created_by_name", "priority_class", "host_network"},
- LabelValues: []string{p.Status.HostIP, p.Status.PodIP, string(p.UID), p.Spec.NodeName, createdByKind, createdByName, p.Spec.PriorityClassName, strconv.FormatBool(p.Spec.HostNetwork)},
+ LabelKeys: []string{"host_ip", "pod_ip", "node", "created_by_kind", "created_by_name", "priority_class", "host_network"},
+ LabelValues: []string{p.Status.HostIP, p.Status.PodIP, p.Spec.NodeName, createdByKind, createdByName, p.Spec.PriorityClassName, strconv.FormatBool(p.Spec.HostNetwork)},
Value: 1,
}
@@ -1361,7 +1361,7 @@ func wrapPodFunc(f func(*v1.Pod) *metric.Family) func(interface{}) *metric.Famil
for _, m := range metricFamily.Metrics {
m.LabelKeys = append(descPodLabelsDefaultLabels, m.LabelKeys...)
- m.LabelValues = append([]string{pod.Namespace, pod.Name}, m.LabelValues...)
+ m.LabelValues = append([]string{pod.Namespace, pod.Name, string(pod.UID)}, m.LabelValues...)
}
return metricFamily
diff --git a/internal/store/pod_test.go b/internal/store/pod_test.go
index 57ab5b3127..4158c29677 100644
--- a/internal/store/pod_test.go
+++ b/internal/store/pod_test.go
@@ -39,6 +39,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -54,7 +55,7 @@ func TestPodStore(t *testing.T) {
Want: `
# HELP kube_pod_container_info Information about a container in a pod.
# TYPE kube_pod_container_info gauge
- kube_pod_container_info{container="container1",container_id="docker://ab123",image="k8s.gcr.io/hyperkube1",image_id="docker://sha256:aaa",namespace="ns1",pod="pod1"} 1`,
+ kube_pod_container_info{container="container1",container_id="docker://ab123",image="k8s.gcr.io/hyperkube1",image_id="docker://sha256:aaa",namespace="ns1",pod="pod1",uid="uid1"} 1`,
MetricNames: []string{"kube_pod_container_info"},
},
{
@@ -62,6 +63,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -93,9 +95,9 @@ func TestPodStore(t *testing.T) {
# HELP kube_pod_init_container_info Information about an init container in a pod.
# TYPE kube_pod_container_info gauge
# TYPE kube_pod_init_container_info gauge
- kube_pod_container_info{container="container2",container_id="docker://cd456",image="k8s.gcr.io/hyperkube2",image_id="docker://sha256:bbb",namespace="ns2",pod="pod2"} 1
- kube_pod_container_info{container="container3",container_id="docker://ef789",image="k8s.gcr.io/hyperkube3",image_id="docker://sha256:ccc",namespace="ns2",pod="pod2"} 1
- kube_pod_init_container_info{container="initContainer",container_id="docker://ef123",image="k8s.gcr.io/initfoo",image_id="docker://sha256:wxyz",namespace="ns2",pod="pod2"} 1`,
+ kube_pod_container_info{container="container2",container_id="docker://cd456",image="k8s.gcr.io/hyperkube2",image_id="docker://sha256:bbb",namespace="ns2",pod="pod2",uid="uid2"} 1
+ kube_pod_container_info{container="container3",container_id="docker://ef789",image="k8s.gcr.io/hyperkube3",image_id="docker://sha256:ccc",namespace="ns2",pod="pod2",uid="uid2"} 1
+ kube_pod_init_container_info{container="initContainer",container_id="docker://ef123",image="k8s.gcr.io/initfoo",image_id="docker://sha256:wxyz",namespace="ns2",pod="pod2",uid="uid2"} 1`,
MetricNames: []string{"kube_pod_container_info", "kube_pod_init_container_info"},
},
{
@@ -103,6 +105,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -116,7 +119,7 @@ func TestPodStore(t *testing.T) {
Want: `
# HELP kube_pod_container_status_ready Describes whether the containers readiness check succeeded.
# TYPE kube_pod_container_status_ready gauge
- kube_pod_container_status_ready{container="container1",namespace="ns1",pod="pod1"} 1`,
+ kube_pod_container_status_ready{container="container1",namespace="ns1",pod="pod1",uid="uid1"} 1`,
MetricNames: []string{"kube_pod_container_status_ready"},
},
{
@@ -124,6 +127,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -141,8 +145,8 @@ func TestPodStore(t *testing.T) {
Want: `
# HELP kube_pod_container_status_ready Describes whether the containers readiness check succeeded.
# TYPE kube_pod_container_status_ready gauge
- kube_pod_container_status_ready{container="container2",namespace="ns2",pod="pod2"} 1
- kube_pod_container_status_ready{container="container3",namespace="ns2",pod="pod2"} 0
+ kube_pod_container_status_ready{container="container2",namespace="ns2",pod="pod2",uid="uid2"} 1
+ kube_pod_container_status_ready{container="container3",namespace="ns2",pod="pod2",uid="uid2"} 0
`,
MetricNames: []string{"kube_pod_container_status_ready"},
},
@@ -151,6 +155,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod3",
Namespace: "ns3",
+ UID: "uid3",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -178,8 +183,8 @@ func TestPodStore(t *testing.T) {
Want: `
# HELP kube_pod_init_container_status_ready Describes whether the init containers readiness check succeeded.
# TYPE kube_pod_init_container_status_ready gauge
- kube_pod_init_container_status_ready{container="initcontainer1",namespace="ns3",pod="pod3"} 1
- kube_pod_init_container_status_ready{container="initcontainer2",namespace="ns3",pod="pod3"} 0
+ kube_pod_init_container_status_ready{container="initcontainer1",namespace="ns3",pod="pod3",uid="uid3"} 1
+ kube_pod_init_container_status_ready{container="initcontainer2",namespace="ns3",pod="pod3",uid="uid3"} 0
`,
MetricNames: []string{"kube_pod_init_container_status_ready"},
},
@@ -188,6 +193,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -201,7 +207,7 @@ func TestPodStore(t *testing.T) {
Want: `
# HELP kube_pod_container_status_restarts_total The number of container restarts per container.
# TYPE kube_pod_container_status_restarts_total counter
- kube_pod_container_status_restarts_total{container="container1",namespace="ns1",pod="pod1"} 0
+ kube_pod_container_status_restarts_total{container="container1",namespace="ns1",pod="pod1",uid="uid1"} 0
`,
MetricNames: []string{"kube_pod_container_status_restarts_total"},
},
@@ -210,6 +216,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Status: v1.PodStatus{
InitContainerStatuses: []v1.ContainerStatus{
@@ -223,7 +230,7 @@ func TestPodStore(t *testing.T) {
Want: `
# HELP kube_pod_init_container_status_restarts_total The number of restarts for the init container.
# TYPE kube_pod_init_container_status_restarts_total counter
- kube_pod_init_container_status_restarts_total{container="initcontainer1",namespace="ns2",pod="pod2"} 1
+ kube_pod_init_container_status_restarts_total{container="initcontainer1",namespace="ns2",pod="pod2",uid="uid2"} 1
`,
MetricNames: []string{"kube_pod_init_container_status_restarts_total"},
},
@@ -232,6 +239,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -249,8 +257,8 @@ func TestPodStore(t *testing.T) {
Want: `
# HELP kube_pod_container_status_restarts_total The number of container restarts per container.
# TYPE kube_pod_container_status_restarts_total counter
- kube_pod_container_status_restarts_total{container="container2",namespace="ns2",pod="pod2"} 0
- kube_pod_container_status_restarts_total{container="container3",namespace="ns2",pod="pod2"} 1
+ kube_pod_container_status_restarts_total{container="container2",namespace="ns2",pod="pod2",uid="uid2"} 0
+ kube_pod_container_status_restarts_total{container="container3",namespace="ns2",pod="pod2",uid="uid2"} 1
`,
MetricNames: []string{"kube_pod_container_status_restarts_total"},
},
@@ -259,6 +267,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Status: v1.PodStatus{
InitContainerStatuses: []v1.ContainerStatus{
@@ -276,8 +285,8 @@ func TestPodStore(t *testing.T) {
Want: `
# HELP kube_pod_init_container_status_restarts_total The number of restarts for the init container.
# TYPE kube_pod_init_container_status_restarts_total counter
- kube_pod_init_container_status_restarts_total{container="initcontainer2",namespace="ns2",pod="pod2"} 0
- kube_pod_init_container_status_restarts_total{container="initcontainer3",namespace="ns2",pod="pod2"} 1
+ kube_pod_init_container_status_restarts_total{container="initcontainer2",namespace="ns2",pod="pod2",uid="uid2"} 0
+ kube_pod_init_container_status_restarts_total{container="initcontainer3",namespace="ns2",pod="pod2",uid="uid2"} 1
`,
MetricNames: []string{"kube_pod_init_container_status_restarts_total"},
},
@@ -286,6 +295,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -333,39 +343,39 @@ func TestPodStore(t *testing.T) {
# TYPE kube_pod_init_container_status_terminated_reason gauge
# TYPE kube_pod_init_container_status_waiting gauge
# TYPE kube_pod_init_container_status_waiting_reason gauge
- kube_pod_container_status_running{container="container1",namespace="ns1",pod="pod1"} 1
- kube_pod_container_state_started{container="container1",namespace="ns1",pod="pod1"} 1.501777018e+09
- kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="Completed"} 0
- kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="ContainerCannotRun"} 0
- kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="Error"} 0
- kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="Evicted"} 0
- kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="OOMKilled"} 0
- kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="DeadlineExceeded"} 0
- kube_pod_container_status_terminated{container="container1",namespace="ns1",pod="pod1"} 0
- kube_pod_container_status_waiting{container="container1",namespace="ns1",pod="pod1"} 0
- kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="ContainerCreating"} 0
- kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="ImagePullBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="CrashLoopBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="ErrImagePull"} 0
- kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="CreateContainerConfigError"} 0
- kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="CreateContainerError"} 0
- kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="InvalidImageName"} 0
- kube_pod_init_container_status_running{container="initcontainer1",namespace="ns1",pod="pod1"} 1
- kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="Completed"} 0
- kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="ContainerCannotRun"} 0
- kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="Error"} 0
- kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="Evicted"} 0
- kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="OOMKilled"} 0
- kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="DeadlineExceeded"} 0
- kube_pod_init_container_status_terminated{container="initcontainer1",namespace="ns1",pod="pod1"} 0
- kube_pod_init_container_status_waiting{container="initcontainer1",namespace="ns1",pod="pod1"} 0
- kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="ContainerCreating"} 0
- kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="ImagePullBackOff"} 0
- kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="CrashLoopBackOff"} 0
- kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="ErrImagePull"} 0
- kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="CreateContainerConfigError"} 0
- kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="CreateContainerError"} 0
- kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="InvalidImageName"} 0
+ kube_pod_container_status_running{container="container1",namespace="ns1",pod="pod1",uid="uid1"} 1
+ kube_pod_container_state_started{container="container1",namespace="ns1",pod="pod1",uid="uid1"} 1.501777018e+09
+ kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="Completed",uid="uid1"} 0
+ kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="ContainerCannotRun",uid="uid1"} 0
+ kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="Error",uid="uid1"} 0
+ kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="Evicted",uid="uid1"} 0
+ kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="OOMKilled",uid="uid1"} 0
+ kube_pod_container_status_terminated_reason{container="container1",namespace="ns1",pod="pod1",reason="DeadlineExceeded",uid="uid1"} 0
+ kube_pod_container_status_terminated{container="container1",namespace="ns1",pod="pod1",uid="uid1"} 0
+ kube_pod_container_status_waiting{container="container1",namespace="ns1",pod="pod1",uid="uid1"} 0
+ kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="ContainerCreating",uid="uid1"} 0
+ kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="ImagePullBackOff",uid="uid1"} 0
+ kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="CrashLoopBackOff",uid="uid1"} 0
+ kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="ErrImagePull",uid="uid1"} 0
+ kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="CreateContainerConfigError",uid="uid1"} 0
+ kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="CreateContainerError",uid="uid1"} 0
+ kube_pod_container_status_waiting_reason{container="container1",namespace="ns1",pod="pod1",reason="InvalidImageName",uid="uid1"} 0
+ kube_pod_init_container_status_running{container="initcontainer1",namespace="ns1",pod="pod1",uid="uid1"} 1
+ kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="Completed",uid="uid1"} 0
+ kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="ContainerCannotRun",uid="uid1"} 0
+ kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="Error",uid="uid1"} 0
+ kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="Evicted",uid="uid1"} 0
+ kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="OOMKilled",uid="uid1"} 0
+ kube_pod_init_container_status_terminated_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="DeadlineExceeded",uid="uid1"} 0
+ kube_pod_init_container_status_terminated{container="initcontainer1",namespace="ns1",pod="pod1",uid="uid1"} 0
+ kube_pod_init_container_status_waiting{container="initcontainer1",namespace="ns1",pod="pod1",uid="uid1"} 0
+ kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="ContainerCreating",uid="uid1"} 0
+ kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="ImagePullBackOff",uid="uid1"} 0
+ kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="CrashLoopBackOff",uid="uid1"} 0
+ kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="ErrImagePull",uid="uid1"} 0
+ kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="CreateContainerConfigError",uid="uid1"} 0
+ kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="CreateContainerError",uid="uid1"} 0
+ kube_pod_init_container_status_waiting_reason{container="initcontainer1",namespace="ns1",pod="pod1",reason="InvalidImageName",uid="uid1"} 0
`,
MetricNames: []string{
"kube_pod_container_status_running",
@@ -386,6 +396,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -419,38 +430,38 @@ func TestPodStore(t *testing.T) {
# TYPE kube_pod_container_status_terminated_reason gauge
# TYPE kube_pod_container_status_waiting gauge
# TYPE kube_pod_container_status_waiting_reason gauge
- kube_pod_container_status_running{container="container2",namespace="ns2",pod="pod2"} 0
- kube_pod_container_status_running{container="container3",namespace="ns2",pod="pod2"} 0
- kube_pod_container_status_terminated{container="container2",namespace="ns2",pod="pod2"} 1
- kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="Completed"} 0
- kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="ContainerCannotRun"} 0
- kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="Error"} 0
- kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="Evicted"} 0
- kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="OOMKilled"} 1
- kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="DeadlineExceeded"} 0
- kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="Completed"} 0
- kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="ContainerCannotRun"} 0
- kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="Error"} 0
- kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="Evicted"} 0
- kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="OOMKilled"} 0
- kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="DeadlineExceeded"} 0
- kube_pod_container_status_waiting{container="container2",namespace="ns2",pod="pod2"} 0
- kube_pod_container_status_waiting{container="container3",namespace="ns2",pod="pod2"} 1
- kube_pod_container_status_terminated{container="container3",namespace="ns2",pod="pod2"} 0
- kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="ContainerCreating"} 0
- kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="ImagePullBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="CrashLoopBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="ErrImagePull"} 0
- kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="CreateContainerConfigError"} 0
- kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="CreateContainerError"} 0
- kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="InvalidImageName"} 0
- kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="ContainerCreating"} 1
- kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="CrashLoopBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="ErrImagePull"} 0
- kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="ImagePullBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="CreateContainerConfigError"} 0
- kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="CreateContainerError"} 0
- kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="InvalidImageName"} 0
+ kube_pod_container_status_running{container="container2",namespace="ns2",pod="pod2",uid="uid2"} 0
+ kube_pod_container_status_running{container="container3",namespace="ns2",pod="pod2",uid="uid2"} 0
+ kube_pod_container_status_terminated{container="container2",namespace="ns2",pod="pod2",uid="uid2"} 1
+ kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="Completed",uid="uid2"} 0
+ kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="ContainerCannotRun",uid="uid2"} 0
+ kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="Error",uid="uid2"} 0
+ kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="Evicted",uid="uid2"} 0
+ kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="OOMKilled",uid="uid2"} 1
+ kube_pod_container_status_terminated_reason{container="container2",namespace="ns2",pod="pod2",reason="DeadlineExceeded",uid="uid2"} 0
+ kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="Completed",uid="uid2"} 0
+ kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="ContainerCannotRun",uid="uid2"} 0
+ kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="Error",uid="uid2"} 0
+ kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="Evicted",uid="uid2"} 0
+ kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="OOMKilled",uid="uid2"} 0
+ kube_pod_container_status_terminated_reason{container="container3",namespace="ns2",pod="pod2",reason="DeadlineExceeded",uid="uid2"} 0
+ kube_pod_container_status_waiting{container="container2",namespace="ns2",pod="pod2",uid="uid2"} 0
+ kube_pod_container_status_waiting{container="container3",namespace="ns2",pod="pod2",uid="uid2"} 1
+ kube_pod_container_status_terminated{container="container3",namespace="ns2",pod="pod2",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="ContainerCreating",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="ImagePullBackOff",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="CrashLoopBackOff",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="ErrImagePull",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="CreateContainerConfigError",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="CreateContainerError",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container2",namespace="ns2",pod="pod2",reason="InvalidImageName",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="ContainerCreating",uid="uid2"} 1
+ kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="CrashLoopBackOff",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="ErrImagePull",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="ImagePullBackOff",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="CreateContainerConfigError",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="CreateContainerError",uid="uid2"} 0
+ kube_pod_container_status_waiting_reason{container="container3",namespace="ns2",pod="pod2",reason="InvalidImageName",uid="uid2"} 0
`,
MetricNames: []string{
"kube_pod_container_status_running",
@@ -465,6 +476,7 @@ func TestPodStore(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod3",
Namespace: "ns3",
+ UID: "uid3",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -492,28 +504,28 @@ func TestPodStore(t *testing.T) {
# TYPE kube_pod_container_status_terminated_reason gauge
# TYPE kube_pod_container_status_waiting gauge
# TYPE kube_pod_container_status_waiting_reason gauge
- kube_pod_container_status_running{container="container4",namespace="ns3",pod="pod3"} 0
- kube_pod_container_status_terminated{container="container4",namespace="ns3",pod="pod3"} 0
-kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Completed"} 0
- kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="ContainerCannotRun"} 0
- kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Error"} 0
- kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Evicted"} 0
- kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="OOMKilled"} 0
- kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="DeadlineExceeded"} 0
- kube_pod_container_status_waiting{container="container4",namespace="ns3",pod="pod3"} 1
-kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="ContainerCreating"} 0
- kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="ImagePullBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="CrashLoopBackOff"} 1
- kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="ErrImagePull"} 0
- kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="CreateContainerConfigError"} 0
- kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="CreateContainerError"} 0
- kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="InvalidImageName"} 0
-kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Completed"} 0
- kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="ContainerCannotRun"} 0
- kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Error"} 0
- kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Evicted"} 0
- kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="OOMKilled"} 0
- kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="DeadlineExceeded"} 0
+ kube_pod_container_status_running{container="container4",namespace="ns3",pod="pod3",uid="uid3"} 0
+ kube_pod_container_status_terminated{container="container4",namespace="ns3",pod="pod3",uid="uid3"} 0
+kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Completed",uid="uid3"} 0
+ kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="ContainerCannotRun",uid="uid3"} 0
+ kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Error",uid="uid3"} 0
+ kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Evicted",uid="uid3"} 0
+ kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="OOMKilled",uid="uid3"} 0
+ kube_pod_container_status_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="DeadlineExceeded",uid="uid3"} 0
+ kube_pod_container_status_waiting{container="container4",namespace="ns3",pod="pod3",uid="uid3"} 1
+kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="ContainerCreating",uid="uid3"} 0
+ kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="ImagePullBackOff",uid="uid3"} 0
+ kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="CrashLoopBackOff",uid="uid3"} 1
+ kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="ErrImagePull",uid="uid3"} 0
+ kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="CreateContainerConfigError",uid="uid3"} 0
+ kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="CreateContainerError",uid="uid3"} 0
+ kube_pod_container_status_waiting_reason{container="container4",namespace="ns3",pod="pod3",reason="InvalidImageName",uid="uid3"} 0
+kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Completed",uid="uid3"} 0
+ kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="ContainerCannotRun",uid="uid3"} 0
+ kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Error",uid="uid3"} 0
+ kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="Evicted",uid="uid3"} 0
+ kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="OOMKilled",uid="uid3"} 0
+ kube_pod_container_status_last_terminated_reason{container="container4",namespace="ns3",pod="pod3",reason="DeadlineExceeded",uid="uid3"} 0
`,
MetricNames: []string{
"kube_pod_container_status_running",
@@ -540,6 +552,7 @@ kube_pod_container_status_last_terminated_reason{container="container4",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod6",
Namespace: "ns6",
+ UID: "uid6",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -576,29 +589,29 @@ kube_pod_container_status_last_terminated_reason{container="container4",namespac
# TYPE kube_pod_container_status_waiting gauge
# TYPE kube_pod_container_status_waiting_reason gauge
# TYPE kube_pod_container_state_started gauge
- kube_pod_container_status_running{container="container7",namespace="ns6",pod="pod6"} 1
- kube_pod_container_state_started{container="container7",namespace="ns6",pod="pod6"} 1.501777018e+09
- kube_pod_container_status_terminated{container="container7",namespace="ns6",pod="pod6"} 0
-kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Completed"} 0
- kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="ContainerCannotRun"} 0
- kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Error"} 0
- kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Evicted"} 0
- kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="OOMKilled"} 0
- kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="DeadlineExceeded"} 0
- kube_pod_container_status_waiting{container="container7",namespace="ns6",pod="pod6"} 0
-kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="ContainerCreating"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="ImagePullBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="CrashLoopBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="ErrImagePull"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="CreateContainerConfigError"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="CreateContainerError"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="InvalidImageName"} 0
-kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Completed"} 0
- kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="ContainerCannotRun"} 0
- kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Error"} 0
- kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Evicted"} 0
- kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="OOMKilled"} 1
- kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="DeadlineExceeded"} 0
+ kube_pod_container_status_running{container="container7",namespace="ns6",pod="pod6",uid="uid6"} 1
+ kube_pod_container_state_started{container="container7",namespace="ns6",pod="pod6",uid="uid6"} 1.501777018e+09
+ kube_pod_container_status_terminated{container="container7",namespace="ns6",pod="pod6",uid="uid6"} 0
+kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Completed",uid="uid6"} 0
+ kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="ContainerCannotRun",uid="uid6"} 0
+ kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Error",uid="uid6"} 0
+ kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Evicted",uid="uid6"} 0
+ kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="OOMKilled",uid="uid6"} 0
+ kube_pod_container_status_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="DeadlineExceeded",uid="uid6"} 0
+ kube_pod_container_status_waiting{container="container7",namespace="ns6",pod="pod6",uid="uid6"} 0
+kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="ContainerCreating",uid="uid6"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="ImagePullBackOff",uid="uid6"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="CrashLoopBackOff",uid="uid6"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="ErrImagePull",uid="uid6"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="CreateContainerConfigError",uid="uid6"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="CreateContainerError",uid="uid6"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns6",pod="pod6",reason="InvalidImageName",uid="uid6"} 0
+kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Completed",uid="uid6"} 0
+ kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="ContainerCannotRun",uid="uid6"} 0
+ kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Error",uid="uid6"} 0
+ kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="Evicted",uid="uid6"} 0
+ kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="OOMKilled",uid="uid6"} 1
+ kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns6",pod="pod6",reason="DeadlineExceeded",uid="uid6"} 0
`,
MetricNames: []string{
"kube_pod_container_status_last_terminated_reason",
@@ -615,6 +628,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod7",
Namespace: "ns7",
+ UID: "uid7",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -651,29 +665,29 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# TYPE kube_pod_container_status_terminated_reason gauge
# TYPE kube_pod_container_status_waiting gauge
# TYPE kube_pod_container_status_waiting_reason gauge
- kube_pod_container_status_running{container="container7",namespace="ns7",pod="pod7"} 1
- kube_pod_container_state_started{container="container7",namespace="ns7",pod="pod7"} 1.501777018e+09
- kube_pod_container_status_terminated{container="container7",namespace="ns7",pod="pod7"} 0
-kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Completed"} 0
- kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="ContainerCannotRun"} 0
- kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Error"} 0
- kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Evicted"} 0
- kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="OOMKilled"} 0
- kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="DeadlineExceeded"} 0
- kube_pod_container_status_waiting{container="container7",namespace="ns7",pod="pod7"} 0
-kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="ContainerCreating"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="ImagePullBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="CrashLoopBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="ErrImagePull"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="CreateContainerConfigError"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="CreateContainerError"} 0
- kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="InvalidImageName"} 0
-kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Completed"} 0
- kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="ContainerCannotRun"} 0
- kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Error"} 0
- kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Evicted"} 0
- kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="OOMKilled"} 0
- kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="DeadlineExceeded"} 1
+ kube_pod_container_status_running{container="container7",namespace="ns7",pod="pod7",uid="uid7"} 1
+ kube_pod_container_state_started{container="container7",namespace="ns7",pod="pod7",uid="uid7"} 1.501777018e+09
+ kube_pod_container_status_terminated{container="container7",namespace="ns7",pod="pod7",uid="uid7"} 0
+kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Completed",uid="uid7"} 0
+ kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="ContainerCannotRun",uid="uid7"} 0
+ kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Error",uid="uid7"} 0
+ kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Evicted",uid="uid7"} 0
+ kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="OOMKilled",uid="uid7"} 0
+ kube_pod_container_status_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="DeadlineExceeded",uid="uid7"} 0
+ kube_pod_container_status_waiting{container="container7",namespace="ns7",pod="pod7",uid="uid7"} 0
+kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="ContainerCreating",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="ImagePullBackOff",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="CrashLoopBackOff",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="ErrImagePull",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="CreateContainerConfigError",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="CreateContainerError",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container7",namespace="ns7",pod="pod7",reason="InvalidImageName",uid="uid7"} 0
+kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Completed",uid="uid7"} 0
+ kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="ContainerCannotRun",uid="uid7"} 0
+ kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Error",uid="uid7"} 0
+ kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="Evicted",uid="uid7"} 0
+ kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="OOMKilled",uid="uid7"} 0
+ kube_pod_container_status_last_terminated_reason{container="container7",namespace="ns7",pod="pod7",reason="DeadlineExceeded",uid="uid7"} 1
`,
MetricNames: []string{
"kube_pod_container_status_running",
@@ -690,6 +704,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod4",
Namespace: "ns4",
+ UID: "uid4",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -715,22 +730,22 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# TYPE kube_pod_container_status_terminated_reason gauge
# TYPE kube_pod_container_status_waiting gauge
# TYPE kube_pod_container_status_waiting_reason gauge
- kube_pod_container_status_running{container="container5",namespace="ns4",pod="pod4"} 0
- kube_pod_container_status_terminated{container="container5",namespace="ns4",pod="pod4"} 0
- kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="Completed"} 0
- kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="ContainerCannotRun"} 0
- kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="Error"} 0
- kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="Evicted"} 0
- kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="OOMKilled"} 0
- kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="DeadlineExceeded"} 0
- kube_pod_container_status_waiting{container="container5",namespace="ns4",pod="pod4"} 1
- kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="ContainerCreating"} 0
- kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="ImagePullBackOff"} 1
- kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="CrashLoopBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="ErrImagePull"} 0
- kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="CreateContainerConfigError"} 0
- kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="CreateContainerError"} 0
- kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="InvalidImageName"} 0
+ kube_pod_container_status_running{container="container5",namespace="ns4",pod="pod4",uid="uid4"} 0
+ kube_pod_container_status_terminated{container="container5",namespace="ns4",pod="pod4",uid="uid4"} 0
+ kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="Completed",uid="uid4"} 0
+ kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="ContainerCannotRun",uid="uid4"} 0
+ kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="Error",uid="uid4"} 0
+ kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="Evicted",uid="uid4"} 0
+ kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="OOMKilled",uid="uid4"} 0
+ kube_pod_container_status_terminated_reason{container="container5",namespace="ns4",pod="pod4",reason="DeadlineExceeded",uid="uid4"} 0
+ kube_pod_container_status_waiting{container="container5",namespace="ns4",pod="pod4",uid="uid4"} 1
+ kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="ContainerCreating",uid="uid4"} 0
+ kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="ImagePullBackOff",uid="uid4"} 1
+ kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="CrashLoopBackOff",uid="uid4"} 0
+ kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="ErrImagePull",uid="uid4"} 0
+ kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="CreateContainerConfigError",uid="uid4"} 0
+ kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="CreateContainerError",uid="uid4"} 0
+ kube_pod_container_status_waiting_reason{container="container5",namespace="ns4",pod="pod4",reason="InvalidImageName",uid="uid4"} 0
`,
MetricNames: []string{
"kube_pod_container_status_running",
@@ -745,6 +760,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod5",
Namespace: "ns5",
+ UID: "uid5",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -770,22 +786,22 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# TYPE kube_pod_container_status_terminated_reason gauge
# TYPE kube_pod_container_status_waiting gauge
# TYPE kube_pod_container_status_waiting_reason gauge
- kube_pod_container_status_running{container="container6",namespace="ns5",pod="pod5"} 0
- kube_pod_container_status_terminated{container="container6",namespace="ns5",pod="pod5"} 0
- kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="Completed"} 0
- kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="ContainerCannotRun"} 0
- kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="Error"} 0
- kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="Evicted"} 0
- kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="OOMKilled"} 0
- kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="DeadlineExceeded"} 0
- kube_pod_container_status_waiting{container="container6",namespace="ns5",pod="pod5"} 1
- kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="ContainerCreating"} 0
- kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="ImagePullBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="CrashLoopBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="ErrImagePull"} 1
- kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="CreateContainerConfigError"} 0
- kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="CreateContainerError"} 0
- kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="InvalidImageName"} 0
+ kube_pod_container_status_running{container="container6",namespace="ns5",pod="pod5",uid="uid5"} 0
+ kube_pod_container_status_terminated{container="container6",namespace="ns5",pod="pod5",uid="uid5"} 0
+ kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="Completed",uid="uid5"} 0
+ kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="ContainerCannotRun",uid="uid5"} 0
+ kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="Error",uid="uid5"} 0
+ kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="Evicted",uid="uid5"} 0
+ kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="OOMKilled",uid="uid5"} 0
+ kube_pod_container_status_terminated_reason{container="container6",namespace="ns5",pod="pod5",reason="DeadlineExceeded",uid="uid5"} 0
+ kube_pod_container_status_waiting{container="container6",namespace="ns5",pod="pod5",uid="uid5"} 1
+ kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="ContainerCreating",uid="uid5"} 0
+ kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="ImagePullBackOff",uid="uid5"} 0
+ kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="CrashLoopBackOff",uid="uid5"} 0
+ kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="ErrImagePull",uid="uid5"} 1
+ kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="CreateContainerConfigError",uid="uid5"} 0
+ kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="CreateContainerError",uid="uid5"} 0
+ kube_pod_container_status_waiting_reason{container="container6",namespace="ns5",pod="pod5",reason="InvalidImageName",uid="uid5"} 0
`,
MetricNames: []string{
"kube_pod_container_status_running",
@@ -800,6 +816,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod7",
Namespace: "ns7",
+ UID: "uid7",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
@@ -825,22 +842,22 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# TYPE kube_pod_container_status_terminated_reason gauge
# TYPE kube_pod_container_status_waiting gauge
# TYPE kube_pod_container_status_waiting_reason gauge
- kube_pod_container_status_running{container="container8",namespace="ns7",pod="pod7"} 0
- kube_pod_container_status_terminated{container="container8",namespace="ns7",pod="pod7"} 0
- kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="Completed"} 0
- kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="ContainerCannotRun"} 0
- kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="Error"} 0
- kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="Evicted"} 0
- kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="OOMKilled"} 0
- kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="DeadlineExceeded"} 0
- kube_pod_container_status_waiting{container="container8",namespace="ns7",pod="pod7"} 1
- kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="ContainerCreating"} 0
- kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="ImagePullBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="CrashLoopBackOff"} 0
- kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="ErrImagePull"} 0
- kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="CreateContainerError"} 0
- kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="InvalidImageName"} 0
- kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="CreateContainerConfigError"} 1
+ kube_pod_container_status_running{container="container8",namespace="ns7",pod="pod7",uid="uid7"} 0
+ kube_pod_container_status_terminated{container="container8",namespace="ns7",pod="pod7",uid="uid7"} 0
+ kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="Completed",uid="uid7"} 0
+ kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="ContainerCannotRun",uid="uid7"} 0
+ kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="Error",uid="uid7"} 0
+ kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="Evicted",uid="uid7"} 0
+ kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="OOMKilled",uid="uid7"} 0
+ kube_pod_container_status_terminated_reason{container="container8",namespace="ns7",pod="pod7",reason="DeadlineExceeded",uid="uid7"} 0
+ kube_pod_container_status_waiting{container="container8",namespace="ns7",pod="pod7",uid="uid7"} 1
+ kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="ContainerCreating",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="ImagePullBackOff",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="CrashLoopBackOff",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="ErrImagePull",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="CreateContainerError",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="InvalidImageName",uid="uid7"} 0
+ kube_pod_container_status_waiting_reason{container="container8",namespace="ns7",pod="pod7",reason="CreateContainerConfigError",uid="uid7"} 1
`,
MetricNames: []string{
"kube_pod_container_status_running",
@@ -882,10 +899,10 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# TYPE kube_pod_info gauge
# TYPE kube_pod_owner gauge
# TYPE kube_pod_start_time gauge
- kube_pod_created{namespace="ns1",pod="pod1"} 1.5e+09
+ kube_pod_created{namespace="ns1",pod="pod1",uid="abc-123-xxx"} 1.5e+09
kube_pod_info{created_by_kind="",created_by_name="",host_ip="1.1.1.1",namespace="ns1",node="node1",pod="pod1",pod_ip="1.2.3.4",uid="abc-123-xxx",priority_class="system-node-critical",host_network="true"} 1
- kube_pod_start_time{namespace="ns1",pod="pod1"} 1.501569018e+09
- kube_pod_owner{namespace="ns1",owner_is_controller="",owner_kind="",owner_name="",pod="pod1"} 1
+ kube_pod_start_time{namespace="ns1",pod="pod1",uid="abc-123-xxx"} 1.501569018e+09
+ kube_pod_owner{namespace="ns1",owner_is_controller="",owner_kind="",owner_name="",pod="pod1",uid="abc-123-xxx"} 1
`,
MetricNames: []string{"kube_pod_created", "kube_pod_info", "kube_pod_start_time", "kube_pod_completion_time", "kube_pod_owner"},
},
@@ -911,7 +928,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_deletion_timestamp Unix deletion timestamp
# TYPE kube_pod_deletion_timestamp gauge
- kube_pod_deletion_timestamp{namespace="ns1",pod="pod1"} 1.8e+09
+ kube_pod_deletion_timestamp{namespace="ns1",pod="pod1",uid="abc-123-xxx"} 1.8e+09
`,
MetricNames: []string{"kube_pod_deletion_timestamp"},
},
@@ -920,6 +937,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Spec: v1.PodSpec{
RestartPolicy: v1.RestartPolicyAlways,
@@ -928,7 +946,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_restart_policy Describes the restart policy in use by this pod.
# TYPE kube_pod_restart_policy gauge
- kube_pod_restart_policy{namespace="ns2",pod="pod2",type="Always"} 1
+ kube_pod_restart_policy{namespace="ns2",pod="pod2",type="Always",uid="uid2"} 1
`,
MetricNames: []string{"kube_pod_restart_policy"},
},
@@ -937,6 +955,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Spec: v1.PodSpec{
RestartPolicy: v1.RestartPolicyOnFailure,
@@ -945,7 +964,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_restart_policy Describes the restart policy in use by this pod.
# TYPE kube_pod_restart_policy gauge
- kube_pod_restart_policy{namespace="ns2",pod="pod2",type="OnFailure"} 1
+ kube_pod_restart_policy{namespace="ns2",pod="pod2",type="OnFailure",uid="uid2"} 1
`,
MetricNames: []string{"kube_pod_restart_policy"},
},
@@ -1024,8 +1043,8 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# TYPE kube_pod_owner gauge
# TYPE kube_pod_start_time gauge
kube_pod_info{created_by_kind="ReplicaSet",created_by_name="rs-name",host_ip="1.1.1.1",namespace="ns2",node="node2",pod="pod2",pod_ip="2.3.4.5",uid="abc-456-xxx",priority_class="",host_network="false"} 1
- kube_pod_completion_time{namespace="ns2",pod="pod2"} 1.501888018e+09
- kube_pod_owner{namespace="ns2",owner_is_controller="true",owner_kind="ReplicaSet",owner_name="rs-name",pod="pod2"} 1
+ kube_pod_completion_time{namespace="ns2",pod="pod2",uid="abc-456-xxx"} 1.501888018e+09
+ kube_pod_owner{namespace="ns2",owner_is_controller="true",owner_kind="ReplicaSet",owner_name="rs-name",pod="pod2",uid="abc-456-xxx"} 1
`,
MetricNames: []string{"kube_pod_created", "kube_pod_info", "kube_pod_start_time", "kube_pod_completion_time", "kube_pod_owner"},
},
@@ -1034,6 +1053,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
},
Status: v1.PodStatus{
Phase: v1.PodRunning,
@@ -1042,11 +1062,11 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_status_phase The pods current phase.
# TYPE kube_pod_status_phase gauge
- kube_pod_status_phase{namespace="ns1",phase="Failed",pod="pod1"} 0
- kube_pod_status_phase{namespace="ns1",phase="Pending",pod="pod1"} 0
- kube_pod_status_phase{namespace="ns1",phase="Running",pod="pod1"} 1
- kube_pod_status_phase{namespace="ns1",phase="Succeeded",pod="pod1"} 0
- kube_pod_status_phase{namespace="ns1",phase="Unknown",pod="pod1"} 0
+ kube_pod_status_phase{namespace="ns1",phase="Failed",pod="pod1",uid="uid1"} 0
+ kube_pod_status_phase{namespace="ns1",phase="Pending",pod="pod1",uid="uid1"} 0
+ kube_pod_status_phase{namespace="ns1",phase="Running",pod="pod1",uid="uid1"} 1
+ kube_pod_status_phase{namespace="ns1",phase="Succeeded",pod="pod1",uid="uid1"} 0
+ kube_pod_status_phase{namespace="ns1",phase="Unknown",pod="pod1",uid="uid1"} 0
`,
MetricNames: []string{"kube_pod_status_phase"},
},
@@ -1055,6 +1075,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Status: v1.PodStatus{
Phase: v1.PodPending,
@@ -1063,11 +1084,11 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_status_phase The pods current phase.
# TYPE kube_pod_status_phase gauge
- kube_pod_status_phase{namespace="ns2",phase="Failed",pod="pod2"} 0
- kube_pod_status_phase{namespace="ns2",phase="Pending",pod="pod2"} 1
- kube_pod_status_phase{namespace="ns2",phase="Running",pod="pod2"} 0
- kube_pod_status_phase{namespace="ns2",phase="Succeeded",pod="pod2"} 0
- kube_pod_status_phase{namespace="ns2",phase="Unknown",pod="pod2"} 0
+ kube_pod_status_phase{namespace="ns2",phase="Failed",pod="pod2",uid="uid2"} 0
+ kube_pod_status_phase{namespace="ns2",phase="Pending",pod="pod2",uid="uid2"} 1
+ kube_pod_status_phase{namespace="ns2",phase="Running",pod="pod2",uid="uid2"} 0
+ kube_pod_status_phase{namespace="ns2",phase="Succeeded",pod="pod2",uid="uid2"} 0
+ kube_pod_status_phase{namespace="ns2",phase="Unknown",pod="pod2",uid="uid2"} 0
`,
MetricNames: []string{"kube_pod_status_phase"},
},
@@ -1077,6 +1098,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod3",
Namespace: "ns3",
+ UID: "uid3",
},
Status: v1.PodStatus{
Phase: v1.PodUnknown,
@@ -1085,11 +1107,11 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_status_phase The pods current phase.
# TYPE kube_pod_status_phase gauge
- kube_pod_status_phase{namespace="ns3",phase="Failed",pod="pod3"} 0
- kube_pod_status_phase{namespace="ns3",phase="Pending",pod="pod3"} 0
- kube_pod_status_phase{namespace="ns3",phase="Running",pod="pod3"} 0
- kube_pod_status_phase{namespace="ns3",phase="Succeeded",pod="pod3"} 0
- kube_pod_status_phase{namespace="ns3",phase="Unknown",pod="pod3"} 1
+ kube_pod_status_phase{namespace="ns3",phase="Failed",pod="pod3",uid="uid3"} 0
+ kube_pod_status_phase{namespace="ns3",phase="Pending",pod="pod3",uid="uid3"} 0
+ kube_pod_status_phase{namespace="ns3",phase="Running",pod="pod3",uid="uid3"} 0
+ kube_pod_status_phase{namespace="ns3",phase="Succeeded",pod="pod3",uid="uid3"} 0
+ kube_pod_status_phase{namespace="ns3",phase="Unknown",pod="pod3",uid="uid3"} 1
`,
MetricNames: []string{"kube_pod_status_phase"},
},
@@ -1098,6 +1120,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod4",
Namespace: "ns4",
+ UID: "uid4",
DeletionTimestamp: &metav1.Time{},
},
Status: v1.PodStatus{
@@ -1110,14 +1133,14 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# HELP kube_pod_status_reason The pod status reasons
# TYPE kube_pod_status_phase gauge
# TYPE kube_pod_status_reason gauge
- kube_pod_status_phase{namespace="ns4",phase="Failed",pod="pod4"} 0
- kube_pod_status_phase{namespace="ns4",phase="Pending",pod="pod4"} 0
- kube_pod_status_phase{namespace="ns4",phase="Running",pod="pod4"} 1
- kube_pod_status_phase{namespace="ns4",phase="Succeeded",pod="pod4"} 0
- kube_pod_status_phase{namespace="ns4",phase="Unknown",pod="pod4"} 0
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="Evicted"} 0
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="NodeLost"} 1
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="UnexpectedAdmissionError"} 0
+ kube_pod_status_phase{namespace="ns4",phase="Failed",pod="pod4",uid="uid4"} 0
+ kube_pod_status_phase{namespace="ns4",phase="Pending",pod="pod4",uid="uid4"} 0
+ kube_pod_status_phase{namespace="ns4",phase="Running",pod="pod4",uid="uid4"} 1
+ kube_pod_status_phase{namespace="ns4",phase="Succeeded",pod="pod4",uid="uid4"} 0
+ kube_pod_status_phase{namespace="ns4",phase="Unknown",pod="pod4",uid="uid4"} 0
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="Evicted",uid="uid4"} 0
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="NodeLost",uid="uid4"} 1
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="UnexpectedAdmissionError",uid="uid4"} 0
`,
MetricNames: []string{"kube_pod_status_phase", "kube_pod_status_reason"},
},
@@ -1126,6 +1149,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod4",
Namespace: "ns4",
+ UID: "uid4",
DeletionTimestamp: &metav1.Time{},
},
Status: v1.PodStatus{
@@ -1136,9 +1160,9 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_status_reason The pod status reasons
# TYPE kube_pod_status_reason gauge
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="Evicted"} 1
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="NodeLost"} 0
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="UnexpectedAdmissionError"} 0
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="Evicted",uid="uid4"} 1
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="NodeLost",uid="uid4"} 0
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="UnexpectedAdmissionError",uid="uid4"} 0
`,
MetricNames: []string{"kube_pod_status_reason"},
},
@@ -1147,6 +1171,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod4",
Namespace: "ns4",
+ UID: "uid4",
DeletionTimestamp: &metav1.Time{},
},
Status: v1.PodStatus{
@@ -1157,9 +1182,9 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_status_reason The pod status reasons
# TYPE kube_pod_status_reason gauge
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="Evicted"} 0
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="NodeLost"} 0
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="UnexpectedAdmissionError"} 1
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="Evicted",uid="uid4"} 0
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="NodeLost",uid="uid4"} 0
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="UnexpectedAdmissionError",uid="uid4"} 1
`,
MetricNames: []string{"kube_pod_status_reason"},
},
@@ -1168,6 +1193,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod4",
Namespace: "ns4",
+ UID: "uid4",
DeletionTimestamp: &metav1.Time{},
},
Status: v1.PodStatus{
@@ -1178,9 +1204,9 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_status_reason The pod status reasons
# TYPE kube_pod_status_reason gauge
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="Evicted"} 0
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="NodeLost"} 0
- kube_pod_status_reason{namespace="ns4",pod="pod4",reason="UnexpectedAdmissionError"} 0
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="Evicted",uid="uid4"} 0
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="NodeLost",uid="uid4"} 0
+ kube_pod_status_reason{namespace="ns4",pod="pod4",reason="UnexpectedAdmissionError",uid="uid4"} 0
`,
MetricNames: []string{"kube_pod_status_reason"},
},
@@ -1189,6 +1215,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
},
Status: v1.PodStatus{
Conditions: []v1.PodCondition{
@@ -1202,9 +1229,9 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_status_ready Describes whether the pod is ready to serve requests.
# TYPE kube_pod_status_ready gauge
- kube_pod_status_ready{condition="false",namespace="ns1",pod="pod1"} 0
- kube_pod_status_ready{condition="true",namespace="ns1",pod="pod1"} 1
- kube_pod_status_ready{condition="unknown",namespace="ns1",pod="pod1"} 0
+ kube_pod_status_ready{condition="false",namespace="ns1",pod="pod1",uid="uid1"} 0
+ kube_pod_status_ready{condition="true",namespace="ns1",pod="pod1",uid="uid1"} 1
+ kube_pod_status_ready{condition="unknown",namespace="ns1",pod="pod1",uid="uid1"} 0
`,
MetricNames: []string{"kube_pod_status_ready"},
},
@@ -1213,6 +1240,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Status: v1.PodStatus{
Conditions: []v1.PodCondition{
@@ -1226,9 +1254,9 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_status_ready Describes whether the pod is ready to serve requests.
# TYPE kube_pod_status_ready gauge
- kube_pod_status_ready{condition="false",namespace="ns2",pod="pod2"} 1
- kube_pod_status_ready{condition="true",namespace="ns2",pod="pod2"} 0
- kube_pod_status_ready{condition="unknown",namespace="ns2",pod="pod2"} 0
+ kube_pod_status_ready{condition="false",namespace="ns2",pod="pod2",uid="uid2"} 1
+ kube_pod_status_ready{condition="true",namespace="ns2",pod="pod2",uid="uid2"} 0
+ kube_pod_status_ready{condition="unknown",namespace="ns2",pod="pod2",uid="uid2"} 0
`,
MetricNames: []string{"kube_pod_status_ready"},
},
@@ -1237,6 +1265,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
},
Status: v1.PodStatus{
Conditions: []v1.PodCondition{
@@ -1255,10 +1284,10 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# HELP kube_pod_status_scheduled_time Unix timestamp when pod moved into scheduled status
# TYPE kube_pod_status_scheduled gauge
# TYPE kube_pod_status_scheduled_time gauge
- kube_pod_status_scheduled_time{namespace="ns1",pod="pod1"} 1.501666018e+09
- kube_pod_status_scheduled{condition="false",namespace="ns1",pod="pod1"} 0
- kube_pod_status_scheduled{condition="true",namespace="ns1",pod="pod1"} 1
- kube_pod_status_scheduled{condition="unknown",namespace="ns1",pod="pod1"} 0
+ kube_pod_status_scheduled_time{namespace="ns1",pod="pod1",uid="uid1"} 1.501666018e+09
+ kube_pod_status_scheduled{condition="false",namespace="ns1",pod="pod1",uid="uid1"} 0
+ kube_pod_status_scheduled{condition="true",namespace="ns1",pod="pod1",uid="uid1"} 1
+ kube_pod_status_scheduled{condition="unknown",namespace="ns1",pod="pod1",uid="uid1"} 0
`,
MetricNames: []string{"kube_pod_status_scheduled", "kube_pod_status_scheduled_time"},
},
@@ -1267,6 +1296,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Status: v1.PodStatus{
Conditions: []v1.PodCondition{
@@ -1282,9 +1312,9 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# HELP kube_pod_status_scheduled_time Unix timestamp when pod moved into scheduled status
# TYPE kube_pod_status_scheduled gauge
# TYPE kube_pod_status_scheduled_time gauge
- kube_pod_status_scheduled{condition="false",namespace="ns2",pod="pod2"} 1
- kube_pod_status_scheduled{condition="true",namespace="ns2",pod="pod2"} 0
- kube_pod_status_scheduled{condition="unknown",namespace="ns2",pod="pod2"} 0
+ kube_pod_status_scheduled{condition="false",namespace="ns2",pod="pod2",uid="uid2"} 1
+ kube_pod_status_scheduled{condition="true",namespace="ns2",pod="pod2",uid="uid2"} 0
+ kube_pod_status_scheduled{condition="unknown",namespace="ns2",pod="pod2",uid="uid2"} 0
`,
MetricNames: []string{"kube_pod_status_scheduled", "kube_pod_status_scheduled_time"},
},
@@ -1293,6 +1323,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Status: v1.PodStatus{
Conditions: []v1.PodCondition{
@@ -1308,7 +1339,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_status_unschedulable Describes the unschedulable status for the pod.
# TYPE kube_pod_status_unschedulable gauge
- kube_pod_status_unschedulable{namespace="ns2",pod="pod2"} 1
+ kube_pod_status_unschedulable{namespace="ns2",pod="pod2",uid="uid2"} 1
`,
MetricNames: []string{"kube_pod_status_unschedulable"},
},
@@ -1317,6 +1348,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
},
Spec: v1.PodSpec{
Containers: []v1.Container{
@@ -1403,30 +1435,30 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# TYPE kube_pod_init_container_resource_requests_memory_bytes gauge
# TYPE kube_pod_init_container_resource_requests_storage_bytes gauge
# TYPE kube_pod_init_container_status_last_terminated_reason gauge
- kube_pod_container_resource_limits{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="cpu",unit="core"} 0.2
- kube_pod_container_resource_limits{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="ephemeral_storage",unit="byte"} 3e+08
- kube_pod_container_resource_limits{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="memory",unit="byte"} 1e+08
- kube_pod_container_resource_limits{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="nvidia_com_gpu",unit="integer"} 1
- kube_pod_container_resource_limits{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="storage",unit="byte"} 4e+08
- kube_pod_container_resource_limits{container="pod1_con2",namespace="ns1",node="",pod="pod1",resource="cpu",unit="core"} 0.3
- kube_pod_container_resource_limits{container="pod1_con2",namespace="ns1",node="",pod="pod1",resource="memory",unit="byte"} 2e+08
- kube_pod_container_resource_requests{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="cpu",unit="core"} 0.2
- kube_pod_container_resource_requests{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="ephemeral_storage",unit="byte"} 3e+08
- kube_pod_container_resource_requests{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="memory",unit="byte"} 1e+08
- kube_pod_container_resource_requests{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="nvidia_com_gpu",unit="integer"} 1
- kube_pod_container_resource_requests{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="storage",unit="byte"} 4e+08
- kube_pod_container_resource_requests{container="pod1_con2",namespace="ns1",node="",pod="pod1",resource="cpu",unit="core"} 0.3
- kube_pod_container_resource_requests{container="pod1_con2",namespace="ns1",node="",pod="pod1",resource="memory",unit="byte"} 2e+08
- kube_pod_init_container_resource_limits_cpu_cores{container="pod1_initcon1",namespace="ns1",pod="pod1"} 0.2
- kube_pod_init_container_resource_limits_ephemeral_storage_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1"} 3e+08
- kube_pod_init_container_resource_limits_memory_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1"} 1e+08
- kube_pod_init_container_resource_limits_storage_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1"} 4e+08
- kube_pod_init_container_resource_limits{container="pod1_initcon1",namespace="ns1",pod="pod1",resource="nvidia_com_gpu",unit="integer"} 1
- kube_pod_init_container_resource_requests_cpu_cores{container="pod1_initcon1",namespace="ns1",pod="pod1"} 0.2
- kube_pod_init_container_resource_requests_ephemeral_storage_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1"} 3e+08
- kube_pod_init_container_resource_requests_memory_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1"} 1e+08
- kube_pod_init_container_resource_requests_storage_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1"} 4e+08
- kube_pod_init_container_resource_requests{container="pod1_initcon1",namespace="ns1",pod="pod1",resource="nvidia_com_gpu",unit="integer"} 1
+ kube_pod_container_resource_limits{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="cpu",unit="core",uid="uid1"} 0.2
+ kube_pod_container_resource_limits{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="ephemeral_storage",unit="byte",uid="uid1"} 3e+08
+ kube_pod_container_resource_limits{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="memory",unit="byte",uid="uid1"} 1e+08
+ kube_pod_container_resource_limits{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="nvidia_com_gpu",unit="integer",uid="uid1"} 1
+ kube_pod_container_resource_limits{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="storage",unit="byte",uid="uid1"} 4e+08
+ kube_pod_container_resource_limits{container="pod1_con2",namespace="ns1",node="",pod="pod1",resource="cpu",unit="core",uid="uid1"} 0.3
+ kube_pod_container_resource_limits{container="pod1_con2",namespace="ns1",node="",pod="pod1",resource="memory",unit="byte",uid="uid1"} 2e+08
+ kube_pod_container_resource_requests{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="cpu",unit="core",uid="uid1"} 0.2
+ kube_pod_container_resource_requests{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="ephemeral_storage",unit="byte",uid="uid1"} 3e+08
+ kube_pod_container_resource_requests{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="memory",unit="byte",uid="uid1"} 1e+08
+ kube_pod_container_resource_requests{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="nvidia_com_gpu",unit="integer",uid="uid1"} 1
+ kube_pod_container_resource_requests{container="pod1_con1",namespace="ns1",node="",pod="pod1",resource="storage",unit="byte",uid="uid1"} 4e+08
+ kube_pod_container_resource_requests{container="pod1_con2",namespace="ns1",node="",pod="pod1",resource="cpu",unit="core",uid="uid1"} 0.3
+ kube_pod_container_resource_requests{container="pod1_con2",namespace="ns1",node="",pod="pod1",resource="memory",unit="byte",uid="uid1"} 2e+08
+ kube_pod_init_container_resource_limits_cpu_cores{container="pod1_initcon1",namespace="ns1",pod="pod1",uid="uid1"} 0.2
+ kube_pod_init_container_resource_limits_ephemeral_storage_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1",uid="uid1"} 3e+08
+ kube_pod_init_container_resource_limits_memory_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1",uid="uid1"} 1e+08
+ kube_pod_init_container_resource_limits_storage_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1",uid="uid1"} 4e+08
+ kube_pod_init_container_resource_limits{container="pod1_initcon1",namespace="ns1",pod="pod1",resource="nvidia_com_gpu",unit="integer",uid="uid1"} 1
+ kube_pod_init_container_resource_requests_cpu_cores{container="pod1_initcon1",namespace="ns1",pod="pod1",uid="uid1"} 0.2
+ kube_pod_init_container_resource_requests_ephemeral_storage_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1",uid="uid1"} 3e+08
+ kube_pod_init_container_resource_requests_memory_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1",uid="uid1"} 1e+08
+ kube_pod_init_container_resource_requests_storage_bytes{container="pod1_initcon1",namespace="ns1",pod="pod1",uid="uid1"} 4e+08
+ kube_pod_init_container_resource_requests{container="pod1_initcon1",namespace="ns1",pod="pod1",resource="nvidia_com_gpu",unit="integer",uid="uid1"} 1
`,
MetricNames: []string{
"kube_pod_container_resource_requests",
@@ -1442,6 +1474,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod2",
Namespace: "ns2",
+ UID: "uid2",
},
Spec: v1.PodSpec{
Containers: []v1.Container{
@@ -1498,8 +1531,8 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# HELP kube_pod_init_container_resource_limits_memory_bytes Bytes of memory requested limit by an init container.
# TYPE kube_pod_init_container_resource_limits_cpu_cores gauge
# TYPE kube_pod_init_container_resource_limits_memory_bytes gauge
- kube_pod_init_container_resource_limits_cpu_cores{container="pod2_initcon1",namespace="ns2",pod="pod2"} 0.4
- kube_pod_init_container_resource_limits_memory_bytes{container="pod2_initcon1",namespace="ns2",pod="pod2"} 3e+08
+ kube_pod_init_container_resource_limits_cpu_cores{container="pod2_initcon1",namespace="ns2",pod="pod2",uid="uid2"} 0.4
+ kube_pod_init_container_resource_limits_memory_bytes{container="pod2_initcon1",namespace="ns2",pod="pod2",uid="uid2"} 3e+08
`,
MetricNames: []string{
"kube_pod_init_container_resource_limits_cpu_cores",
@@ -1511,6 +1544,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
Labels: map[string]string{
"app": "example",
},
@@ -1520,7 +1554,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_labels Kubernetes labels converted to Prometheus labels.
# TYPE kube_pod_labels gauge
- kube_pod_labels{namespace="ns1",pod="pod1"} 1
+ kube_pod_labels{namespace="ns1",pod="pod1",uid="uid1"} 1
`,
MetricNames: []string{
"kube_pod_labels",
@@ -1531,6 +1565,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
Labels: map[string]string{
"app": "example",
},
@@ -1571,10 +1606,10 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
# HELP kube_pod_spec_volumes_persistentvolumeclaims_readonly Describes whether a persistentvolumeclaim is mounted read only.
# TYPE kube_pod_spec_volumes_persistentvolumeclaims_info gauge
# TYPE kube_pod_spec_volumes_persistentvolumeclaims_readonly gauge
- kube_pod_spec_volumes_persistentvolumeclaims_info{namespace="ns1",persistentvolumeclaim="claim1",pod="pod1",volume="myvol"} 1
- kube_pod_spec_volumes_persistentvolumeclaims_info{namespace="ns1",persistentvolumeclaim="claim2",pod="pod1",volume="my-readonly-vol"} 1
- kube_pod_spec_volumes_persistentvolumeclaims_readonly{namespace="ns1",persistentvolumeclaim="claim1",pod="pod1",volume="myvol"} 0
- kube_pod_spec_volumes_persistentvolumeclaims_readonly{namespace="ns1",persistentvolumeclaim="claim2",pod="pod1",volume="my-readonly-vol"} 1
+ kube_pod_spec_volumes_persistentvolumeclaims_info{namespace="ns1",persistentvolumeclaim="claim1",pod="pod1",volume="myvol",uid="uid1"} 1
+ kube_pod_spec_volumes_persistentvolumeclaims_info{namespace="ns1",persistentvolumeclaim="claim2",pod="pod1",volume="my-readonly-vol",uid="uid1"} 1
+ kube_pod_spec_volumes_persistentvolumeclaims_readonly{namespace="ns1",persistentvolumeclaim="claim1",pod="pod1",volume="myvol",uid="uid1"} 0
+ kube_pod_spec_volumes_persistentvolumeclaims_readonly{namespace="ns1",persistentvolumeclaim="claim2",pod="pod1",volume="my-readonly-vol",uid="uid1"} 1
`,
MetricNames: []string{
@@ -1587,6 +1622,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
Labels: map[string]string{
"app": "example",
},
@@ -1598,7 +1634,7 @@ kube_pod_container_status_last_terminated_reason{container="container7",namespac
Want: `
# HELP kube_pod_runtimeclass_name_info The runtimeclass associated with the pod.
# TYPE kube_pod_runtimeclass_name_info gauge
- kube_pod_runtimeclass_name_info{namespace="ns1",pod="pod1",runtimeclass_name="foo"} 1
+ kube_pod_runtimeclass_name_info{namespace="ns1",pod="pod1",runtimeclass_name="foo",uid="uid1"} 1
`,
MetricNames: []string{
"kube_pod_runtimeclass_name_info",
@@ -1624,6 +1660,7 @@ func BenchmarkPodStore(b *testing.B) {
ObjectMeta: metav1.ObjectMeta{
Name: "pod1",
Namespace: "ns1",
+ UID: "uid1",
},
Status: v1.PodStatus{
ContainerStatuses: []v1.ContainerStatus{
diff --git a/main_test.go b/main_test.go
index 3d74e9666d..2a54996ab7 100644
--- a/main_test.go
+++ b/main_test.go
@@ -143,6 +143,7 @@ func TestFullScrapeCycle(t *testing.T) {
"kube_pod_labels": {
"namespace",
"pod",
+ "uid",
},
})
@@ -264,83 +265,83 @@ func TestFullScrapeCycle(t *testing.T) {
# TYPE kube_pod_status_scheduled gauge
# TYPE kube_pod_status_scheduled_time gauge
# TYPE kube_pod_status_unschedulable gauge
-kube_pod_container_info{namespace="default",pod="pod0",container="container2",image="k8s.gcr.io/hyperkube2",image_id="docker://sha256:bbb",container_id="docker://cd456"} 1
-kube_pod_container_info{namespace="default",pod="pod0",container="container3",image="k8s.gcr.io/hyperkube3",image_id="docker://sha256:ccc",container_id="docker://ef789"} 1
-kube_pod_container_resource_limits{namespace="default",pod="pod0",container="pod1_con1",node="node1",resource="cpu",unit="core"} 0.2
-kube_pod_container_resource_limits{namespace="default",pod="pod0",container="pod1_con1",node="node1",resource="ephemeral_storage",unit="byte"} 3e+08
-kube_pod_container_resource_limits{namespace="default",pod="pod0",container="pod1_con1",node="node1",resource="memory",unit="byte"} 1e+08
-kube_pod_container_resource_limits{namespace="default",pod="pod0",container="pod1_con1",node="node1",resource="nvidia_com_gpu",unit="integer"} 1
-kube_pod_container_resource_limits{namespace="default",pod="pod0",container="pod1_con1",node="node1",resource="storage",unit="byte"} 4e+08
-kube_pod_container_resource_limits{namespace="default",pod="pod0",container="pod1_con2",node="node1",resource="cpu",unit="core"} 0.3
-kube_pod_container_resource_limits{namespace="default",pod="pod0",container="pod1_con2",node="node1",resource="memory",unit="byte"} 2e+08
-kube_pod_container_resource_requests{namespace="default",pod="pod0",container="pod1_con1",node="node1",resource="cpu",unit="core"} 0.2
-kube_pod_container_resource_requests{namespace="default",pod="pod0",container="pod1_con1",node="node1",resource="ephemeral_storage",unit="byte"} 3e+08
-kube_pod_container_resource_requests{namespace="default",pod="pod0",container="pod1_con1",node="node1",resource="memory",unit="byte"} 1e+08
-kube_pod_container_resource_requests{namespace="default",pod="pod0",container="pod1_con1",node="node1",resource="nvidia_com_gpu",unit="integer"} 1
-kube_pod_container_resource_requests{namespace="default",pod="pod0",container="pod1_con1",node="node1",resource="storage",unit="byte"} 4e+08
-kube_pod_container_resource_requests{namespace="default",pod="pod0",container="pod1_con2",node="node1",resource="cpu",unit="core"} 0.3
-kube_pod_container_resource_requests{namespace="default",pod="pod0",container="pod1_con2",node="node1",resource="memory",unit="byte"} 2e+08
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container2",reason="Completed"} 0
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container2",reason="ContainerCannotRun"} 0
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container2",reason="DeadlineExceeded"} 0
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container2",reason="Error"} 0
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container2",reason="Evicted"} 0
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container2",reason="OOMKilled"} 1
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container3",reason="Completed"} 0
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container3",reason="ContainerCannotRun"} 0
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container3",reason="DeadlineExceeded"} 0
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container3",reason="Error"} 0
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container3",reason="Evicted"} 0
-kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",container="container3",reason="OOMKilled"} 0
-kube_pod_container_status_ready{namespace="default",pod="pod0",container="container2"} 0
-kube_pod_container_status_ready{namespace="default",pod="pod0",container="container3"} 0
-kube_pod_container_status_restarts_total{namespace="default",pod="pod0",container="container2"} 0
-kube_pod_container_status_restarts_total{namespace="default",pod="pod0",container="container3"} 0
-kube_pod_container_status_running{namespace="default",pod="pod0",container="container2"} 0
-kube_pod_container_status_running{namespace="default",pod="pod0",container="container3"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container2",reason="Completed"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container2",reason="ContainerCannotRun"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container2",reason="DeadlineExceeded"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container2",reason="Error"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container2",reason="Evicted"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container2",reason="OOMKilled"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container3",reason="Completed"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container3",reason="ContainerCannotRun"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container3",reason="DeadlineExceeded"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container3",reason="Error"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container3",reason="Evicted"} 0
-kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",container="container3",reason="OOMKilled"} 0
-kube_pod_container_status_terminated{namespace="default",pod="pod0",container="container2"} 0
-kube_pod_container_status_terminated{namespace="default",pod="pod0",container="container3"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container2",reason="ContainerCreating"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container2",reason="CrashLoopBackOff"} 1
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container2",reason="CreateContainerConfigError"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container2",reason="CreateContainerError"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container2",reason="ErrImagePull"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container2",reason="ImagePullBackOff"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container2",reason="InvalidImageName"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container3",reason="ContainerCreating"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container3",reason="CrashLoopBackOff"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container3",reason="CreateContainerConfigError"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container3",reason="CreateContainerError"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container3",reason="ErrImagePull"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container3",reason="ImagePullBackOff"} 0
-kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",container="container3",reason="InvalidImageName"} 0
-kube_pod_container_status_waiting{namespace="default",pod="pod0",container="container2"} 1
-kube_pod_container_status_waiting{namespace="default",pod="pod0",container="container3"} 0
-kube_pod_created{namespace="default",pod="pod0"} 1.5e+09
-kube_pod_info{namespace="default",pod="pod0",host_ip="1.1.1.1",pod_ip="1.2.3.4",uid="abc-0",node="node1",created_by_kind="",created_by_name="",priority_class="",host_network="false"} 1
-kube_pod_labels{namespace="default",pod="pod0"} 1
-kube_pod_owner{namespace="default",pod="pod0",owner_kind="",owner_name="",owner_is_controller=""} 1
-kube_pod_restart_policy{namespace="default",pod="pod0",type="Always"} 1
-kube_pod_status_phase{namespace="default",pod="pod0",phase="Failed"} 0
-kube_pod_status_phase{namespace="default",pod="pod0",phase="Pending"} 0
-kube_pod_status_phase{namespace="default",pod="pod0",phase="Running"} 1
-kube_pod_status_phase{namespace="default",pod="pod0",phase="Succeeded"} 0
-kube_pod_status_phase{namespace="default",pod="pod0",phase="Unknown"} 0
-kube_pod_status_reason{namespace="default",pod="pod0",reason="Evicted"} 0
-kube_pod_status_reason{namespace="default",pod="pod0",reason="NodeLost"} 0
-kube_pod_status_reason{namespace="default",pod="pod0",reason="UnexpectedAdmissionError"} 0
+kube_pod_container_info{namespace="default",pod="pod0",uid="abc-0",container="container2",image="k8s.gcr.io/hyperkube2",image_id="docker://sha256:bbb",container_id="docker://cd456"} 1
+kube_pod_container_info{namespace="default",pod="pod0",uid="abc-0",container="container3",image="k8s.gcr.io/hyperkube3",image_id="docker://sha256:ccc",container_id="docker://ef789"} 1
+kube_pod_container_resource_limits{namespace="default",pod="pod0",uid="abc-0",container="pod1_con1",node="node1",resource="cpu",unit="core"} 0.2
+kube_pod_container_resource_limits{namespace="default",pod="pod0",uid="abc-0",container="pod1_con1",node="node1",resource="ephemeral_storage",unit="byte"} 3e+08
+kube_pod_container_resource_limits{namespace="default",pod="pod0",uid="abc-0",container="pod1_con1",node="node1",resource="memory",unit="byte"} 1e+08
+kube_pod_container_resource_limits{namespace="default",pod="pod0",uid="abc-0",container="pod1_con1",node="node1",resource="nvidia_com_gpu",unit="integer"} 1
+kube_pod_container_resource_limits{namespace="default",pod="pod0",uid="abc-0",container="pod1_con1",node="node1",resource="storage",unit="byte"} 4e+08
+kube_pod_container_resource_limits{namespace="default",pod="pod0",uid="abc-0",container="pod1_con2",node="node1",resource="cpu",unit="core"} 0.3
+kube_pod_container_resource_limits{namespace="default",pod="pod0",uid="abc-0",container="pod1_con2",node="node1",resource="memory",unit="byte"} 2e+08
+kube_pod_container_resource_requests{namespace="default",pod="pod0",uid="abc-0",container="pod1_con1",node="node1",resource="cpu",unit="core"} 0.2
+kube_pod_container_resource_requests{namespace="default",pod="pod0",uid="abc-0",container="pod1_con1",node="node1",resource="ephemeral_storage",unit="byte"} 3e+08
+kube_pod_container_resource_requests{namespace="default",pod="pod0",uid="abc-0",container="pod1_con1",node="node1",resource="memory",unit="byte"} 1e+08
+kube_pod_container_resource_requests{namespace="default",pod="pod0",uid="abc-0",container="pod1_con1",node="node1",resource="nvidia_com_gpu",unit="integer"} 1
+kube_pod_container_resource_requests{namespace="default",pod="pod0",uid="abc-0",container="pod1_con1",node="node1",resource="storage",unit="byte"} 4e+08
+kube_pod_container_resource_requests{namespace="default",pod="pod0",uid="abc-0",container="pod1_con2",node="node1",resource="cpu",unit="core"} 0.3
+kube_pod_container_resource_requests{namespace="default",pod="pod0",uid="abc-0",container="pod1_con2",node="node1",resource="memory",unit="byte"} 2e+08
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="Completed"} 0
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="ContainerCannotRun"} 0
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="DeadlineExceeded"} 0
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="Error"} 0
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="Evicted"} 0
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="OOMKilled"} 1
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="Completed"} 0
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="ContainerCannotRun"} 0
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="DeadlineExceeded"} 0
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="Error"} 0
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="Evicted"} 0
+kube_pod_container_status_last_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="OOMKilled"} 0
+kube_pod_container_status_ready{namespace="default",pod="pod0",uid="abc-0",container="container2"} 0
+kube_pod_container_status_ready{namespace="default",pod="pod0",uid="abc-0",container="container3"} 0
+kube_pod_container_status_restarts_total{namespace="default",pod="pod0",uid="abc-0",container="container2"} 0
+kube_pod_container_status_restarts_total{namespace="default",pod="pod0",uid="abc-0",container="container3"} 0
+kube_pod_container_status_running{namespace="default",pod="pod0",uid="abc-0",container="container2"} 0
+kube_pod_container_status_running{namespace="default",pod="pod0",uid="abc-0",container="container3"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="Completed"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="ContainerCannotRun"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="DeadlineExceeded"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="Error"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="Evicted"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="OOMKilled"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="Completed"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="ContainerCannotRun"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="DeadlineExceeded"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="Error"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="Evicted"} 0
+kube_pod_container_status_terminated_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="OOMKilled"} 0
+kube_pod_container_status_terminated{namespace="default",pod="pod0",uid="abc-0",container="container2"} 0
+kube_pod_container_status_terminated{namespace="default",pod="pod0",uid="abc-0",container="container3"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="ContainerCreating"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="CrashLoopBackOff"} 1
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="CreateContainerConfigError"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="CreateContainerError"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="ErrImagePull"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="ImagePullBackOff"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container2",reason="InvalidImageName"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="ContainerCreating"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="CrashLoopBackOff"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="CreateContainerConfigError"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="CreateContainerError"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="ErrImagePull"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="ImagePullBackOff"} 0
+kube_pod_container_status_waiting_reason{namespace="default",pod="pod0",uid="abc-0",container="container3",reason="InvalidImageName"} 0
+kube_pod_container_status_waiting{namespace="default",pod="pod0",uid="abc-0",container="container2"} 1
+kube_pod_container_status_waiting{namespace="default",pod="pod0",uid="abc-0",container="container3"} 0
+kube_pod_created{namespace="default",pod="pod0",uid="abc-0"} 1.5e+09
+kube_pod_info{namespace="default",pod="pod0",uid="abc-0",host_ip="1.1.1.1",pod_ip="1.2.3.4",node="node1",created_by_kind="",created_by_name="",priority_class="",host_network="false"} 1
+kube_pod_labels{namespace="default",pod="pod0",uid="abc-0"} 1
+kube_pod_owner{namespace="default",pod="pod0",uid="abc-0",owner_kind="",owner_name="",owner_is_controller=""} 1
+kube_pod_restart_policy{namespace="default",pod="pod0",uid="abc-0",type="Always"} 1
+kube_pod_status_phase{namespace="default",pod="pod0",uid="abc-0",phase="Failed"} 0
+kube_pod_status_phase{namespace="default",pod="pod0",uid="abc-0",phase="Pending"} 0
+kube_pod_status_phase{namespace="default",pod="pod0",uid="abc-0",phase="Running"} 1
+kube_pod_status_phase{namespace="default",pod="pod0",uid="abc-0",phase="Succeeded"} 0
+kube_pod_status_phase{namespace="default",pod="pod0",uid="abc-0",phase="Unknown"} 0
+kube_pod_status_reason{namespace="default",pod="pod0",uid="abc-0",reason="Evicted"} 0
+kube_pod_status_reason{namespace="default",pod="pod0",uid="abc-0",reason="NodeLost"} 0
+kube_pod_status_reason{namespace="default",pod="pod0",uid="abc-0",reason="UnexpectedAdmissionError"} 0
`
expectedSplit := strings.Split(strings.TrimSpace(expected), "\n")