-
client-go实战之五:DiscoveryClient
关于client-go
- client-go是kubernetes官方提供的go语言的客户端库,go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作;
- 除了提供丰富的API用于操作kubernetes资源,client-go还为controller和operator提供了重要支持,如下图,client-go的informer机制可以将controller关注的资源变化及时带给此controller,使controller能够及时响应变化:
- GitHub仓库:https://github.com/kubernetes/client-go
关于《client-go实战》系列
《client-go实战》系列是欣宸推出的实战主题原创,旨在与大家一起动手体验client-go的相关技术,从简单的实践开始,逐步深入了解client-go的强大功能,为后续的operator学习打下扎实的基础;
重要前提
- 开始client-go实战之前要对以下知识点有所了解:
- kubernetes基本原理和操作;
- kubernetes的Group、Version、Resource等概念,推荐阅读《Kubernetes的Group、Version、Resource学习小记》
本篇概览
作为整个系列的开篇,除了对client-go做介绍,还要为后面的实战做好如下准备工作:
- 列出要用到的硬件;
- 列出要用到的软件及其版本;
- 同步kubernetes配置文件,使得开发环境可以远程访问kubernetes;
环境信息
- 如下图所示,本次实战一共用到两台电脑:
- Linux电脑:操作系统是CentOS 7.9,已安装1.20.0版本的kubernetes
- MacBook Pro:操作系统是macOS Big Sur(11.1),编码工作在此电脑上进行
- MacBook Pro上安装的go版本为1.15.7
- 您可以按照个人习惯选择IDE,我这里用的是GoLand-2020.2版本
确定要用的client-go版本
client-go官方提供了多个版本,并且给出了和kubernetes版本的匹配列表,如下所示:
Kubernetes 1.15 | Kubernetes 1.16 | Kubernetes 1.17 | Kubernetes 1.18 | Kubernetes 1.19 | Kubernetes 1.20 | |
---|---|---|---|---|---|---|
kubernetes-1.15.0 |
✓ | +- | +- | +- | +- | +- |
kubernetes-1.16.0 |
+- | ✓ | +- | +- | +- | +- |
kubernetes-1.17.0 /v0.17.0 |
+- | +- | ✓ | +- | +- | +- |
kubernetes-1.18.0 /v0.18.0 |
+- | +- | +- | ✓ | +- | +- |
kubernetes-1.19.0 /v0.19.0 |
+- | +- | +- | +- | ✓ | +- |
kubernetes-1.20.0 /v0.20.0 |
+- | +- | +- | +- | +- | ✓ |
HEAD |
+- | +- | +- | +- | +- | +- |
这里解释一下表格中的✓
、+
、-
的含义:
-
✓
表示精确匹配,如下图红框,表示v0.20.0版本可以精确匹配1.20.0版本的kubernetes:
-
+
表示有的新特性是client-go支持的,但是此kubernetes版本却不支持; -
-
表示有的新特性是kubernetes支持的,但是此client-go版本却不支持;
- 我这里kubernetes版本为1.20.0,因此选用client-go的0.20.0版本最合适;
复制k8s环境的配置文件
- 为了能让MacBook Pro电脑上的go应用顺利访问K8S,请将K8S环境下的~/.kube/config文件复制到MacBook Pro电脑的~/.kube/目录下;
客户端对象简述
- 本篇聚焦准备工作,不做编码,这里提前介绍一下后面的实战内容:通过client-go提供的客户端对象与kubernetes的API Server进行交互,而client-go提供了以下四种客户端对象,后面的实战会逐个体验:
- RESTClient:这是最基础的客户端对象,仅对HTTPRequest进行了封装,实现RESTFul风格API,这个对象的使用并不方便,因为很多参数都要使用者来设置,于是client-go基于RESTClient又实现了三种新的客户端对象;
- ClientSet:把Resource和Version也封装成方法了,用起来更简单直接,一个资源是一个客户端,多个资源就对应了多个客户端,所以ClientSet就是多个客户端的集合了,这样就好理解了,不过ClientSet只能访问内置资源,访问不了自定义资源;
- DynamicClient:可以访问内置资源和自定义资源,个人感觉有点像java的集合操作,拿出的内容是Object类型,按实际情况自己去做强制转换,当然了也会有强转失败的风险;
- DiscoveryClient:用于发现kubernetes的API Server支持的Group、Version、Resources等信息;
- 至此,咱们的环境和知识准备工作就完成了,接下来一同去探索强大的client-go吧!
出处:https://www.cnblogs.com/bolingcavalry/p/15232143.html
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比