github.com/galamsiva2020/kubernetes-heapster-monitoring@v0.0.0-20210823134957-3c1baa7c1e70/metrics/cmd/heapster-apiserver/app/server.go (about) 1 // Copyright 2016 Google Inc. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Package app does all of the work necessary to create a Heapster 16 // APIServer by binding together the Master Metrics API. 17 // It can be configured and called directly or via the hyperkube framework. 18 package app 19 20 import ( 21 "fmt" 22 23 "k8s.io/apimachinery/pkg/util/wait" 24 genericapiserver "k8s.io/apiserver/pkg/server" 25 v1listers "k8s.io/client-go/listers/core/v1" 26 "k8s.io/heapster/metrics/options" 27 metricsink "k8s.io/heapster/metrics/sinks/metric" 28 "k8s.io/kubernetes/pkg/api/legacyscheme" 29 ) 30 31 type HeapsterAPIServer struct { 32 *genericapiserver.GenericAPIServer 33 options *options.HeapsterRunOptions 34 metricSink *metricsink.MetricSink 35 nodeLister v1listers.NodeLister 36 } 37 38 // Run runs the specified APIServer. This should never exit. 39 func (h *HeapsterAPIServer) RunServer() error { 40 h.PrepareRun().Run(wait.NeverStop) 41 return nil 42 } 43 44 func NewHeapsterApiServer(s *options.HeapsterRunOptions, metricSink *metricsink.MetricSink, 45 nodeLister v1listers.NodeLister, podLister v1listers.PodLister) (*HeapsterAPIServer, error) { 46 47 server, err := newAPIServer(s) 48 if err != nil { 49 return &HeapsterAPIServer{}, err 50 } 51 52 installMetricsAPIs(s, server, metricSink, nodeLister, podLister) 53 54 return &HeapsterAPIServer{ 55 GenericAPIServer: server, 56 options: s, 57 metricSink: metricSink, 58 nodeLister: nodeLister, 59 }, nil 60 } 61 62 func newAPIServer(s *options.HeapsterRunOptions) (*genericapiserver.GenericAPIServer, error) { 63 if err := s.SecureServing.MaybeDefaultWithSelfSignedCerts("heapster.kube-system", nil, nil); err != nil { 64 return nil, fmt.Errorf("error creating self-signed certificates: %v", err) 65 } 66 67 serverConfig := genericapiserver.NewConfig(legacyscheme.Codecs) 68 69 if err := s.SecureServing.ApplyTo(serverConfig); err != nil { 70 return nil, err 71 } 72 73 if !s.DisableAuthForTesting { 74 if err := s.Authentication.ApplyTo(serverConfig); err != nil { 75 return nil, err 76 } 77 if err := s.Authorization.ApplyTo(serverConfig); err != nil { 78 return nil, err 79 } 80 } 81 82 serverConfig.SwaggerConfig = genericapiserver.DefaultSwaggerConfig() 83 84 return serverConfig.Complete(nil).New("heapster", genericapiserver.EmptyDelegate) 85 }