访问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 ...
随机推荐
- centos7 kubeadm 搭建k8s
Centos 7 搭建 kubernetes 集群环境 一.介绍 本次是centos7 搭建kubernetes1.15.9 通过kubeadm 的形式搭建 二.准备 > centos 7 (镜 ...
- SQL Server 命令备忘录(持续更新...)
1.删除表内容并重置ID truncate table 表名 2.开启SqlDependency监控数据库 在数据中执行以下查询: SELECT is_broker_enabled FROM sys. ...
- fastjson将json转为Map<String,String>踩坑
字符串 对于一个json字符串 String str = "{"specItem":"[红, 大]","specName":&qu ...
- Win10下部署VS+Qt+OpenCV+darknet(YOLO)集成环境
VS+Qt集成环境 下载VS与Qt并安装. VS:官网链接 Qt:下载链接 将Qt的bin目录加入PATH路径 bin目录举例:D:\development\Qt\5.12.0\msvc2017_64 ...
- vue+element实现省区市三级联动以及详细地址的输入
Vue+elementui实现省区市三级联动+详细地址的输入 详细需求,需要手动更改用户所在的地址. 安装依赖项 npm install element-china-area-data -S 在组建中 ...
- android 使用SQLite的基本操作
Android操作数据库SQLite使用sql语句基本操作 1:自定义自己的SQLiteOpenHelper public class DBHelper extends SQLiteOpenHelpe ...
- Android12系统源码分析:NativeTombstoneManager
Android12系统源码分析:NativeTombstoneManager 概述 android12新增的system_server进程(LocalService)本地服务,用于管理native t ...
- keepalived-master-slave
Master配置 global_defs { notification_email { root@localhost } notification_email_from keeplived@local ...
- 解析csv数据绘制曲线图
一个解析csv数据的小工具,所做项目中要查看脉冲图谱,经理就让我这个刚入职的小萌新写了个小程序.同事将csv格式的脉冲数据发给我,我的想法就是,将这些csv里的数据作为纵轴,x++为横轴,绘制出折线图 ...
- keystore password was incorrect
一.问题由来 最近在部署后台系统项目的时候,希望给项目增加一些安全措施,在项目中添加了SSL证书,可是在自己添加完该证书后,测试启动项目立马报错. 报错信息如下: org.springframewor ...