带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理(三)-阿里云开发者社区

开发者社区> 人民邮电出版社> 正文

带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理(三)

简介: 带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理
+关注继续查看

2.2.2         Client-go主体结构

Client-go 共支持 4 种与 Kubernetes APIServer交互的客户端逻辑,如图 2-4所示。

(1)  RESTClient:最基础的客户端,它主要对 HTTP请求进行了封装,并且支持JSONProtobuf格式数据。

(2)  DiscoveryClient:发现客户端,发现APIServer   支持的资源组、资源版本和资源信息。如 Kubectl Api-Versions 。

(3) ClientSet:Kubernetes自身内置资源的客户端集合,仅能操作已知类型的内置资源,如Pods、Service 等。

image.png

                     图2—4   Cient交互图


 


(4)  DynamicClient:动态客户端,可以对任意的 Kubernetes 资源执行通用操作,包括 CRD。

1. RESTClient

 

RESTClient是所有客户端的父类,RESTClient提供的 RESTful方法(如 Get()、Put()、Post()、Delete() 等 )与KubernetesAPIServer进 行 交 互,ClientSet、DynamicClient和DiscoveryClient等也都是基于 RESTClient 二次开发实现的。因此,RESTClient可以操作Kubernetes自身内置的原生资源以及 CRD。


前面Example,目录中的out-of-cluster-client-configuration  示例,用RESTClient实现的代码见代码清单 2-10。

packagemain

 

import(

"context""fmt"

 

corev1"k8s.io/api/core/v1"

metav1"k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/client-go/kubernetes/scheme""k8s.io/client-go/rest"

"k8s.io/client-go/tools/clientcmd"

)

 

funcmain(){

//加载配置⽂件,⽣成 config对象

config,err:=clientcmd.BuildConfigFromFlags("","/root/.kube/config")

iferr!=nil{

panic(err.Error())

}

//配置 API路径和请求的资源组 /资源版本信息

config.APIPath="api"

config.GroupVersion=&corev1.SchemeGroupVersion

 

//配置数据的编解码器

config.NegotiatedSerializer=scheme.Codecs

//实例化RESTClient对象

restClient,err:=rest.RESTClientFor(config)

iferr!=nil{

panic(err.Error())

}

 

//预设返回值存放对象

result:=&corev1.PodList{}

 

//Get⽅法设置HTTP请求⽅法 ;Namespace⽅法设置操作的命名空间

//Resource⽅法设置操作的资源类型 ;VersionedParams⽅法设置请求的查询参数

//Do⽅法发起请求并⽤Into⽅法将APIServer返回的结果写⼊Result变量中

err=restClient.Get().

Namespace("default").Resource("pods").

VersionedParams(&metav1.ListOptions{Limit:100},scheme.ParameterCodec).Do(context.TODO()).

Into(result)

 

iferr!=nil{panic(err)

}

 

//打印Pod信息

for _,d:=rangeresult.Items{fmt.Printf(

"NAMESPACE:%v\tNAME:%v\tSTATUS:%v\n",

d.Namespace,d.Name,d.Status.Phase,

)

}

}

 

运行以上代码,会获得命名空间 Default下的所有 Pod 资源的相关信息,部分信息打印输出见代码清单 2-11。

运⾏输出

NAMESPACE:default          NAME:nginx-deployment-6b474476c4-lpld7

STATUS:Running

NAMESPACE:default          NAME:nginx-deployment-6b474476c4-t6xl4

STATUS:Running

RESTClient 实际上是对 KubernetesAPIServer的 RESTfulAPI 的访问进行了封装抽象,底层调用的是 Go语言 Net/Http库。

分析 RESTClient发起请求的过程如下。

(1)      Get方法返回Request类型对象(见代码清单2-12)。

//GetbeginsaGETrequest.Shortforc.Verb("GET").func(c*RESTClient)Get()*Request{

returnc.Verb("GET")

}

(2)      Request结构体对象用于构建访问 APIServer的请求, 示例中依次调用的Namespace、Resource、VersionedParams、Do等方法都是 Request结构体的方法,最终Do方法中r.request 发起请求,r.transformResponse将 APIServer 的返回值解析成corev1.PodList类型对象,即示例中的Result变量(见代码清单2-13)。

func(r*Request)Do(ctxcontext.Context)Result{varresultResult

err:=r.request(ctx,func(req*http.Request,resp*http.Response){result=r.transformResponse(resp,req)

})

//...

}

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云云服务使用感悟
1、如何了解到阿里云飞天加速计划·高校学生在家实践 2、ECS服务器使用心得感受 3、对阿里云平台的使用感受和自我计划
10 0
用手机写代码:基于 Serverless 的在线编程能力探索
Serverless 架构的按量付费模式,可以在保证在线编程功能性能的前提下,进一步降低成本。本文将会以阿里云函数计算为例,通过 Serverless 架构实现一个 Python 语言的在线编程功能,并对该功能进一步的优化,使其更加贴近本地本地代码执行体验。
4 0
Intellij IDEA 如何去掉 @Autowired 注入警告
在Service层注入Mybatis的Mapper我们通常会使用@Autowired 自动注入
5 0
使用Java 操作MinIO
今天我们使用JAVA来操作一下MinIO。
6 0
JDK集合源码之HashMap解析(下)
由于上篇文章JDK集合源码之HashMap解析(上)篇幅较长,为阅读方便,分成两篇博客来分析HashMap!
4 0
Chemical Science | 通过异构网络中的深度学习对已知药物进行靶标识别
Chemical Science | 通过异构网络中的深度学习对已知药物进行靶标识别
1 0
如何优雅的实现分布式锁
今天我们来说说第三种,使用 Spring Integration 实现,也是我个人比较推荐的一种。
3 0
使用Java 操作MinIO
今天我们使用JAVA来操作一下MinIO。
3 0
使用Docker安装ClickHouse
ClickHouse是一个由俄罗斯最大的搜索公司Yandex开源的列式数据库(DBMS),主要用于在线分析处理查询(OLAP),于2016年开源,采用C++开发。凭借优秀的性能,市场反应非常热烈。
8 0
使用Kubeadm搭建Kubernetes集群
今天我们先重点说一下kubelet组件,kubelet 主要负责同容器运行时(比如 Docker 项目)打交道。而这个交互所依赖的,是一个称作 CRI(Container Runtime Interface)的远程调用接口,这个接口定义了容器运行时的各项核心操作,比如:启动一个容器需要的所有参数。
1 0
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载