首页 > 其他分享 >k8s client-go 01介绍

k8s client-go 01介绍

时间:2023-01-29 15:36:09浏览次数:73  
标签:01 kubernetes client 版本 go k8s 资源

关于client-go

  client-go是一个golang的client,我们可以通过client-go与K8S apiServer进行交互,对k8s集群中资源对象,包括内置资源(例如:Pod、Deployment、Service等)和CRD进行增删改查等操作。

  client-go地址: https://github.com/kubernetes/client-go

目录结构:

  • kubernetes: 该包包含了可以访问kubernetes集群的api,通过这些API可以与apiServer进行通信,对集群的资源对象进行增删改查。比如,我们可以通过kubectl来创建一个deployment,同样的,我们可以使用kubernetes中的clientset来创建一个Deployment。
  • discovery: 该包用于发现Kubernetes apiServer支持的API。
  • dynamic:该包包含一个动态客户端,可以对任意Kubernetes API对象执行通用操作。
  • plugin/pkg/client/auth:该包包含可选的身份验证插件,用于从外部源获取凭证。
  • transport:该包用于设置认证并启动连接。
  • informers:每种k8s资源的informer实现。
  • listers:为每一个k8s资源提供list功能,将数据缓存到本地,然后get和list时从本地获取,减轻apiServer的压力。
  • tools:提供常用工具,例如SharedInformer、Reflector、DeltaFifo已经Indexers等。提供client查询和缓存机制,主要子目录为cache。
  • util:提供常用方法。例如WorkQueue工作队列,Certificate证书管理等。

确定要用的client-go版本

  client-go官方提供了多个版本,并且给出了和kubernetes版本的匹配列表,如下所示:

   解释一下表格中的 、+ 、- 的含义:

  •  表示精确匹配,如下图红框,表示v0.20.0版本可以精确匹配1.20.0版本的kubernetes;
  • + 表示有的新特性是client-go支持的,但是此kubernetes版本却不支持;
  • - 表示有的新特性是kubernetes支持的,但是此client-go版本却不支持;

client-go中的client

  client-go中提供了四种与k8s apiServer交互的客户端,分别是 Rest Client、ClientSet、 Discovery Client和Dynamic Client:

  • RestClient:最基础的client,底层是对标准库的net/http的封装,下面的client都是对rest client的封装。
  • ClientSet:基于Rest Client进行了封装,通过clientset可以更加方便地操作K8S地资源对象。
  • DiscoveryClient:发现客户端,负责发现apiServer支持地资源组、资源版本和资源信息,相当于使用kubectl api-resources
  • DynamicClient:动态客户端,用于发现kubernetes的API Server支持的Group、Version、Resources等信息;可以对任意的K8S资源对象进行操作,包括CRD.

 GVK和GVR

  • G(Group组):资源组,包含一组资源操作的集合,比如apps下面有deployment、demonset等。
  • V(Version版本):资源版本,用于区分不同API的稳定程度和兼容性,比如v1、v1alpha1等。
  • R(Resources资源):资源信息,用于区别不同的资源API,k8s中有很多资源,比如pod、deployment、ingress等。
  • K(Kind类别):资源对象的类型,每个资源对象都需要Kind来区分它自身代表的资源类型。

一般在调用接口时,我们只需要知道GVR即可,通过GVR操作对应的资源对象。

标签:01,kubernetes,client,版本,go,k8s,资源
From: https://www.cnblogs.com/wushaoyu/p/17072781.html

相关文章

  • Go学习笔记
    1.当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个......
  • ReplaceGoogleCDN扩展下载和安装
    ReplaceGoogleCDN扩展下载和安装文档说明:只记录关键地方;2023-01-29在线安装备注:扩展市场的代码版本远落后于源码仓库版本ChromeFirefoxEdge手动安装:Chrome......
  • golang调用钉钉webhook发送消息
    golang使用dingtalk的webhook地址,发送消息通知此处用于记录golang调用dingtalkwebhook地址发送消息通知;一、使用http包自己拼接消息体,使用http包的post请求来......
  • golang使用sqlx操作MySQL
     packagemain//sqlx示例import("errors""fmt"_"github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx")varDB*sqlx.DBtypeUs......
  • golang连接操作mysql
    golang操作mysqlpackagemainimport("database/sql""fmt""time"_"github.com/go-sql-driver/mysql")//定义一个全局db对象vardb*sql.DB......
  • k8s v1.24.1 配置 cephfs
    本地环境情况角色IP版本k8s-master-1172.16.16.108K8Sv1.24.1,containerd://1.6.8k8s-node-1172.16.16.109K8Sv1.24.1,containerd://1.6.8k8s-no......
  • Django处理带T、带Z的时间格式
    问题:   USE_TZ=False后,django orm 查询时间报错:MySQLbackenddoesnotsupporttimezone-awaredatetimeswhenUSE_TZisFalse.解决: 查询时间前,做替换imp......
  • Good Bye 2022 简要题解
    从这里开始比赛目录过气选手留下了只会套路的眼泪。sad......ProblemA KoxiaandWhiteboards相信大家都会.jpgCode#include<bits/stdc++.h>using......
  • 代码随想录算法训练营day14 | leetcode 层序遍历 226.翻转二叉树 101.对称二叉树 2
    层序遍历/***二叉树的层序遍历*/classQueueTraverse{/***存放一层一层的数据*/publicList<List<Integer>>resList=newArrayList<>()......
  • Prometheus监控K8S各项指标
    一、Node监控1、内存指标#Node总内存大小:node_memory_MemTotal_bytes{instance="ec2-13-213-40-179.ap-southeast-1.compute.amazonaws.com:9100",job="node"}#Node......