Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: change the expectedType of the kube-client reflector to match the listWatch #720

Merged
merged 3 commits into from
Apr 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions internal/collector/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
"k8s.io/klog"

"golang.org/x/net/context"
apps "k8s.io/api/apps/v1beta1"
appsv1 "k8s.io/api/apps/v1"
autoscaling "k8s.io/api/autoscaling/v2beta1"
batchv1 "k8s.io/api/batch/v1"
batchv1beta1 "k8s.io/api/batch/v1beta1"
Expand Down Expand Up @@ -177,7 +177,7 @@ func (b *Builder) buildDaemonSetCollector() *coll.Collector {
familyHeaders,
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)
}
Expand All @@ -192,7 +192,7 @@ func (b *Builder) buildDeploymentCollector() *coll.Collector {
familyHeaders,
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)
}
Expand Down Expand Up @@ -432,7 +432,7 @@ func (b *Builder) buildStatefulSetCollector() *coll.Collector {
familyHeaders,
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)
}
Expand Down
33 changes: 16 additions & 17 deletions internal/collector/daemonset.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,13 @@ limitations under the License.
package collector

import (
"k8s.io/kube-state-metrics/pkg/metric"

"k8s.io/api/extensions/v1beta1"
v1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/watch"
clientset "k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/cache"
"k8s.io/kube-state-metrics/pkg/metric"
)

