IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> kubernetes源码学习之client-go -> 正文阅读

[系统运维]kubernetes源码学习之client-go

overview

client-go 是kubernetes中广义的客户端基础库,在Kubernetes各个组件中或多或少都有使用其功能。

Kubernetes API对象

? 在 Kubernetes 集群中,Kubernetes 对象是我们持久化的实体,就是最终存入 etcd 中的数据,集群中通过这些实体来表示整个集群的状态。

API 版本

? 为了可扩展性,Kubernetes 在不同的 API 路径(比如/api/v1 或者 /apis/batch)下面支持了多个 API 版本,不同的 API 版本意味着不同级别的稳定性和支持:

  • Alpha level,例如 v1alpha1 默认情况下是被禁用的,可以随时删除对功能的支持,所以要慎用
  • Beta level,例如 v2beta1 默认情况下是启用的,表示代码已经经过了很好的测试,但是对象的语义可能会在随后的版本中以不兼容的方式更改
  • stable level,比如 v1 表示已经是稳定版本了,也会出现在后续的很多版本中。

API 路径

? 在 Kubernetes 集群中,一个 API 对象在 Etcd 里的完整资源路径,是由:Group Version Resource三个部分组成的。

  • Grouprbac.authorization.k8s.io
  • Versionv1
  • ResourcePod CRD

client-go 目录结构

client-go的每一个目录都是一个go package

  • kubernetes 这个go package 包含与Kubernetes API所通信的客户端集
  • discovery 这个go package 用于发现kube-apiserver所支持的api
  • dynamic 这个go package包含了一个动态客户端,该客户端能够对kube-apiserver任意的API进行操作。
  • transport 这个 go package提供了用于设置认证和启动链接的功能

client-go 安装

如何选择 client-go 的版本

? 对于不同的kubernetes版本使用标签 v0.x.y 来表示对应的客户端版本。具体对应参考client-go

? 例如使用的kubernetes版本为 v1.18.20 则使用对应的标签 v0.x.y 来替换符合当前版本的客户端库。例如:

go get k8s.io/client-go@v0.18.10

官网中给出了client-go的兼容性矩阵,可以很明了的看出如何选择适用于自己kubernetes版本的对应的client-go

  • ? 表示 该版本的 client-go 与对应的 kubernetes版本功能完全一致
  • + client-go 具有 kubernetes apiserver中不具备的功能。
  • - Kubernetes apiserver 具有client-go 无法使用的功。

一般情况下,除了对应的版本号完全一致外,其他都存在 功能的+-

client-go 客户端类型

  • RestClient:是最基础的客户端,其作用是将http client进行封装成rest api格式。位于rest目录
  • ClientSet:基于RestClient进行封装对 Resource 与 version 管理集合,
  • DiscoverySet:RestClient进行封装,可动态发现kube-apiserver所支持的GVR(Group Version Resource)。
  • DynamicClient:基于RestClient,包含动态的客户端,可以对Kubernetes所支持的 API对象进行操作,包括CRD。
  • fakeClient, client-go 实现的mock对象,主要用于单元测试。

以上client-go所提供的客户端,仅可使用kubeconfig进行连接。

客户端使用

DynamicClient客户端

  • 与 ClientSet 的区别是,可以对任意 Kubernetes 资源进行 RESTful 操作。同样提供管理的方法

  • 最大的不同,ClientSet 需要预先实现每种 Resource 和 Version 的操作,内部的数据都是结构化数据(已知数据结构);DynamicClient 内部实现了 Unstructured,用于处理非结构化的数据(无法提前预知的数据结构),这是其可以处理 CRD 自定义资源的关键。

dynamicClient 实现流程

  • 通过 NewForConfig 实例化 conf 为 DynamicInterface客户端

  • DynamicInterface客户端中,实现了一个Resource 方法即为实现了Interface接口

  • dynamicClient 实现了非结构化数据类型与rest client,可以通过其方法将Resource 由rest从apiserver中获得api对象,runtime.DeafultUnstructuredConverter.FromUnstructrued转为对应的类型。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9GWnnf3j-1638889570066)(…/…/images/client-go/image-20201209181332727.png)]


注意:GVR中资源类型 resource为复数。kind:Pod 即为 Pods


package main

import (
	"context"
	"flag"
	"fmt"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/runtime/schema"
	"k8s.io/client-go/dynamic"
	"k8s.io/client-go/rest"
	"k8s.io/client-go/tools/clientcmd"
)

func main(){
	var (
		k8sconfig = flag.String("k8sconfig", "./admin.conf", "kubernetes auth config") //使用kubeconfig配置文件进行集群权限认证
		config    *rest.Config
		err       error
	)

	config, err = clientcmd.BuildConfigFromFlags("", *k8sconfig)
	if err != nil {
		panic(err)
	}

	dyClientInterface,err := dynamic.NewForConfig(config)

	nsInterface := dyClientInterface.Resource(schema.GroupVersionResource{
		Group: "traefik.containo.us",
		Version:"v1alpha1",
		Resource: "ingressroutes",
	}).Namespace("default")

	list,err:= nsInterface.List(context.TODO(),metav1.ListOptions{})

	if err != nil {
		panic(err)
	}

	for _,v:=range list.Items {
		fmt.Println(v.GetName())
	}
}
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 14:12:36  更:2021-12-08 14:13:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:51:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码