Use client generator to generate all k8s clients and add respective client-go metrics (#2668)
* Define client generator to generate all k8s clients * Increase QPS and burst values * Capture client-go metrics * Support for controller runtime metrics Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
This commit is contained in:
+57
-72
@@ -19,7 +19,6 @@ package crd
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"go.uber.org/zap"
|
||||
@@ -29,64 +28,76 @@ import (
|
||||
"k8s.io/client-go/kubernetes"
|
||||
_ "k8s.io/client-go/plugin/pkg/client/auth"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
metricsclient "k8s.io/metrics/pkg/client/clientset/versioned"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client/config"
|
||||
|
||||
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
||||
"github.com/fission/fission/pkg/utils"
|
||||
)
|
||||
|
||||
// GetKubernetesClient gets a kubernetes client using the kubeconfig file at the
|
||||
// environment var $KUBECONFIG, or an in-cluster config if that's
|
||||
// undefined.
|
||||
func GetKubernetesClient() (*rest.Config, kubernetes.Interface, apiextensionsclient.Interface, metricsclient.Interface, error) {
|
||||
var config *rest.Config
|
||||
var err error
|
||||
|
||||
// get the config, either from kubeconfig or using our
|
||||
// in-cluster service account
|
||||
kubeConfig := os.Getenv("KUBECONFIG")
|
||||
if len(kubeConfig) != 0 {
|
||||
config, err = clientcmd.BuildConfigFromFlags("", kubeConfig)
|
||||
if err != nil {
|
||||
return nil, nil, nil, nil, err
|
||||
}
|
||||
} else {
|
||||
config, err = rest.InClusterConfig()
|
||||
if err != nil {
|
||||
return nil, nil, nil, nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// creates the clientset
|
||||
clientset, err := kubernetes.NewForConfig(config)
|
||||
if err != nil {
|
||||
return nil, nil, nil, nil, err
|
||||
}
|
||||
|
||||
apiExtClientset, err := apiextensionsclient.NewForConfig(config)
|
||||
if err != nil {
|
||||
return nil, nil, nil, nil, err
|
||||
}
|
||||
|
||||
metricsClient, _ := metricsclient.NewForConfig(config)
|
||||
|
||||
return config, clientset, apiExtClientset, metricsClient, nil
|
||||
type ClientGenerator struct {
|
||||
restConfig *rest.Config
|
||||
}
|
||||
|
||||
func MakeFissionClient() (versioned.Interface, kubernetes.Interface, apiextensionsclient.Interface, metricsclient.Interface, error) {
|
||||
config, kubeClient, apiExtClient, metricsClient, err := GetKubernetesClient()
|
||||
if err != nil {
|
||||
return nil, nil, nil, nil, err
|
||||
func (cg *ClientGenerator) getRestConfig() (*rest.Config, error) {
|
||||
if cg.restConfig != nil {
|
||||
return cg.restConfig, nil
|
||||
}
|
||||
|
||||
// make a CRD REST client with the config
|
||||
crdClient, err := versioned.NewForConfig(config)
|
||||
var err error
|
||||
cg.restConfig, err = config.GetConfig()
|
||||
if err != nil {
|
||||
return nil, nil, nil, nil, err
|
||||
return nil, err
|
||||
}
|
||||
return cg.restConfig, nil
|
||||
}
|
||||
|
||||
return crdClient, kubeClient, apiExtClient, metricsClient, nil
|
||||
func (cg *ClientGenerator) GetFissionClient() (versioned.Interface, error) {
|
||||
config, err := cg.getRestConfig()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return versioned.NewForConfig(config)
|
||||
}
|
||||
|
||||
func (cg *ClientGenerator) GetKubernetesClient() (kubernetes.Interface, error) {
|
||||
config, err := cg.getRestConfig()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return kubernetes.NewForConfig(config)
|
||||
}
|
||||
|
||||
func (cg *ClientGenerator) GetApiExtensionsClient() (apiextensionsclient.Interface, error) {
|
||||
config, err := cg.getRestConfig()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return apiextensionsclient.NewForConfig(config)
|
||||
}
|
||||
|
||||
func (cg *ClientGenerator) GetMetricsClient() (metricsclient.Interface, error) {
|
||||
config, err := cg.getRestConfig()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return metricsclient.NewForConfig(config)
|
||||
}
|
||||
|
||||
func (cg *ClientGenerator) GetDynamicClient() (dynamic.Interface, error) {
|
||||
config, err := cg.getRestConfig()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dynamic.NewForConfig(config)
|
||||
}
|
||||
|
||||
func NewClientGenerator() *ClientGenerator {
|
||||
return &ClientGenerator{}
|
||||
}
|
||||
|
||||
func NewClientGeneratorWithRestConfig(restConfig *rest.Config) *ClientGenerator {
|
||||
return &ClientGenerator{restConfig: restConfig}
|
||||
}
|
||||
|
||||
// WaitForCRDs does a timeout to check if CRDs have been installed
|
||||
@@ -111,29 +122,3 @@ func WaitForCRDs(ctx context.Context, logger *zap.Logger, fissionClient versione
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetDynamicClient creates and returns new dynamic client or returns an error
|
||||
func GetDynamicClient() (dynamic.Interface, error) {
|
||||
var config *rest.Config
|
||||
var err error
|
||||
|
||||
// get the config, either from kubeconfig or using our
|
||||
// in-cluster service account
|
||||
kubeConfig := os.Getenv("KUBECONFIG")
|
||||
if len(kubeConfig) != 0 {
|
||||
config, err = clientcmd.BuildConfigFromFlags("", kubeConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
config, err = rest.InClusterConfig()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
dynamicClient, err := dynamic.NewForConfig(config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return dynamicClient, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user