diff --git a/cmd/adapter/adapter.go b/cmd/adapter/adapter.go index 168217cb..b5bff99a 100644 --- a/cmd/adapter/adapter.go +++ b/cmd/adapter/adapter.go @@ -17,6 +17,7 @@ limitations under the License. package main import ( + "context" "crypto/tls" "crypto/x509" "flag" @@ -30,6 +31,7 @@ import ( "time" "github.com/prometheus/exporter-toolkit/web" + "github.com/oklog/run" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" openapinamer "k8s.io/apiserver/pkg/endpoints/openapi" @@ -94,10 +96,12 @@ type PrometheusAdapter struct { MetricsRelistInterval time.Duration // MetricsMaxAge is the period to query available metrics for MetricsMaxAge time.Duration - - secureMetricsPort string - tlsConfig string - metricsHost string + // MetricsPort is the port to expose the prometheus adapter self metrics + MetricsPort string + // TLSConfig is the tls config for exposing the prometheus adapter self metrics + TLSConfig string + // MetricsHost is the host to expose the prometheus adapter self metrics + MetricsHost string metricsConfig *adaptercfg.MetricsDiscoveryConfig } @@ -161,12 +165,9 @@ func (cmd *PrometheusAdapter) addFlags() { "interval at which to re-list the set of all available metrics from Prometheus") cmd.Flags().DurationVar(&cmd.MetricsMaxAge, "metrics-max-age", cmd.MetricsMaxAge, ""+ "period for which to query the set of available metrics from Prometheus") - cmd.Flags().StringVar(&cmd.secureMetricsPort, "secure-metrics-port", cmd.secureMetricsPort, - "Secure port for metrics") - cmd.Flags().StringVar(&cmd.metricsHost, "metrics-host", cmd.metricsHost, - "Host for exposing metrics") - cmd.Flags().StringVar(&cmd.tlsConfig, "tls-config", cmd.tlsConfig, - "TLS configuration for metrics server") + cmd.Flags().StringVar(&cmd.MetricsPort, "metrics-port", cmd.MetricsPort, "Port to expose prometheus-adapter self metrics on. (default:8080) ") + cmd.Flags().StringVar(&cmd.MetricsHost, "metrics-host", cmd.MetricsHost, "Host to expose prometheus-adapter self metrics on. (default:0.0.0.0)") + cmd.Flags().StringVar(&cmd.TLSConfig, "tls-config", cmd.TLSConfig, "Optional TLS configuration for metrics server") } func (cmd *PrometheusAdapter) loadConfig() error { @@ -298,6 +299,8 @@ func main() { cmd := &PrometheusAdapter{ PrometheusURL: "https://localhost", MetricsRelistInterval: 10 * time.Minute, + MetricsHost: "::", + MetricsPort: "8080", } cmd.Name = "prometheus-metrics-adapter" @@ -363,8 +366,24 @@ func main() { } apiServerConfig(config) - cmd.setupMetricsServer() + ctx := context.Background() + var g run.Group + metricsServer := cmd.setupMetricsServer() + { + g.Add(func() error{ + return web.ListenAndServe(&metricsServer, cmd.TLSConfig, adapterLogger{}) + }, func(error) { + ctxShutDown, cancel := context.WithTimeout(ctx, 3*time.Second) + defer cancel() + metricsServer.Shutdown(ctxShutDown) + }) + } + + + if err := g.Run(); err != nil { + klog.Fatalf("unable to run group : %v", err) + } // run the server if err := cmd.Run(stopCh); err != nil { klog.Fatalf("unable to run custom metrics adapter: %v", err) @@ -375,15 +394,14 @@ func apiServerConfig(config *customexternalmetrics.Config) { config.GenericConfig.EnableMetrics = false } -func (cmd PrometheusAdapter) setupMetricsServer() { +func (cmd *PrometheusAdapter) setupMetricsServer() http.Server{ mux := http.NewServeMux() mux.Handle("/metrics", legacyregistry.Handler()) - serverAddress := net.JoinHostPort(cmd.metricsHost, cmd.secureMetricsPort) - metricsServer := http.Server{Handler: mux, Addr: serverAddress} + serverAddress := net.JoinHostPort(cmd.MetricsHost, cmd.MetricsPort) + return http.Server{Handler: mux, Addr: serverAddress} - go web.ListenAndServe(&metricsServer, cmd.tlsConfig, adapterLogger{}) } // makeKubeconfigHTTPClient constructs an HTTP for connecting with the given auth options. diff --git a/deploy/manifests/custom-metrics-apiserver-deployment.yaml b/deploy/manifests/custom-metrics-apiserver-deployment.yaml index 9d0175dd..76014f6d 100644 --- a/deploy/manifests/custom-metrics-apiserver-deployment.yaml +++ b/deploy/manifests/custom-metrics-apiserver-deployment.yaml @@ -29,7 +29,7 @@ spec: - --metrics-relist-interval=1m - --v=10 - --config=/etc/adapter/config.yaml - - --secure-metrics-port=9090 + - --metrics-port=9090 - --metrics-host=0.0.0.0 - --tls-config=/etc/tls/config.yaml ports: @@ -46,9 +46,6 @@ spec: - mountPath: /etc/tls name: metricstlsconfig readOnly: false - - mountPath: /etc/certs - name: servingcerts - readOnly: false volumes: - name: volume-serving-cert secret: @@ -58,9 +55,8 @@ spec: name: adapter-config - name: tmp-vol emptyDir: {} - - configMap: + - name: metricstlsconfig + configMap: name: metrics-tls-config - name: metricstlsconfig - - secret: - secretName: pa-metrics-serving-certs - name: servingcerts + + diff --git a/go.mod b/go.mod index eae97a38..cc18913c 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module sigs.k8s.io/prometheus-adapter go 1.16 require ( + github.com/oklog/run v1.1.0 github.com/onsi/ginkgo v1.16.4 github.com/onsi/gomega v1.15.0 github.com/prometheus/client_golang v1.11.0 diff --git a/go.sum b/go.sum index cdc820ad..61b9ed1c 100644 --- a/go.sum +++ b/go.sum @@ -457,6 +457,8 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=