github.com/galamsiva2020/kubernetes-heapster-monitoring@v0.0.0-20210823134957-3c1baa7c1e70/metrics/cmd/heapster-apiserver/app/heapstermetrics.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 16 17 import ( 18 "github.com/golang/glog" 19 20 "k8s.io/apimachinery/pkg/apimachinery/announced" 21 "k8s.io/apimachinery/pkg/apimachinery/registered" 22 "k8s.io/apimachinery/pkg/runtime" 23 "k8s.io/apimachinery/pkg/util/sets" 24 "k8s.io/apiserver/pkg/registry/rest" 25 genericapiserver "k8s.io/apiserver/pkg/server" 26 v1listers "k8s.io/client-go/listers/core/v1" 27 "k8s.io/heapster/metrics/options" 28 metricsink "k8s.io/heapster/metrics/sinks/metric" 29 nodemetricsstorage "k8s.io/heapster/metrics/storage/nodemetrics" 30 podmetricsstorage "k8s.io/heapster/metrics/storage/podmetrics" 31 "k8s.io/kubernetes/pkg/api/legacyscheme" 32 _ "k8s.io/kubernetes/pkg/apis/core/install" 33 "k8s.io/metrics/pkg/apis/metrics" 34 metrics_api "k8s.io/metrics/pkg/apis/metrics/v1alpha1" 35 ) 36 37 func init() { 38 install(legacyscheme.GroupFactoryRegistry, legacyscheme.Registry, legacyscheme.Scheme) 39 } 40 41 func installMetricsAPIs(s *options.HeapsterRunOptions, g *genericapiserver.GenericAPIServer, 42 metricSink *metricsink.MetricSink, nodeLister v1listers.NodeLister, podLister v1listers.PodLister) { 43 44 apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(metrics.GroupName, legacyscheme.Registry, legacyscheme.Scheme, legacyscheme.ParameterCodec, legacyscheme.Codecs) 45 46 nodemetricsStorage := nodemetricsstorage.NewStorage(metrics.Resource("nodemetrics"), metricSink, nodeLister) 47 podmetricsStorage := podmetricsstorage.NewStorage(metrics.Resource("podmetrics"), metricSink, podLister) 48 heapsterResources := map[string]rest.Storage{ 49 "nodes": nodemetricsStorage, 50 "pods": podmetricsStorage, 51 } 52 apiGroupInfo.VersionedResourcesStorageMap[metrics_api.SchemeGroupVersion.Version] = heapsterResources 53 54 if err := g.InstallAPIGroup(&apiGroupInfo); err != nil { 55 glog.Fatalf("Error in registering group versions: %v", err) 56 } 57 } 58 59 // This function is directly copied from https://github.com/kubernetes/metrics/blob/master/pkg/apis/metrics/install/install.go#L31 with only changes by replacing v1beta1 to v1alpha1. 60 // This function should be deleted only after move metrics to v1beta1. 61 // Install registers the API group and adds types to a scheme 62 func install(groupFactoryRegistry announced.APIGroupFactoryRegistry, registry *registered.APIRegistrationManager, scheme *runtime.Scheme) { 63 if err := announced.NewGroupMetaFactory( 64 &announced.GroupMetaFactoryArgs{ 65 GroupName: metrics.GroupName, 66 VersionPreferenceOrder: []string{metrics_api.SchemeGroupVersion.Version}, 67 RootScopedKinds: sets.NewString("NodeMetrics"), 68 AddInternalObjectsToScheme: metrics.AddToScheme, 69 }, 70 announced.VersionToSchemeFunc{ 71 metrics_api.SchemeGroupVersion.Version: metrics_api.AddToScheme, 72 }, 73 ).Announce(groupFactoryRegistry).RegisterAndEnable(registry, scheme); err != nil { 74 panic(err) 75 } 76 }