写点什么

client-go 实战之五:DiscoveryClient

  • 2022 年 4 月 15 日
  • 本文字数:1467 字

    阅读完需:约 5 分钟

func main() {


var kubeconfig *string


// home 是家目录,如果能取得家目录的值,就可以用来做默认值


if home:=homedir.HomeDir(); home != "" {


// 如果输入了 kubeconfig 参数,该参数的值就是 kubeconfig 文件的绝对路径,


// 如果没有输入 kubeconfig 参数,就用默认路径~/.kube/config


kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")


} else {


// 如果取不到当前用户的家目录,就没办法设置 kubeconfig 的默认目录了,只能从入参中取


kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")


}


flag.Parse()


// 从本机加载 kubeconfig 配置文件,因此第一个参数为空字符串


config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)


// kubeconfig 加载失败就直接退出了


if err != nil {


panic(err.Error())


}


// 新建 discoveryClient 实例


discoveryClient, err := discovery.NewDiscoveryClientForConfig(config)


if err != nil {


panic(err.Error())


}


// 获取所有分组和资源数据


APIGroup, APIResourceLis 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 tSlice, err := discoveryClient.ServerGroupsAndResources()


if err != nil {


panic(err.Error())


}


// 先看 Group 信息


fmt.Printf("APIGroup :\n\n %v\n\n\n\n",APIGroup)


// APIResourceListSlice 是个切片,里面的每个元素代表一个 GroupVersion 及其资源


for _, singleAPIResourceList := range APIResourceListSlice {


// GroupVersion 是个字符串,例如"apps/v1"


groupVerionStr := singleAPIResourceList.GroupVersion


// ParseGroupVersion 方法将字符串转成数据结构


gv, err := schema.ParseGroupVersion(groupVerionStr)


if err != nil {


panic(err.Error())


}


fmt.Println("*****************************************************************")


fmt.Printf("GV string [%v]\nGV struct [%#v]\nresources :\n\n", groupVerionStr, gv)


// APIResources 字段是个切片,里面是当前 GroupVersion 下的所有资源


for _, singleAPIResource := range singleAPIResourceList.APIResources {


fmt.Printf("%v\n", singleAPIResource.Name)


}


}


}


  • 执行 go run main.go,截取部分执行结果如下,所有资源都被打印出来了:


...




GV string [discovery.k8s.io/v1beta1]


GV struct [schema.GroupVersion{Group:"discovery.k8s.io", Version:"v1beta1"}]


resources :


endpointslices




GV string [flowcontrol.apiserver.k8s.io/v1beta1]


GV struct [schema.GroupVersion{Group:"flowcontrol.apiserver.k8s.io", Version:"v1beta1"}]


resources :


flowschemas


flowschemas/status


prioritylevelconfigurations


prioritylevelconfigurations/status


  • 以上就是 DiscoveryClient 的基本用法,您是否觉得这样的实战太 easy 了,那咱们就来个延伸阅读,看看 Discove Java 开源项目【ali1024.coding.net/public/P7/Java/git】 ryClient 的周边场景;

[](()kubectl 中如何使用 DiscoveryClient

完结

Redis 基于内存,常用作于缓存的一种技术,并且 Redis 存储的方式是以 key-value 的形式。Redis 是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis 也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为 Java 开发者,Redis 是我们必须要掌握的。


Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis 源码日志笔记》将会是你的最佳选择。



用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
client-go实战之五:DiscoveryClient_Java_爱好编程进阶_InfoQ写作平台