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

chore: serve controller default metrics #1193

Merged
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
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 @@ -29,6 +29,7 @@ import (
// Installs pprof profiling debug endpoints at /debug/pprof.
_ "net/http/pprof"

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

Expand All @@ -41,6 +42,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 @@ -58,8 +60,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 @@ -90,7 +97,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 @@ -103,8 +112,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 @@ -398,3 +407,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