Merge pull request #723 from kubernetes/release-1.6
PR #720 into master
This commit is contained in:
commit
5bcff06a35
|
|
@ -23,7 +23,7 @@ import (
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
|
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
apps "k8s.io/api/apps/v1beta1"
|
appsv1 "k8s.io/api/apps/v1"
|
||||||
autoscaling "k8s.io/api/autoscaling/v2beta1"
|
autoscaling "k8s.io/api/autoscaling/v2beta1"
|
||||||
batchv1 "k8s.io/api/batch/v1"
|
batchv1 "k8s.io/api/batch/v1"
|
||||||
batchv1beta1 "k8s.io/api/batch/v1beta1"
|
batchv1beta1 "k8s.io/api/batch/v1beta1"
|
||||||
|
|
@ -177,7 +177,7 @@ func (b *Builder) buildDaemonSetCollector() *coll.Collector {
|
||||||
familyHeaders,
|
familyHeaders,
|
||||||
composedMetricGenFuncs,
|
composedMetricGenFuncs,
|
||||||
)
|
)
|
||||||
reflectorPerNamespace(b.ctx, b.kubeClient, &extensions.DaemonSet{}, store, b.namespaces, createDaemonSetListWatch)
|
reflectorPerNamespace(b.ctx, b.kubeClient, &appsv1.DaemonSet{}, store, b.namespaces, createDaemonSetListWatch)
|
||||||
|
|
||||||
return coll.NewCollector(store)
|
return coll.NewCollector(store)
|
||||||
}
|
}
|
||||||
|
|
@ -192,7 +192,7 @@ func (b *Builder) buildDeploymentCollector() *coll.Collector {
|
||||||
familyHeaders,
|
familyHeaders,
|
||||||
composedMetricGenFuncs,
|
composedMetricGenFuncs,
|
||||||
)
|
)
|
||||||
reflectorPerNamespace(b.ctx, b.kubeClient, &extensions.Deployment{}, store, b.namespaces, createDeploymentListWatch)
|
reflectorPerNamespace(b.ctx, b.kubeClient, &appsv1.Deployment{}, store, b.namespaces, createDeploymentListWatch)
|
||||||
|
|
||||||
return coll.NewCollector(store)
|
return coll.NewCollector(store)
|
||||||
}
|
}
|
||||||
|
|
@ -432,7 +432,7 @@ func (b *Builder) buildStatefulSetCollector() *coll.Collector {
|
||||||
familyHeaders,
|
familyHeaders,
|
||||||
composedMetricGenFuncs,
|
composedMetricGenFuncs,
|
||||||
)
|
)
|
||||||
reflectorPerNamespace(b.ctx, b.kubeClient, &apps.StatefulSet{}, store, b.namespaces, createStatefulSetListWatch)
|
reflectorPerNamespace(b.ctx, b.kubeClient, &appsv1.StatefulSet{}, store, b.namespaces, createStatefulSetListWatch)
|
||||||
|
|
||||||
return coll.NewCollector(store)
|
return coll.NewCollector(store)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,13 @@ limitations under the License.
|
||||||
package collector
|
package collector
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kube-state-metrics/pkg/metric"
|
v1 "k8s.io/api/apps/v1"
|
||||||
|
|
||||||
"k8s.io/api/extensions/v1beta1"
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/tools/cache"
|
"k8s.io/client-go/tools/cache"
|
||||||
|
"k8s.io/kube-state-metrics/pkg/metric"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -37,7 +36,7 @@ var (
|
||||||
Name: "kube_daemonset_created",
|
Name: "kube_daemonset_created",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "Unix creation timestamp",
|
Help: "Unix creation timestamp",
|
||||||
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
|
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
|
||||||
ms := []*metric.Metric{}
|
ms := []*metric.Metric{}
|
||||||
|
|
||||||
if !d.CreationTimestamp.IsZero() {
|
if !d.CreationTimestamp.IsZero() {
|
||||||
|
|
@ -57,7 +56,7 @@ var (
|
||||||
Name: "kube_daemonset_status_current_number_scheduled",
|
Name: "kube_daemonset_status_current_number_scheduled",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The number of nodes running at least one daemon pod and are supposed to.",
|
Help: "The number of nodes running at least one daemon pod and are supposed to.",
|
||||||
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
|
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -73,7 +72,7 @@ var (
|
||||||
Name: "kube_daemonset_status_desired_number_scheduled",
|
Name: "kube_daemonset_status_desired_number_scheduled",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The number of nodes that should be running the daemon pod.",
|
Help: "The number of nodes that should be running the daemon pod.",
|
||||||
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
|
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -89,7 +88,7 @@ var (
|
||||||
Name: "kube_daemonset_status_number_available",
|
Name: "kube_daemonset_status_number_available",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available",
|
Help: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available",
|
||||||
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
|
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -105,7 +104,7 @@ var (
|
||||||
Name: "kube_daemonset_status_number_misscheduled",
|
Name: "kube_daemonset_status_number_misscheduled",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The number of nodes running a daemon pod but are not supposed to.",
|
Help: "The number of nodes running a daemon pod but are not supposed to.",
|
||||||
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
|
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -121,7 +120,7 @@ var (
|
||||||
Name: "kube_daemonset_status_number_ready",
|
Name: "kube_daemonset_status_number_ready",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.",
|
Help: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.",
|
||||||
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
|
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -137,7 +136,7 @@ var (
|
||||||
Name: "kube_daemonset_status_number_unavailable",
|
Name: "kube_daemonset_status_number_unavailable",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available",
|
Help: "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available",
|
||||||
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
|
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -153,7 +152,7 @@ var (
|
||||||
Name: "kube_daemonset_updated_number_scheduled",
|
Name: "kube_daemonset_updated_number_scheduled",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The total number of nodes that are running updated daemon pod",
|
Help: "The total number of nodes that are running updated daemon pod",
|
||||||
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
|
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -167,7 +166,7 @@ var (
|
||||||
Name: "kube_daemonset_metadata_generation",
|
Name: "kube_daemonset_metadata_generation",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "Sequence number representing a specific generation of the desired state.",
|
Help: "Sequence number representing a specific generation of the desired state.",
|
||||||
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
|
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -183,7 +182,7 @@ var (
|
||||||
Name: descDaemonSetLabelsName,
|
Name: descDaemonSetLabelsName,
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: descDaemonSetLabelsHelp,
|
Help: descDaemonSetLabelsHelp,
|
||||||
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
|
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
|
||||||
labelKeys, labelValues := kubeLabelsToPrometheusLabels(d.ObjectMeta.Labels)
|
labelKeys, labelValues := kubeLabelsToPrometheusLabels(d.ObjectMeta.Labels)
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
|
|
@ -199,9 +198,9 @@ var (
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func wrapDaemonSetFunc(f func(*v1beta1.DaemonSet) *metric.Family) func(interface{}) *metric.Family {
|
func wrapDaemonSetFunc(f func(*v1.DaemonSet) *metric.Family) func(interface{}) *metric.Family {
|
||||||
return func(obj interface{}) *metric.Family {
|
return func(obj interface{}) *metric.Family {
|
||||||
daemonSet := obj.(*v1beta1.DaemonSet)
|
daemonSet := obj.(*v1.DaemonSet)
|
||||||
|
|
||||||
metricFamily := f(daemonSet)
|
metricFamily := f(daemonSet)
|
||||||
|
|
||||||
|
|
@ -217,10 +216,10 @@ func wrapDaemonSetFunc(f func(*v1beta1.DaemonSet) *metric.Family) func(interface
|
||||||
func createDaemonSetListWatch(kubeClient clientset.Interface, ns string) cache.ListWatch {
|
func createDaemonSetListWatch(kubeClient clientset.Interface, ns string) cache.ListWatch {
|
||||||
return cache.ListWatch{
|
return cache.ListWatch{
|
||||||
ListFunc: func(opts metav1.ListOptions) (runtime.Object, error) {
|
ListFunc: func(opts metav1.ListOptions) (runtime.Object, error) {
|
||||||
return kubeClient.ExtensionsV1beta1().DaemonSets(ns).List(opts)
|
return kubeClient.AppsV1().DaemonSets(ns).List(opts)
|
||||||
},
|
},
|
||||||
WatchFunc: func(opts metav1.ListOptions) (watch.Interface, error) {
|
WatchFunc: func(opts metav1.ListOptions) (watch.Interface, error) {
|
||||||
return kubeClient.ExtensionsV1beta1().DaemonSets(ns).Watch(opts)
|
return kubeClient.AppsV1().DaemonSets(ns).Watch(opts)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/api/extensions/v1beta1"
|
v1 "k8s.io/api/apps/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/kube-state-metrics/pkg/metric"
|
"k8s.io/kube-state-metrics/pkg/metric"
|
||||||
)
|
)
|
||||||
|
|
@ -52,7 +52,7 @@ func TestDaemonSetCollector(t *testing.T) {
|
||||||
`
|
`
|
||||||
cases := []generateMetricsTestCase{
|
cases := []generateMetricsTestCase{
|
||||||
{
|
{
|
||||||
Obj: &v1beta1.DaemonSet{
|
Obj: &v1.DaemonSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "ds1",
|
Name: "ds1",
|
||||||
Namespace: "ns1",
|
Namespace: "ns1",
|
||||||
|
|
@ -61,7 +61,7 @@ func TestDaemonSetCollector(t *testing.T) {
|
||||||
},
|
},
|
||||||
Generation: 21,
|
Generation: 21,
|
||||||
},
|
},
|
||||||
Status: v1beta1.DaemonSetStatus{
|
Status: v1.DaemonSetStatus{
|
||||||
CurrentNumberScheduled: 15,
|
CurrentNumberScheduled: 15,
|
||||||
NumberMisscheduled: 10,
|
NumberMisscheduled: 10,
|
||||||
DesiredNumberScheduled: 5,
|
DesiredNumberScheduled: 5,
|
||||||
|
|
@ -92,7 +92,7 @@ func TestDaemonSetCollector(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Obj: &v1beta1.DaemonSet{
|
Obj: &v1.DaemonSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "ds2",
|
Name: "ds2",
|
||||||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||||
|
|
@ -102,7 +102,7 @@ func TestDaemonSetCollector(t *testing.T) {
|
||||||
},
|
},
|
||||||
Generation: 14,
|
Generation: 14,
|
||||||
},
|
},
|
||||||
Status: v1beta1.DaemonSetStatus{
|
Status: v1.DaemonSetStatus{
|
||||||
CurrentNumberScheduled: 10,
|
CurrentNumberScheduled: 10,
|
||||||
NumberMisscheduled: 5,
|
NumberMisscheduled: 5,
|
||||||
DesiredNumberScheduled: 0,
|
DesiredNumberScheduled: 0,
|
||||||
|
|
@ -135,7 +135,7 @@ func TestDaemonSetCollector(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Obj: &v1beta1.DaemonSet{
|
Obj: &v1.DaemonSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "ds3",
|
Name: "ds3",
|
||||||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||||
|
|
@ -145,7 +145,7 @@ func TestDaemonSetCollector(t *testing.T) {
|
||||||
},
|
},
|
||||||
Generation: 15,
|
Generation: 15,
|
||||||
},
|
},
|
||||||
Status: v1beta1.DaemonSetStatus{
|
Status: v1.DaemonSetStatus{
|
||||||
CurrentNumberScheduled: 10,
|
CurrentNumberScheduled: 10,
|
||||||
NumberMisscheduled: 5,
|
NumberMisscheduled: 5,
|
||||||
DesiredNumberScheduled: 15,
|
DesiredNumberScheduled: 15,
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ package collector
|
||||||
import (
|
import (
|
||||||
"k8s.io/kube-state-metrics/pkg/metric"
|
"k8s.io/kube-state-metrics/pkg/metric"
|
||||||
|
|
||||||
"k8s.io/api/apps/v1beta1"
|
v1 "k8s.io/api/apps/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
|
|
@ -37,7 +37,7 @@ var (
|
||||||
Name: "kube_statefulset_created",
|
Name: "kube_statefulset_created",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "Unix creation timestamp",
|
Help: "Unix creation timestamp",
|
||||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
|
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||||
ms := []*metric.Metric{}
|
ms := []*metric.Metric{}
|
||||||
|
|
||||||
if !s.CreationTimestamp.IsZero() {
|
if !s.CreationTimestamp.IsZero() {
|
||||||
|
|
@ -55,7 +55,7 @@ var (
|
||||||
Name: "kube_statefulset_status_replicas",
|
Name: "kube_statefulset_status_replicas",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The number of replicas per StatefulSet.",
|
Help: "The number of replicas per StatefulSet.",
|
||||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
|
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -69,7 +69,7 @@ var (
|
||||||
Name: "kube_statefulset_status_replicas_current",
|
Name: "kube_statefulset_status_replicas_current",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The number of current replicas per StatefulSet.",
|
Help: "The number of current replicas per StatefulSet.",
|
||||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
|
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -83,7 +83,7 @@ var (
|
||||||
Name: "kube_statefulset_status_replicas_ready",
|
Name: "kube_statefulset_status_replicas_ready",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The number of ready replicas per StatefulSet.",
|
Help: "The number of ready replicas per StatefulSet.",
|
||||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
|
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -97,7 +97,7 @@ var (
|
||||||
Name: "kube_statefulset_status_replicas_updated",
|
Name: "kube_statefulset_status_replicas_updated",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The number of updated replicas per StatefulSet.",
|
Help: "The number of updated replicas per StatefulSet.",
|
||||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
|
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -111,17 +111,13 @@ var (
|
||||||
Name: "kube_statefulset_status_observed_generation",
|
Name: "kube_statefulset_status_observed_generation",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "The generation observed by the StatefulSet controller.",
|
Help: "The generation observed by the StatefulSet controller.",
|
||||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
|
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||||
ms := []*metric.Metric{}
|
|
||||||
|
|
||||||
if s.Status.ObservedGeneration != nil {
|
|
||||||
ms = append(ms, &metric.Metric{
|
|
||||||
Value: float64(*s.Status.ObservedGeneration),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: ms,
|
Metrics: []*metric.Metric{
|
||||||
|
{
|
||||||
|
Value: float64(s.Status.ObservedGeneration),
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
|
@ -129,7 +125,7 @@ var (
|
||||||
Name: "kube_statefulset_replicas",
|
Name: "kube_statefulset_replicas",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "Number of desired pods for a StatefulSet.",
|
Help: "Number of desired pods for a StatefulSet.",
|
||||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
|
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||||
ms := []*metric.Metric{}
|
ms := []*metric.Metric{}
|
||||||
|
|
||||||
if s.Spec.Replicas != nil {
|
if s.Spec.Replicas != nil {
|
||||||
|
|
@ -147,7 +143,7 @@ var (
|
||||||
Name: "kube_statefulset_metadata_generation",
|
Name: "kube_statefulset_metadata_generation",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "Sequence number representing a specific generation of the desired state for the StatefulSet.",
|
Help: "Sequence number representing a specific generation of the desired state for the StatefulSet.",
|
||||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
|
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -161,7 +157,7 @@ var (
|
||||||
Name: descStatefulSetLabelsName,
|
Name: descStatefulSetLabelsName,
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: descStatefulSetLabelsHelp,
|
Help: descStatefulSetLabelsHelp,
|
||||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
|
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||||
labelKeys, labelValues := kubeLabelsToPrometheusLabels(s.Labels)
|
labelKeys, labelValues := kubeLabelsToPrometheusLabels(s.Labels)
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
|
|
@ -178,7 +174,7 @@ var (
|
||||||
Name: "kube_statefulset_status_current_revision",
|
Name: "kube_statefulset_status_current_revision",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "Indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).",
|
Help: "Indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).",
|
||||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
|
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -194,7 +190,7 @@ var (
|
||||||
Name: "kube_statefulset_status_update_revision",
|
Name: "kube_statefulset_status_update_revision",
|
||||||
Type: metric.Gauge,
|
Type: metric.Gauge,
|
||||||
Help: "Indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)",
|
Help: "Indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)",
|
||||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
|
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||||
return &metric.Family{
|
return &metric.Family{
|
||||||
Metrics: []*metric.Metric{
|
Metrics: []*metric.Metric{
|
||||||
{
|
{
|
||||||
|
|
@ -209,9 +205,9 @@ var (
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func wrapStatefulSetFunc(f func(*v1beta1.StatefulSet) *metric.Family) func(interface{}) *metric.Family {
|
func wrapStatefulSetFunc(f func(*v1.StatefulSet) *metric.Family) func(interface{}) *metric.Family {
|
||||||
return func(obj interface{}) *metric.Family {
|
return func(obj interface{}) *metric.Family {
|
||||||
statefulSet := obj.(*v1beta1.StatefulSet)
|
statefulSet := obj.(*v1.StatefulSet)
|
||||||
|
|
||||||
metricFamily := f(statefulSet)
|
metricFamily := f(statefulSet)
|
||||||
|
|
||||||
|
|
@ -227,10 +223,10 @@ func wrapStatefulSetFunc(f func(*v1beta1.StatefulSet) *metric.Family) func(inter
|
||||||
func createStatefulSetListWatch(kubeClient clientset.Interface, ns string) cache.ListWatch {
|
func createStatefulSetListWatch(kubeClient clientset.Interface, ns string) cache.ListWatch {
|
||||||
return cache.ListWatch{
|
return cache.ListWatch{
|
||||||
ListFunc: func(opts metav1.ListOptions) (runtime.Object, error) {
|
ListFunc: func(opts metav1.ListOptions) (runtime.Object, error) {
|
||||||
return kubeClient.AppsV1beta1().StatefulSets(ns).List(opts)
|
return kubeClient.AppsV1().StatefulSets(ns).List(opts)
|
||||||
},
|
},
|
||||||
WatchFunc: func(opts metav1.ListOptions) (watch.Interface, error) {
|
WatchFunc: func(opts metav1.ListOptions) (watch.Interface, error) {
|
||||||
return kubeClient.AppsV1beta1().StatefulSets(ns).Watch(opts)
|
return kubeClient.AppsV1().StatefulSets(ns).Watch(opts)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/api/apps/v1beta1"
|
v1 "k8s.io/api/apps/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/kube-state-metrics/pkg/metric"
|
"k8s.io/kube-state-metrics/pkg/metric"
|
||||||
)
|
)
|
||||||
|
|
@ -63,7 +63,7 @@ func TestStatefuleSetCollector(t *testing.T) {
|
||||||
`
|
`
|
||||||
cases := []generateMetricsTestCase{
|
cases := []generateMetricsTestCase{
|
||||||
{
|
{
|
||||||
Obj: &v1beta1.StatefulSet{
|
Obj: &v1.StatefulSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "statefulset1",
|
Name: "statefulset1",
|
||||||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||||
|
|
@ -73,12 +73,12 @@ func TestStatefuleSetCollector(t *testing.T) {
|
||||||
},
|
},
|
||||||
Generation: 3,
|
Generation: 3,
|
||||||
},
|
},
|
||||||
Spec: v1beta1.StatefulSetSpec{
|
Spec: v1.StatefulSetSpec{
|
||||||
Replicas: &statefulSet1Replicas,
|
Replicas: &statefulSet1Replicas,
|
||||||
ServiceName: "statefulset1service",
|
ServiceName: "statefulset1service",
|
||||||
},
|
},
|
||||||
Status: v1beta1.StatefulSetStatus{
|
Status: v1.StatefulSetStatus{
|
||||||
ObservedGeneration: &statefulSet1ObservedGeneration,
|
ObservedGeneration: statefulSet1ObservedGeneration,
|
||||||
Replicas: 2,
|
Replicas: 2,
|
||||||
UpdateRevision: "ur1",
|
UpdateRevision: "ur1",
|
||||||
CurrentRevision: "cr1",
|
CurrentRevision: "cr1",
|
||||||
|
|
@ -112,7 +112,7 @@ func TestStatefuleSetCollector(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Obj: &v1beta1.StatefulSet{
|
Obj: &v1.StatefulSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "statefulset2",
|
Name: "statefulset2",
|
||||||
Namespace: "ns2",
|
Namespace: "ns2",
|
||||||
|
|
@ -121,13 +121,13 @@ func TestStatefuleSetCollector(t *testing.T) {
|
||||||
},
|
},
|
||||||
Generation: 21,
|
Generation: 21,
|
||||||
},
|
},
|
||||||
Spec: v1beta1.StatefulSetSpec{
|
Spec: v1.StatefulSetSpec{
|
||||||
Replicas: &statefulSet2Replicas,
|
Replicas: &statefulSet2Replicas,
|
||||||
ServiceName: "statefulset2service",
|
ServiceName: "statefulset2service",
|
||||||
},
|
},
|
||||||
Status: v1beta1.StatefulSetStatus{
|
Status: v1.StatefulSetStatus{
|
||||||
CurrentReplicas: 2,
|
CurrentReplicas: 2,
|
||||||
ObservedGeneration: &statefulSet2ObservedGeneration,
|
ObservedGeneration: statefulSet2ObservedGeneration,
|
||||||
ReadyReplicas: 5,
|
ReadyReplicas: 5,
|
||||||
Replicas: 5,
|
Replicas: 5,
|
||||||
UpdatedReplicas: 3,
|
UpdatedReplicas: 3,
|
||||||
|
|
@ -161,7 +161,7 @@ func TestStatefuleSetCollector(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Obj: &v1beta1.StatefulSet{
|
Obj: &v1.StatefulSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "statefulset3",
|
Name: "statefulset3",
|
||||||
Namespace: "ns3",
|
Namespace: "ns3",
|
||||||
|
|
@ -170,12 +170,12 @@ func TestStatefuleSetCollector(t *testing.T) {
|
||||||
},
|
},
|
||||||
Generation: 36,
|
Generation: 36,
|
||||||
},
|
},
|
||||||
Spec: v1beta1.StatefulSetSpec{
|
Spec: v1.StatefulSetSpec{
|
||||||
Replicas: &statefulSet3Replicas,
|
Replicas: &statefulSet3Replicas,
|
||||||
ServiceName: "statefulset2service",
|
ServiceName: "statefulset2service",
|
||||||
},
|
},
|
||||||
Status: v1beta1.StatefulSetStatus{
|
Status: v1.StatefulSetStatus{
|
||||||
ObservedGeneration: nil,
|
ObservedGeneration: 0,
|
||||||
Replicas: 7,
|
Replicas: 7,
|
||||||
UpdateRevision: "ur3",
|
UpdateRevision: "ur3",
|
||||||
CurrentRevision: "cr3",
|
CurrentRevision: "cr3",
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: apps/v1beta2
|
apiVersion: apps/v1
|
||||||
kind: DaemonSet
|
kind: DaemonSet
|
||||||
metadata:
|
metadata:
|
||||||
name: daemonset
|
name: daemonset
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: apps/v1beta2
|
apiVersion: apps/v1
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: statefulset
|
name: statefulset
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,6 @@ gopkg.in/inf.v0
|
||||||
gopkg.in/yaml.v2
|
gopkg.in/yaml.v2
|
||||||
# k8s.io/api v0.0.0-20190313235455-40a48860b5ab
|
# k8s.io/api v0.0.0-20190313235455-40a48860b5ab
|
||||||
k8s.io/api/apps/v1
|
k8s.io/api/apps/v1
|
||||||
k8s.io/api/apps/v1beta1
|
|
||||||
k8s.io/api/autoscaling/v2beta1
|
k8s.io/api/autoscaling/v2beta1
|
||||||
k8s.io/api/batch/v1
|
k8s.io/api/batch/v1
|
||||||
k8s.io/api/batch/v1beta1
|
k8s.io/api/batch/v1beta1
|
||||||
|
|
@ -127,6 +126,7 @@ k8s.io/api/certificates/v1beta1
|
||||||
k8s.io/api/core/v1
|
k8s.io/api/core/v1
|
||||||
k8s.io/api/extensions/v1beta1
|
k8s.io/api/extensions/v1beta1
|
||||||
k8s.io/api/policy/v1beta1
|
k8s.io/api/policy/v1beta1
|
||||||
|
k8s.io/api/apps/v1beta1
|
||||||
k8s.io/api/admissionregistration/v1beta1
|
k8s.io/api/admissionregistration/v1beta1
|
||||||
k8s.io/api/autoscaling/v1
|
k8s.io/api/autoscaling/v1
|
||||||
k8s.io/api/apps/v1beta2
|
k8s.io/api/apps/v1beta2
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue