diff --git a/handler/common/client.go b/handler/common/client.go new file mode 100644 index 0000000..9b19d2f --- /dev/null +++ b/handler/common/client.go @@ -0,0 +1,43 @@ +package common + +import ( + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/clientcmd" +) + +// 存储已初始化好的 clientSet 变量 +var clientSet *kubernetes.Clientset + +// GetClientSet 单例的获取ClientSet的方法 +// if clientSet == nil +// true: 未初始化,初始化,将其存储到clientSet变量中,返回 +// false: 已初始化,直接返回 +func GetClientSet() (*kubernetes.Clientset, error) { + // 1. clientSet 是否已经初始化 + // 已初始化 + if clientSet != nil { + return clientSet, nil + } + // 未初始化,需要初始化 + + // 2. 配置 kubeconfig, 得到client(ClientSet)对象 + // 配置文件位置 + kubeConfigPath := ".kube/config" + // 构建配置,读取配置文件内容,解析为配置对象 + config, err := clientcmd.BuildConfigFromFlags("", kubeConfigPath) + if err != nil { + return nil, err + } + + // 3. 使用配置,得到ClientSet对象 + cs, err := kubernetes.NewForConfig(config) + if err != nil { + return nil, err + } + + // 4. 存储初始化好的ClientSet对象 + clientSet = cs + + // clientSet 初始化成功 + return clientSet, nil +} diff --git a/handler/node/handler.go b/handler/node/handler.go index ea94d19..021039b 100644 --- a/handler/node/handler.go +++ b/handler/node/handler.go @@ -2,35 +2,19 @@ package node import ( "context" + "k8s-manager/handler/common" "log" "net/http" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" - - "k8s.io/client-go/tools/clientcmd" - "github.com/gin-gonic/gin" ) // List 获取NodeList func List(ctx *gin.Context) { - // 1. 配置 kubeconfig, 得到client(ClientSet)对象 - // 配置文件位置 - kubeConfigPath := ".kube/config" - // 构建配置,读取配置文件内容,解析为配置对象 - config, err := clientcmd.BuildConfigFromFlags("", kubeConfigPath) - if err != nil { - log.Println(err) - ctx.JSON(http.StatusOK, gin.H{ - "code": 1, - "message": err.Error(), - }) - return - } - // 使用配置i,得到ClientSet对象 - clientSet, err := kubernetes.NewForConfig(config) + // 1. 得到client(ClientSet)对象 + clientSet, err := common.GetClientSet() if err != nil { log.Println(err) ctx.JSON(http.StatusOK, gin.H{