Skip to content
This repository has been archived by the owner on Apr 25, 2023. It is now read-only.

Commit

Permalink
chore: serve controller default metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
Hector Fernandez committed Feb 24, 2020
1 parent 52706ee commit 3bb0e27
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ spec:
image: "{{ .Values.repository }}/{{ .Values.image }}:{{ .Values.tag }}"
imagePullPolicy: "{{ .Values.imagePullPolicy }}"
name: controller-manager
ports:
- containerPort: 9090
name: metrics
livenessProbe:
httpGet:
path: /healthz
Expand Down
17 changes: 17 additions & 0 deletions charts/kubefed/charts/controllermanager/templates/service.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,20 @@ spec:
ports:
- port: 443
targetPort: 8443
---
apiVersion: v1
kind: Service
metadata:
name: kubefed-controller-manager-metrics-service
namespace: {{ .Release.Namespace }}
annotations:
prometheus.io/port: "9090"
prometheus.io/scheme: http
prometheus.io/scrape: "true"
spec:
selector:
kubefed-control-plane: "controller-manager"
ports:
- name: metrics
port: 9090
targetPort: metrics
49 changes: 45 additions & 4 deletions cmd/controller-manager/app/controller-manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"os"
"strings"

"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/spf13/cobra"
"github.com/spf13/pflag"

Expand All @@ -38,6 +39,7 @@ import (
"k8s.io/client-go/tools/clientcmd"
"k8s.io/component-base/logs"
"k8s.io/klog"
"sigs.k8s.io/controller-runtime/pkg/metrics"

"sigs.k8s.io/kubefed/cmd/controller-manager/app/leaderelection"
"sigs.k8s.io/kubefed/cmd/controller-manager/app/options"
Expand All @@ -55,8 +57,13 @@ import (
"sigs.k8s.io/kubefed/pkg/version"
)

const (
metricsDefaultBindAddress = ":9090"
healthzDefaultBindAddress = ":8080"
)

var (
kubeconfig, kubeFedConfig, masterURL string
kubeconfig, kubeFedConfig, masterURL, metricsAddr, healthzAddr string
)

// NewControllerManagerCommand creates a *cobra.Command object with default parameters
Expand Down Expand Up @@ -87,7 +94,9 @@ member clusters and do the necessary reconciliation`,
cmd.Flags().AddGoFlagSet(flag.CommandLine)

opts.AddFlags(cmd.Flags())
cmd.Flags().BoolVar(&verFlag, "version", false, "Prints the Version info of controller-manager")
cmd.Flags().StringVar(&healthzAddr, "healthz-addr", healthzDefaultBindAddress, "The address the healthz endpoint binds to.")
cmd.Flags().StringVar(&metricsAddr, "metrics-addr", metricsDefaultBindAddress, "The address the metric endpoint binds to.")
cmd.Flags().BoolVar(&verFlag, "version", false, "Prints the Version info of controller-manager.")
cmd.Flags().StringVar(&kubeFedConfig, "kubefed-config", "", "Path to a KubeFedConfig yaml file. Test only.")
cmd.Flags().StringVar(&kubeconfig, "kubeconfig", "", "Path to a kubeconfig. Only required if out-of-cluster.")
cmd.Flags().StringVar(&masterURL, "master", "", "The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster.")
Expand All @@ -100,8 +109,8 @@ func Run(opts *options.Options, stopChan <-chan struct{}) error {
logs.InitLogs()
defer logs.FlushLogs()

// TODO: Make healthz endpoint configurable
go serveHealthz(":8080")
go serveHealthz(healthzAddr)
go serveMetrics(metricsAddr, stopChan)

var err error
opts.Config.KubeConfig, err = clientcmd.BuildConfigFromFlags(masterURL, kubeconfig)
Expand Down Expand Up @@ -395,3 +404,35 @@ func serveHealthz(address string) {

klog.Fatal(http.ListenAndServe(address, nil))
}

func serveMetrics(address string, stop <-chan struct{}) {
listener, err := metrics.NewListener(address)
if err != nil {
klog.Errorf("error creating the new metrics listener")
klog.Fatal(err)
}
var metricsPath = "/metrics"
handler := promhttp.HandlerFor(metrics.Registry, promhttp.HandlerOpts{
ErrorHandling: promhttp.HTTPErrorOnError,
})
mux := http.NewServeMux()
mux.Handle(metricsPath, handler)
server := http.Server{
Handler: mux,
}
// Run the server
go func() {
klog.V(1).Infof("starting metrics server path %s", metricsPath)
if err := server.Serve(listener); err != nil && err != http.ErrServerClosed {
klog.Errorf("error starting the mertrics server")
klog.Fatal(err)
}
}()

// Shutdown the server when stop is closed
<-stop
if err := server.Shutdown(context.Background()); err != nil {
klog.Errorf("error shutting down the server")
klog.Fatal(err)
}
}
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ require (
github.com/openshift/generic-admission-server v1.14.0
github.com/pborman/uuid v1.2.0
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.0.0
github.com/spf13/cobra v0.0.5
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.4.0
Expand Down
1 change: 1 addition & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk=
github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
Expand Down

0 comments on commit 3bb0e27

Please sign in to comment.