client-go实战之五:DiscoveryClient

  • 挑一个DiscoveryClient的关联方法看看,如下图红框,果然,LegacyPrefix就是url中的一部分:

在这里插入图片描述

  • 相比其他几个客户端,DiscoveryClient要更简单一些,干脆直接实战吧!

需求确认

  • 本次实战的需求很简单:从kubernetes查询所有的Group、Version、Resource信息,在控制台打印出来;

源码下载

  • 本篇实战中的源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos):

| 名称 | 链接 | 备注 |

| :-- | :-- | :-- |

| 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |

| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |

| git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |

  • 这个git项目中有多个文件夹,client-go相关的应用在client-go-tutorials文件夹下,如下图红框所示:

在这里插入图片描述

  • client-go-tutorials文件夹下有多个子文件夹,本篇对应的源码在discoveryclientdemo目录下,如下图红框所示:

在这里插入图片描述

编码

  • 新建文件夹discoveryclientdemo,在里面执行以下命令,新建module:

go mod init discoveryclientdemo

  • 添加k8s.io/api和k8s.io/client-go这两个依赖,注意版本要匹配kubernetes环境:

go get k8s.io/api@v0.20.0

go get k8s.io/client-go@v0.20.0

  • 新建main.go,内容如下,内部已有详细注释,要重点关注的是ServerGroupsAndResources方法的第二个返回值,它的数据结构中有切片,切片的每个元素里面又有切片,这才是每个资源的信息:

package main

import (

“flag”

“fmt”

“k8s.io/apimachinery/pkg/runtime/schema”

“k8s.io/client-go/discovery”

“k8s.io/client-go/tools/clientcmd”

“k8s.io/client-go/util/homedir”

“path/filepath”

)

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, APIResourceListSlice, 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())

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

img

最后

由于篇幅原因,就不多做展示了
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
]

[外链图片转存中…(img-OLYZzba3-1711588684822)]

[外链图片转存中…(img-EaZyaqq9-1711588684822)]

[外链图片转存中…(img-wtW0llDP-1711588684822)]

由于篇幅原因,就不多做展示了
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值