版本:

golang: v1.15.0

kubectl-client: v1.17.14,kubectl-server: v1.19.14

一、client-go 介绍

client-go是一个调用kubernetes集群资源对象API的客户端,即通过client-go实现对kubernetes集群中资源对象(包括deployment、service、ingress、replicaSet、pod、namespace、node等)的增删改查等操作。大部分对kubernetes进行前置API封装的二次开发都通过client-go这个第三方包来实现。Kubernetes官方从2016年8月份开始,将Kubernetes资源操作相关的核心源码抽取出来,独立出来一个项目Client-go,作为官方提供的Go client。client-go支持RESTClient、ClientSet、DynamicClient、DiscoveryClient四种客户端与Kubernetes Api Server进行交互。

client-go官方文档:https://github.com/kubernetes/client-go

client-go的客户端对象有4个,作用各有不同:

  • RESTClient:是对HTTP Request进行了封装,实现了RESTful风格的API。其他客户端都是在RESTClient基础上的实现。可与用于k8s内置资源和CRD资源
  • ClientSet:是对k8s内置资源对象的客户端的集合,默认情况下,不能操作CRD资源,但是通过client-gen代码生成的话,也是可以操作CRD资源的。
  • DynamicClient:不仅能对K8S内置资源进行处理,还可以对CRD资源进行处理,不需要client-gen生成代码即可实现。
  • DiscoveryClient:用于发现kube-apiserver所支持的资源组、资源版本、资源信息(即Group、Version、Resources)。

client-go 四种客户端类型介绍,可参考:https://blog.csdn.net/u013276277/article/details/107920775

二、ClientSet 客户端

ClientSet 客户端默认是对 k8s 内置资源对象客户端的集合,通过 ClientSet 客户端可以操作 k8s 的内置资源对象。

现在我想通过代码初始化 k8s 客户端,来查询过滤 k8s 节点列表。