From f262560caca5db3fdf35014f67d494ddfad909c4 Mon Sep 17 00:00:00 2001 From: Solly Ross Date: Mon, 2 Nov 2015 11:14:08 -0500 Subject: [PATCH] Customize HPA Heapster service namespace/name This commit makes the HPA metrics client configurable in where it looks for heapster instead of hard coding it to "kube-system/heapster". The values of "kube-system/heapster" are still recorded as constants in the metrics client package for use as default values. --- .../app/controllermanager.go | 3 ++- pkg/controller/podautoscaler/horizontal_test.go | 3 ++- .../podautoscaler/metrics/metrics_client.go | 14 +++++++++----- .../podautoscaler/metrics/metrics_client_test.go | 2 +- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 8b200f6bfd4..4cd4e89fd08 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -336,7 +336,8 @@ func (s *CMServer) Run(_ []string) error { glog.Infof("Starting %s apis", groupVersion) if containsResource(resources, "horizontalpodautoscalers") { glog.Infof("Starting horizontal pod controller.") - podautoscaler.NewHorizontalController(kubeClient, metrics.NewHeapsterMetricsClient(kubeClient)). + metricsClient := metrics.NewHeapsterMetricsClient(kubeClient, metrics.DefaultHeapsterNamespace, metrics.DefaultHeapsterService) + podautoscaler.NewHorizontalController(kubeClient, metricsClient). Run(s.HorizontalPodAutoscalerSyncPeriod) } diff --git a/pkg/controller/podautoscaler/horizontal_test.go b/pkg/controller/podautoscaler/horizontal_test.go index 5f96de060f5..854bb53f814 100644 --- a/pkg/controller/podautoscaler/horizontal_test.go +++ b/pkg/controller/podautoscaler/horizontal_test.go @@ -206,7 +206,8 @@ func (tc *testCase) verifyResults(t *testing.T) { func (tc *testCase) runTest(t *testing.T) { testClient := tc.prepareTestClient(t) - hpaController := NewHorizontalController(testClient, metrics.NewHeapsterMetricsClient(testClient)) + metricsClient := metrics.NewHeapsterMetricsClient(testClient, metrics.DefaultHeapsterNamespace, metrics.DefaultHeapsterService) + hpaController := NewHorizontalController(testClient, metricsClient) err := hpaController.reconcileAutoscalers() assert.Equal(t, nil, err) if tc.verifyEvents { diff --git a/pkg/controller/podautoscaler/metrics/metrics_client.go b/pkg/controller/podautoscaler/metrics/metrics_client.go index 13bb79c142c..dde980fbe69 100644 --- a/pkg/controller/podautoscaler/metrics/metrics_client.go +++ b/pkg/controller/podautoscaler/metrics/metrics_client.go @@ -33,8 +33,8 @@ import ( ) const ( - heapsterNamespace = "kube-system" - heapsterService = "heapster" + DefaultHeapsterNamespace = "kube-system" + DefaultHeapsterService = "heapster" ) var heapsterQueryStart = -5 * time.Minute @@ -66,6 +66,8 @@ type metricDefinition struct { type HeapsterMetricsClient struct { client client.Interface resourceDefinitions map[api.ResourceName]metricDefinition + heapsterNamespace string + heapsterService string } var heapsterMetricDefinitions = map[api.ResourceName]metricDefinition{ @@ -91,10 +93,12 @@ var heapsterMetricDefinitions = map[api.ResourceName]metricDefinition{ } // NewHeapsterMetricsClient returns a new instance of Heapster-based implementation of MetricsClient interface. -func NewHeapsterMetricsClient(client client.Interface) *HeapsterMetricsClient { +func NewHeapsterMetricsClient(client client.Interface, namespace, service string) *HeapsterMetricsClient { return &HeapsterMetricsClient{ client: client, resourceDefinitions: heapsterMetricDefinitions, + heapsterNamespace: namespace, + heapsterService: service, } } @@ -155,8 +159,8 @@ func (h *HeapsterMetricsClient) getForPods(resourceName api.ResourceName, namesp strings.Join(podNames, ","), metricSpec.name) - resultRaw, err := h.client.Services(heapsterNamespace). - ProxyGet(heapsterService, metricPath, map[string]string{"start": startTime.Format(time.RFC3339)}). + resultRaw, err := h.client.Services(h.heapsterNamespace). + ProxyGet(h.heapsterService, metricPath, map[string]string{"start": startTime.Format(time.RFC3339)}). DoRaw() if err != nil { diff --git a/pkg/controller/podautoscaler/metrics/metrics_client_test.go b/pkg/controller/podautoscaler/metrics/metrics_client_test.go index c1b4f994efb..8e7d99bfaa0 100644 --- a/pkg/controller/podautoscaler/metrics/metrics_client_test.go +++ b/pkg/controller/podautoscaler/metrics/metrics_client_test.go @@ -148,7 +148,7 @@ func (tc *testCase) verifyResults(t *testing.T, val *ResourceConsumption, err er func (tc *testCase) runTest(t *testing.T) { testClient := tc.prepareTestClient(t) - metricsClient := NewHeapsterMetricsClient(testClient) + metricsClient := NewHeapsterMetricsClient(testClient, DefaultHeapsterNamespace, DefaultHeapsterService) val, _, err := metricsClient.GetResourceConsumptionAndRequest(tc.targetResource, tc.namespace, tc.selector) tc.verifyResults(t, val, err) }