0
点赞
收藏
分享

微信扫一扫

k8s源码学习-client-go

Kubernetes系统使用client-go作为Go语言的官方编程式交互客户端库,提供对Kubernetes API Server服务的交互访问。Kubernetes的源码中已经集成了client-go的源码,无须单独下载。client-go源码路径为vendor/k8s.io/client-go,client-go项目github地址:​​https://github.com/kubernetes/client-go​​

client-go源码结构

➜  kubernetes git:(huaihe) ✗ tree vendor/k8s.io/client-go -L 1
vendor/k8s.io/client-go
├── LICENSE
├── applyconfigurations
├── discovery
├── dynamic
├── informers
├── kubernetes
├── listers
├── metadata
├── pkg
├── plugin
├── rest
├── restmapper
├── scale
├── testing
├── third_party
├── tools
├── transport
└── util

k8s源码学习-client-go_client-go

Client客户端对象

client-go支持4种Client客户端对象与Kubernetes API Server交互的方式,交互对象如图:

k8s源码学习-client-go_client-go_02

RESTClient是最基础的客户端。RESTClient对HTTP Request进行了封装,实现了RESTful风格的API。ClientSet、DynamicClient及DiscoveryClient客户端都是基于RESTClient实现的。

ClientSet在RESTClient的基础上封装了对Resource和Version的管理方法。每一个Resource可以理解为一个客户端,而ClientSet则是多个客户端的集合,每一个Resource和Version都以函数的方式暴露给开发者。ClientSet只能够处理Kubernetes内置资源,它是通过client-gen代码生成器自动生成的。

DynamicClient与ClientSet最大的不同之处是,ClientSet仅能访问Kubernetes自带的资源(即Client集合内的资源),不能直接访问CRD自定义资源。DynamicClient能够处理Kubernetes中的所有资源对象,包括Kubernetes内置资源与CRD自定义资源。

DiscoveryClient发现客户端,用于发现kube-apiserver所支持的资源组、资源版本、资源信息(即Group、Versions、Resources)。

以上4种客户端:RESTClient、ClientSet、DynamicClient、DiscoveryClient都可以通过kubeconfig配置信息连接到指定的Kubernetes API Server

kubeconfig配置管理

kubeconfig用于管理访问kube-apiserver的配置信息,同时也支持访问多kube-apiserver的配置管理,可以在不同的环境下管理不同的kube-apiserver集群配置,不同的业务线也可以拥有不同的集群。Kubernetes的其他组件都使用kubeconfig配置信息来连接kube-apiserver组件,例如当kubectl访问kube-apiserver时,会默认加载kubeconfig配置信息。

kubeconfig中存储了集群、用户、命名空间和身份验证等信息,在默认的情况下,kubeconfig存放在$HOME/.kube/config路径下。Kubeconfig配置信息如下:

举报

相关推荐

0 条评论