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

通过学习本节, 你能清晰认识到Client-go主要用在 Kubernetes的 Controller中,包括内置的Controller(如Kube-Controller-Manager)和CRD 控制器;该工具实现了对 Kubernetes集群中各类资源对象(包括 Deployment、Service、Pod、Namespace、Node等)的增删改查等操作。另外,通过代码分析,我们能够深入了解 Client-go中各个组件(Reflector、Informer、Indexer)。最后,我们将介绍利用Client-go工具实现的一个简单的 Controller,据此,你可以了解Controller的大致结构。


2.2.1    Client-go 介绍

Client-go是操作 Kubernetes集群资源的编程式交互客户端库,利用对KubernetesAPIServer服务的交互访问,实现对 Kubernetes 集群中各类资源对象(包括 Deployment、Service、Pod、Namespace,Node等)的增删改查等操作。

Client-go 不仅被Kubernetes 项目本身使用(例如,在Kubectl 内部),还在基于 Kubernetes的二次开发中被许多外部用户使用:控制器Operator,如 ETCD-Operator或 Prometheus-Operator;高级框架如 KubeLess和 OpenShift等,所以熟悉 Client-go对了解 Kubernetes及其周边项目尤为重要。

1. 结构介绍

 

Kubernetes官方 2016年 8月将Kubernetes 资源操作相关的核心源码抽取出来,独立组成一个新项目:Client-go。

以下介绍的 Client-go  版本为 v0.18.0,源码目录结构见代码清单 2-6。

$tree-L1

.

├──CHANGELOG.md

├──CONTRIBUTING.md

├──Godeps

├──INSTALL.md

├──LICENSE

├──OWNERS

├──README.md

├──SECURITY_CONTACTS

├──code-of-conduct.md

├── discovery# 包含 DiscoveryClient客户端,⽤于发现 KubernetesAPIServer⽀持的资源信息

├── dynamic# 包含 DynamicClient客户端,可以对任意 Kubernetes资源执⾏通⽤操作

├── examples# 包含 Client-go库的使⽤范例

├──go.mod

├──go.sum

├── informers# 包含各种 Kubernetes资源的 Informer实现

├── kubernetes# 包含 clientset客户端,可以访问所有 Kubernetes⾃身内置的资源

├──kubernetes_test

├── listers# 为各种 Kubernetes资源提供 Lister功能

├──metadata

├──pkg

├──plugin

├──rest

├──restmapper

├──scale

├──testing

├──third_party

├── tools# 与 util包⼀起提供常⽤⼯具,便于编写 Controller

├── transport# 提供与 KubernetesAPIServer的安全连接


└──util

上一篇:带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.1(四)


下一篇:中国SaaS应用大会,助力企业数字化转型新路径