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  }