欢送拜访我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等;

系列文章链接

  1. client-go实战之一:筹备工作
  2. client-go实战之二:RESTClient
  3. client-go实战之三:Clientset
  4. client-go实战之四:dynamicClient
  5. 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做介绍,还要为前面的实战做好如下筹备工作:

  1. 列出要用到的硬件;
  2. 列出要用到的软件及其版本;
  3. 同步kubernetes配置文件,使得开发环境能够近程拜访kubernetes;

    环境信息

  4. 如下图所示,本次实战一共用到两台电脑:

  1. Linux电脑:操作系统是<font color="blue">CentOS 7.9</font>,已装置<font color="blue">1.20.0</font>版本的kubernetes
  2. MacBook Pro:操作系统是<font color="blue">macOS Big Sur(11.1)</font>,编码工作在此电脑上进行
  3. MacBook Pro上装置的go版本为<font color="blue">1.15.7</font>
  4. 您能够依照集体习惯抉择IDE,我这里用的是GoLand-2020.2版本

确定要用的client-go版本

client-go官网提供了多个版本,并且给出了和kubernetes版本的匹配列表,如下所示:

Kubernetes 1.15Kubernetes 1.16Kubernetes 1.17Kubernetes 1.18Kubernetes 1.19Kubernetes 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吧!

你不孤独,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

欢送关注公众号:程序员欣宸

微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游Java世界...
https://github.com/zq2599/blog_demos