欢送拜访我的 GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,波及 Java、Docker、Kubernetes、DevOPS 等;
系列文章链接
- client-go 实战之一:筹备工作
- client-go 实战之二:RESTClient
- client-go 实战之三:Clientset
- client-go 实战之四:dynamicClient
- 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 的弱小性能,为后续的 operator 学习打下扎实的根底;
重要前提
- 开始 client-go 实战之前要对以下知识点有所理解:
- kubernetes 基本原理和操作;
- kubernetes 的 Group、Version、Resource 等概念,举荐浏览《Kubernetes 的 Group、Version、Resource 学习小记》
本篇概览
作为整个系列的开篇,除了对 client-go 做介绍,还要为前面的实战做好如下筹备工作:
- 列出要用到的硬件;
- 列出要用到的软件及其版本;
-
同步 kubernetes 配置文件,使得开发环境能够近程拜访 kubernetes;
环境信息
- 如下图所示,本次实战一共用到两台电脑:
- Linux 电脑:操作系统是 <font color=”blue”>CentOS 7.9</font>,已装置 <font color=”blue”>1.20.0</font> 版本的 kubernetes
- MacBook Pro:操作系统是 <font color=”blue”>macOS Big Sur(11.1)</font>,编码工作在此电脑上进行
- MacBook Pro 上装置的 go 版本为 <font color=”blue”>1.15.7</font>
- 您能够依照集体习惯抉择 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 |
+- | +- | +- | +- | +- | +- |
这里解释一下表格中的 ✓
、+
、-
的含意:
✓
示意准确匹配,如下图红框,示意 <font color=”blue”>v0.20.0</font> 版本能够准确匹配 <font color=”red”>1.20.0</font> 版本的 kubernetes:
+
示意有的新个性是 client-go 反对的,然而此 kubernetes 版本却不反对;-
示意有的新个性是 kubernetes 反对的,然而此 client-go 版本却不反对;- 我这里 kubernetes 版本为 <font color=”blue”>1.20.0</font>,因而选用 client-go 的 <font color=”red”>0.20.0</font> 版本最合适;
复制 k8s 环境的配置文件
- 为了能让 MacBook Pro 电脑上的 go 利用顺利拜访 K8S,请将 K8S 环境下的 <font color=”blue”>~/.kube/config</font> 文件复制到 MacBook Pro 电脑的 <font color=”blue”>~/.kube/</font> 目录下;
客户端对象简述
- 本篇聚焦筹备工作,不做编码,这里提前介绍一下前面的实战内容:通过 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 吧!
你不孤独,欣宸原创一路相伴
- Java 系列
- Spring 系列
- Docker 系列
- kubernetes 系列
- 数据库 + 中间件系列
- DevOps 系列
欢送关注公众号:程序员欣宸
微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游 Java 世界 …
https://github.com/zq2599/blog_demos