访问kubernetes CRD的几种方式
访问kubernetes CRD的几种方式
最近在使用代码操作VictoriaMetrics Operator的CRD资源的过程中,探究了集中访问CRD资源的方式。下面以VictoriaMetrics Operator的CRD为例介绍。
方式1:使用dynamic client
这种方式最原始,使用dynamic client获取到原始的json数据,可以使用json.Unmarshal 将数据解析到结构体重,也可以 runtime.DefaultUnstructuredConverter.FromUnstructured方法进行解析。
这种方式的好处是简单好理解,缺点就是需要在json层面操作数据,使用json作为实际数据结构和unstructured.Unstructured之间的转换媒介,性能上面可能会存在一定问题。
代码如下,更多参见这篇文章。
restConfig := &rest.Config{
Host: "https://xxxxx:6443",
BearerToken: "xxxx",
TLSClientConfig: rest.TLSClientConfig{Insecure: true},
}
dynClient, err := dynamic.NewForConfig(restConfig)
if err != nil {
return
}
var r = schema.GroupVersionResource{Group: "operator.victoriametrics.com", Version: "v1beta1", Resource: "vmrules"}
list, err := dynClient.Resource(r).Namespace("vm").List(context.TODO(), metav1.ListOptions{})
if err != nil {
return
}
rlist := v1beta1.VMRuleList{}
/* 可以直接使用json方式解析到结构体中
data, _ := list.MarshalJSON()
if err := json.Unmarshal(data, &rlist); err != nil {
return
}
*/
runtime.DefaultUnstructuredConverter.FromUnstructured(list.UnstructuredContent(), &rlist)
fmt.Println(rlist)
方式2:使用client-go
一般会采用这种方式。首先需要在restConfig中注册GroupVersion和scheme。可以使用kubectl get --raw /apis/operator.victoriametrics.com/v1beta1来验证该资源的APIPath是不"/apis"。scheme用于注册结构体信息,使用scheme生成的parameterCodec来解析数据。
代码如下:
var SchemeGroupVersion = schema.GroupVersion{Group: "operator.victoriametrics.com", Version: "v1beta1"}
restConfig := &rest.Config{
Host: "https://xxxx:6443",
BearerToken: "xxxx",
TLSClientConfig: rest.TLSClientConfig{Insecure: true},
}
restConfig.APIPath = "/apis"
restConfig.GroupVersion = &SchemeGroupVersion
restConfig.NegotiatedSerializer = scheme1.Codecs.WithoutConversion()
scheme := runtime.NewScheme()
victoriametricsv1beta1.AddToScheme(scheme)
parameterCodec := runtime.NewParameterCodec(scheme)
if restConfig.UserAgent == "" {
restConfig.UserAgent = rest.DefaultKubernetesUserAgent()
}
c,err := rest.RESTClientFor(restConfig)
if nil != err{
panic(err)
}
rl := &v1beta1.VMRuleList{}
err = c.Get().
Namespace("vm").
Resource("vmrules").
VersionedParams(&metav1.ListOptions{},scheme1.ParameterCodec).
Do(context.TODO()).
Into(rl)
fmt.Println(err,rl)
访问kubernetes CRD的几种方式的更多相关文章
- Android中访问sdcard路径的几种方式
以前的Android(4.1之前的版本)中,SDcard路径通过"/sdcard"或者"/mnt/sdcard"来表示,而在JellyBean(安卓4.1)系统 ...
- Struts2中访问web元素的四种方式
Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.Sess ...
- 不吹不黑,今天我们来聊一聊 Kubernetes 落地的三种方式
作者 | 王国梁 Kubernetes 社区成员与项目维护者原文标题<Kubernetes 应用之道:让 Kubernetes落地的"三板斧">,首发于知乎专栏:进击 ...
- Struts2访问Servlet API的三种方式
有时我们需要用到Request, Response, Session,Page, ServletContext这些我们以前常用的对象,那么在Struts2中怎么样使用到这些对象呢,通常有三种方式. * ...
- Struts2访问Servlet API的几种方式
struts2提供了三种方式访问servlet API:大致分为两类 1. ActionContext: public static ActionContext getContext() :获得当前 ...
- C语言访问MCU寄存器的两种方式
转自http://blog.csdn.net/liming0931/article/details/7752248 单片机的特殊功能寄存器SFR,是SRAM地址已经确定的SRAM单元,在C语言环境下对 ...
- 让外部网络访问K8S service的四种方式
本文基于kubernetes 1.5.2版本编写 kube-proxy+ClusterIP kubernetes版本大于或者等于1.2时,配置: 修改master的/etc/kubernetes/pr ...
- SpringMVC访问静态资源的三种方式(转)
本文转自:http://www.iigrowing.cn/springmvc_fang_wen_jing_tai_zi_yuan_de_san_zhong_fang_shi.html 如何你的Disp ...
- 转转转!SpringMVC访问静态资源的三种方式
如果你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...
随机推荐
- php-抽象工厂
目标:创建有依赖关系的实例;(套餐) <?php //抽象类 食物 interface IAllayFood { function Allay(); } interface IDrinkFood ...
- 『GoLang』fmt包的使用
目录 1. fmt 包初识 2. 格式化 verb 应用 2.1 通用 2.2 布尔值 2.3 整数 2.4 浮点数与复数 2.5 字符串和 []byte 2.6 指针 2.7 其他 flag 2.8 ...
- P3760-[TJOI2017]异或和【树状数组】
正题 题目链接:https://www.luogu.com.cn/problem/P3760 题目大意 给出\(n\)个数字的一个序列\(a\),求它所有区间和的异或和 \(n\leq 10^5,\s ...
- 现在有一个长度20的SET,其中每个对象的内容是随机生成的字符串,请写出遍历删除LIST里面字符串含"2"的对象的代码。
现在有一个长度20的SET,其中每个对象的内容是随机生成的字符串,请写出遍历删除LIST里面字符串含"2"的对象的代码. public class RemoveTwo { //le ...
- 洛谷3203 弹飞绵羊(LCT)
据说这个题当年的正解是分块qwq 根据题目所说,对于题目中的弹力系数,就相当于一条边,那么对于"跳出去"这个限制,我们可以选择建造一个新点\(n+1\)表示结束,那么每次,求一个点 ...
- Java(16)修饰符
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201619.html 博客主页:https://www.cnblogs.com/testero ...
- Apache Common-collection 反序列化利用链解析--TransformedMap链
Apache Common-collection 反序列化利用链解析 TransformedMap链 参考Java反序列化漏洞分析 - ssooking - 博客园 (cnblogs.com) poc ...
- 【Java虚拟机8】自定义类加载器、类加载器命名空间、类的卸载
前言 学习类加载器就一定要自己实现一个类加载器,今天就从一个简单的自定义类加载器说起. 自定义类加载器 例1 一个简单的类加载器,从一个给定的二进制名字读取一个字节码文件的内容,然后生成对应的clas ...
- Windows主机入侵排查
检查系统信息.用户账号信息 系统信息 ● 查看系统版本以及补丁信息 systeminfo 用户账号信息 ● 基本使用 ○ 创建普通账号并加入administrarors 组 net user test ...
- 51.N皇后问题
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. 每一种解法包含一个明确的 n 皇后问题的棋 ...