var (
Expand All @@ -37,7 +36,7 @@ var (
Name: "kube_daemonset_created",
Type: metric.Gauge,
Help: "Unix creation timestamp",
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
ms := []*metric.Metric{}

if !d.CreationTimestamp.IsZero() {
Expand All @@ -57,7 +56,7 @@ var (
Name: "kube_daemonset_status_current_number_scheduled",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -73,7 +72,7 @@ var (
Name: "kube_daemonset_status_desired_number_scheduled",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -89,7 +88,7 @@ var (
Name: "kube_daemonset_status_number_available",
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",
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
return &metric.Family{
Metrics: []*metric.Metric{
{
Expand All @@ -105,7 +104,7 @@ var (
Name: "kube_daemonset_status_number_misscheduled",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -121,7 +120,7 @@ var (
Name: "kube_daemonset_status_number_ready",
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.",
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
return &metric.Family{
Metrics: []*metric.Metric{
{
Expand All @@ -137,7 +136,7 @@ var (
Name: "kube_daemonset_status_number_unavailable",
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",
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
return &metric.Family{
Metrics: []*metric.Metric{
{
Expand All @@ -153,7 +152,7 @@ var (
Name: "kube_daemonset_updated_number_scheduled",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -167,7 +166,7 @@ var (
Name: "kube_daemonset_metadata_generation",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -183,7 +182,7 @@ var (
Name: descDaemonSetLabelsName,
Type: metric.Gauge,
Help: descDaemonSetLabelsHelp,
GenerateFunc: wrapDaemonSetFunc(func(d *v1beta1.DaemonSet) *metric.Family {
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
labelKeys, labelValues := kubeLabelsToPrometheusLabels(d.ObjectMeta.Labels)
return &metric.Family{
Metrics: []*metric.Metric{
Expand All @@ -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 {
daemonSet := obj.(*v1beta1.DaemonSet)
daemonSet := obj.(*v1.DaemonSet)

metricFamily := f(daemonSet)

Expand All @@ -217,10 +216,10 @@ func wrapDaemonSetFunc(f func(*v1beta1.DaemonSet) *metric.Family) func(interface
func createDaemonSetListWatch(kubeClient clientset.Interface, ns string) cache.ListWatch {
return cache.ListWatch{
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) {
return kubeClient.ExtensionsV1beta1().DaemonSets(ns).Watch(opts)
return kubeClient.AppsV1().DaemonSets(ns).Watch(opts)
},
}
}
14 changes: 7 additions & 7 deletions internal/collector/daemonset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
"testing"
"time"

"k8s.io/api/extensions/v1beta1"
v1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/kube-state-metrics/pkg/metric"
)
Expand Down Expand Up @@ -52,7 +52,7 @@ func TestDaemonSetCollector(t *testing.T) {
`
cases := []generateMetricsTestCase{
{
Obj: &v1beta1.DaemonSet{
Obj: &v1.DaemonSet{
ObjectMeta: metav1.ObjectMeta{
Name: "ds1",
Namespace: "ns1",
Expand All @@ -61,7 +61,7 @@ func TestDaemonSetCollector(t *testing.T) {
},
Generation: 21,
},
Status: v1beta1.DaemonSetStatus{
Status: v1.DaemonSetStatus{
CurrentNumberScheduled: 15,
NumberMisscheduled: 10,
DesiredNumberScheduled: 5,
Expand Down Expand Up @@ -92,7 +92,7 @@ func TestDaemonSetCollector(t *testing.T) {
},
},
{
Obj: &v1beta1.DaemonSet{
Obj: &v1.DaemonSet{
ObjectMeta: metav1.ObjectMeta{
Name: "ds2",
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
Expand All @@ -102,7 +102,7 @@ func TestDaemonSetCollector(t *testing.T) {
},
Generation: 14,
},
Status: v1beta1.DaemonSetStatus{
Status: v1.DaemonSetStatus{
CurrentNumberScheduled: 10,
NumberMisscheduled: 5,
DesiredNumberScheduled: 0,
Expand Down Expand Up @@ -135,7 +135,7 @@ func TestDaemonSetCollector(t *testing.T) {
},
},
{
Obj: &v1beta1.DaemonSet{
Obj: &v1.DaemonSet{
ObjectMeta: metav1.ObjectMeta{
Name: "ds3",
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
Expand All @@ -145,7 +145,7 @@ func TestDaemonSetCollector(t *testing.T) {
},
Generation: 15,
},
Status: v1beta1.DaemonSetStatus{
Status: v1.DaemonSetStatus{
CurrentNumberScheduled: 10,
NumberMisscheduled: 5,
DesiredNumberScheduled: 15,
Expand Down
46 changes: 21 additions & 25 deletions internal/collector/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ package collector
import (
"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"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/watch"
Expand All @@ -37,7 +37,7 @@ var (
Name: "kube_statefulset_created",
Type: metric.Gauge,
Help: "Unix creation timestamp",
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
ms := []*metric.Metric{}

if !s.CreationTimestamp.IsZero() {
Expand All @@ -55,7 +55,7 @@ var (
Name: "kube_statefulset_status_replicas",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -69,7 +69,7 @@ var (
Name: "kube_statefulset_status_replicas_current",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -83,7 +83,7 @@ var (
Name: "kube_statefulset_status_replicas_ready",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -97,7 +97,7 @@ var (
Name: "kube_statefulset_status_replicas_updated",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -111,25 +111,21 @@ var (
Name: "kube_statefulset_status_observed_generation",
Type: metric.Gauge,
Help: "The generation observed by the StatefulSet controller.",
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
ms := []*metric.Metric{}

if s.Status.ObservedGeneration != nil {
ms = append(ms, &metric.Metric{
Value: float64(*s.Status.ObservedGeneration),
})
}

GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
return &metric.Family{
Metrics: ms,
Metrics: []*metric.Metric{
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is merely a simplification.

{
Value: float64(s.Status.ObservedGeneration),
},
},
}
}),
},
{
Name: "kube_statefulset_replicas",
Type: metric.Gauge,
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{}

if s.Spec.Replicas != nil {
Expand All @@ -147,7 +143,7 @@ var (
Name: "kube_statefulset_metadata_generation",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -161,7 +157,7 @@ var (
Name: descStatefulSetLabelsName,
Type: metric.Gauge,
Help: descStatefulSetLabelsHelp,
GenerateFunc: wrapStatefulSetFunc(func(s *v1beta1.StatefulSet) *metric.Family {
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
labelKeys, labelValues := kubeLabelsToPrometheusLabels(s.Labels)
return &metric.Family{
Metrics: []*metric.Metric{
Expand All @@ -178,7 +174,7 @@ var (
Name: "kube_statefulset_status_current_revision",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -194,7 +190,7 @@ var (
Name: "kube_statefulset_status_update_revision",
Type: metric.Gauge,
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{
Metrics: []*metric.Metric{
{
Expand All @@ -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 {
statefulSet := obj.(*v1beta1.StatefulSet)
statefulSet := obj.(*v1.StatefulSet)

metricFamily := f(statefulSet)

Expand All @@ -227,10 +223,10 @@ func wrapStatefulSetFunc(f func(*v1beta1.StatefulSet) *metric.Family) func(inter
func createStatefulSetListWatch(kubeClient clientset.Interface, ns string) cache.ListWatch {
return cache.ListWatch{
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) {
return kubeClient.AppsV1beta1().StatefulSets(ns).Watch(opts)
return kubeClient.AppsV1().StatefulSets(ns).Watch(opts)
},
}
}
Loading