refactor(*): move getKubeClient to utils/kubernetes
This commit is contained in:
		
							parent
							
								
									bafcc0dfaf
								
							
						
					
					
						commit
						b9f636d2ef
					
				| 
						 | 
				
			
			@ -221,8 +221,12 @@ type AutoscalingOptions struct {
 | 
			
		|||
	AWSUseStaticInstanceList bool
 | 
			
		||||
	// GCEOptions contain autoscaling options specific to GCE cloud provider.
 | 
			
		||||
	GCEOptions GCEOptions
 | 
			
		||||
	// Kubernetes master location.
 | 
			
		||||
	Kubernetes string
 | 
			
		||||
	// Path to kube configuration if available
 | 
			
		||||
	KubeConfigPath string
 | 
			
		||||
	// Content type of requests sent to APIServer.
 | 
			
		||||
	KubeAPIContentType string
 | 
			
		||||
	// Burst setting for kubernetes client
 | 
			
		||||
	KubeClientBurst int
 | 
			
		||||
	// QPS setting for kubernetes client
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,6 @@ import (
 | 
			
		|||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/signal"
 | 
			
		||||
	"strconv"
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +62,6 @@ import (
 | 
			
		|||
	"k8s.io/client-go/informers"
 | 
			
		||||
	kube_client "k8s.io/client-go/kubernetes"
 | 
			
		||||
	"k8s.io/client-go/rest"
 | 
			
		||||
	"k8s.io/client-go/tools/clientcmd"
 | 
			
		||||
	"k8s.io/client-go/tools/leaderelection"
 | 
			
		||||
	"k8s.io/client-go/tools/leaderelection/resourcelock"
 | 
			
		||||
	kube_flag "k8s.io/component-base/cli/flag"
 | 
			
		||||
| 
						 | 
				
			
			@ -353,7 +351,9 @@ func createAutoscalingOptions() config.AutoscalingOptions {
 | 
			
		|||
		StatusTaints:                     *statusTaintsFlag,
 | 
			
		||||
		BalancingExtraIgnoredLabels:      *balancingIgnoreLabelsFlag,
 | 
			
		||||
		BalancingLabels:                  *balancingLabelsFlag,
 | 
			
		||||
		Kubernetes:                       *kubernetes,
 | 
			
		||||
		KubeConfigPath:                   *kubeConfigFile,
 | 
			
		||||
		KubeAPIContentType:               *kubeAPIContentType,
 | 
			
		||||
		KubeClientBurst:                  *kubeClientBurst,
 | 
			
		||||
		KubeClientQPS:                    *kubeClientQPS,
 | 
			
		||||
		NodeDeletionDelayTimeout:         *nodeDeletionDelayTimeout,
 | 
			
		||||
| 
						 | 
				
			
			@ -393,31 +393,6 @@ func createAutoscalingOptions() config.AutoscalingOptions {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func getKubeConfig() *rest.Config {
 | 
			
		||||
	if *kubeConfigFile != "" {
 | 
			
		||||
		klog.V(1).Infof("Using kubeconfig file: %s", *kubeConfigFile)
 | 
			
		||||
		// use the current context in kubeconfig
 | 
			
		||||
		config, err := clientcmd.BuildConfigFromFlags("", *kubeConfigFile)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			klog.Fatalf("Failed to build config: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
		return config
 | 
			
		||||
	}
 | 
			
		||||
	url, err := url.Parse(*kubernetes)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.Fatalf("Failed to parse Kubernetes url: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	kubeConfig, err := config.GetKubeClientConfig(url)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		klog.Fatalf("Failed to build Kubernetes client configuration: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	kubeConfig.ContentType = *kubeAPIContentType
 | 
			
		||||
 | 
			
		||||
	return kubeConfig
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func createKubeClient(kubeConfig *rest.Config) kube_client.Interface {
 | 
			
		||||
	return kube_client.NewForConfigOrDie(kubeConfig)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -441,7 +416,7 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter
 | 
			
		|||
	// Create basic config from flags.
 | 
			
		||||
	autoscalingOptions := createAutoscalingOptions()
 | 
			
		||||
 | 
			
		||||
	kubeClientConfig := getKubeConfig()
 | 
			
		||||
	kubeClientConfig := kube_util.GetKubeConfig(autoscalingOptions)
 | 
			
		||||
	kubeClientConfig.Burst = autoscalingOptions.KubeClientBurst
 | 
			
		||||
	kubeClientConfig.QPS = float32(autoscalingOptions.KubeClientQPS)
 | 
			
		||||
	kubeClient := createKubeClient(kubeClientConfig)
 | 
			
		||||
| 
						 | 
				
			
			@ -455,7 +430,7 @@ func buildAutoscaler(debuggingSnapshotter debuggingsnapshot.DebuggingSnapshotter
 | 
			
		|||
	}
 | 
			
		||||
	informerFactory := informers.NewSharedInformerFactoryWithOptions(kubeClient, 0, informers.WithTransform(trim))
 | 
			
		||||
 | 
			
		||||
	eventsKubeClient := createKubeClient(getKubeConfig())
 | 
			
		||||
	eventsKubeClient := createKubeClient(kube_util.GetKubeConfig(autoscalingOptions))
 | 
			
		||||
 | 
			
		||||
	predicateChecker, err := predicatechecker.NewSchedulerBasedPredicateChecker(informerFactory, autoscalingOptions.SchedulerConfig)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
| 
						 | 
				
			
			@ -624,7 +599,7 @@ func main() {
 | 
			
		|||
			klog.Fatalf("Unable to get hostname: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		kubeClient := createKubeClient(getKubeConfig())
 | 
			
		||||
		kubeClient := createKubeClient(kube_util.GetKubeConfig(createAutoscalingOptions()))
 | 
			
		||||
 | 
			
		||||
		// Validate that the client is ok.
 | 
			
		||||
		_, err = kubeClient.CoreV1().Nodes().List(ctx.TODO(), metav1.ListOptions{})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2023 The Kubernetes Authors.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
package kubernetes
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net/url"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/autoscaler/cluster-autoscaler/config"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/client-go/rest"
 | 
			
		||||
	"k8s.io/client-go/tools/clientcmd"
 | 
			
		||||
	"k8s.io/klog/v2"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// GetKubeConfig returns the rest config from AutoscalingOptions.
 | 
			
		||||
func GetKubeConfig(opts config.AutoscalingOptions) *rest.Config {
 | 
			
		||||
	var kubeConfig *rest.Config
 | 
			
		||||
	var err error
 | 
			
		||||
 | 
			
		||||
	if opts.KubeConfigPath != "" {
 | 
			
		||||
		klog.V(1).Infof("Using kubeconfig file: %s", opts.KubeConfigPath)
 | 
			
		||||
		// use the current context in kubeconfig
 | 
			
		||||
		kubeConfig, err = clientcmd.BuildConfigFromFlags("", opts.KubeConfigPath)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			klog.Fatalf("Failed to build config: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		url, err := url.Parse(opts.Kubernetes)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			klog.Fatalf("Failed to parse Kubernetes url: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		kubeConfig, err = config.GetKubeClientConfig(url)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			klog.Fatalf("Failed to build Kubernetes client configuration: %v", err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	kubeConfig.ContentType = opts.KubeAPIContentType
 | 
			
		||||
 | 
			
		||||
	return kubeConfig
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue