You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Golang代码获取当前Kubernetes服务端版本

Kubernetes服务端版本获取实现方案

两种实现方式底层逻辑完全一致,都是直接调用apiserver的/version接口,仅单次HTTP请求,性能无差异,可根据项目已有依赖选择即可。

方案1:基于client-go实现(最通用)

如果项目直接依赖client-go,这是最直接的实现方式,kubectl底层也是调用该接口获取版本:

package main

import (
	"log"
	"path/filepath"

	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
	"k8s.io/client-go/util/homedir"
)

func main() {
	// 加载kubeconfig,集群内运行时可传空字符串自动读取ServiceAccount配置
	var kubeconfigPath string
	if home := homedir.HomeDir(); home != "" {
		kubeconfigPath = filepath.Join(home, ".kube", "config")
	}
	config, err := clientcmd.BuildConfigFromFlags("", kubeconfigPath)
	if err != nil {
		log.Fatalf("加载kubeconfig失败: %v", err)
	}

	// 初始化clientset
	clientset, err := kubernetes.NewForConfig(config)
	if err != nil {
		log.Fatalf("初始化clientset失败: %v", err)
	}

	// 直接调用DiscoveryClient接口获取版本
	serverVersion, err := clientset.Discovery().ServerVersion()
	if err != nil {
		log.Fatalf("获取服务端版本失败: %v", err)
	}

	// 可直接取对应字段使用,GitVersion和kubectl version输出的版本号完全一致
	log.Printf("K8s服务端版本:%s,大版本:%s,小版本:%s", 
		serverVersion.GitVersion, serverVersion.Major, serverVersion.Minor)
}

需要导入的依赖:k8s.io/client-go/kubernetes

方案2:基于controller-runtime实现

如果是Operator项目已经依赖了controller-runtime,不需要额外引入client-go的完整依赖,复用已加载的RestConfig即可实现:

package main

import (
	"log"

	"k8s.io/client-go/discovery"
	"sigs.k8s.io/controller-runtime/pkg/client/config"
)

func main() {
	// 复用controller-runtime的配置加载逻辑
	cfg, err := config.GetConfig()
	if err != nil {
		log.Fatalf("加载集群配置失败: %v", err)
	}

	// 直接用配置构造DiscoveryClient
	dClient, err := discovery.NewDiscoveryClientForConfig(cfg)
	if err != nil {
		log.Fatalf("初始化DiscoveryClient失败: %v", err)
	}

	serverVersion, err := dClient.ServerVersion()
	if err != nil {
		log.Fatalf("获取服务端版本失败: %v", err)
	}

	log.Printf("K8s服务端版本:%s", serverVersion.GitVersion)
}

内容的提问来源于stack exchange,提问作者jtee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:57:03