使用client-go 进行k8s相关操作-dynamicclient(二)
来源:互联网 发布:数据可视化 陈为 pdf 编辑:程序博客网 时间:2024/09/21 09:24
client-go除了提供clientset的连接方式,还提供了dynamic client 和restful api的连接方式与apiserver交互
通过dynamic client可以访问所有资源(包括thirdpartresource所能提供的资源)
package mainimport ("encoding/json""flag""k8s.io/client-go/1.5/dynamic""k8s.io/client-go/1.5/pkg/api/unversioned""k8s.io/client-go/1.5/pkg/api/v1""k8s.io/client-go/1.5/pkg/runtime""k8s.io/client-go/1.5/pkg/watch""k8s.io/client-go/1.5/rest""k8s.io/client-go/1.5/tools/clientcmd""log""reflect")var (kubeconfig = flag.String("kubeconfig", "./config", "absolute path to the kubeconfig file"))func main() {log.SetFlags(log.Llongfile)flag.Parse()//获取Configconfig, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)if err != nil {log.Println(err)}//指定gvgv := &unversioned.GroupVersion{"", "v1"}//指定resourceresource := &unversioned.APIResource{Name: "pods", Namespaced: true}//指定GroupVersionconfig.ContentConfig = rest.ContentConfig{GroupVersion: gv}//默认的是/api 需要手动指定config.APIPath = "/api"//创建新的dynamic clientcl, err := dynamic.NewClient(config)if err != nil {log.Println(err)}//根据APIResource获取obj, err := cl.Resource(resource, "default").Get("golang")if err != nil {log.Println(err)}pod := v1.Pod{}b, err := json.Marshal(obj.Object)if err != nil {log.Println(err)}json.Unmarshal(b, &pod)log.Println(pod.Name)//创建podconf := make(map[string]interface{})conf = map[string]interface{}{"apiVersion": "v1","kind": "Pod","metadata": map[string]interface{}{"name": "golang1",},"spec": map[string]interface{}{"containers": []map[string]interface{}{map[string]interface{}{"image": "golang","command": []string{"sleep","3600",},"name": "golang1",},},},}podobj := runtime.Unstructured{Object: conf}_, err = cl.Resource(resource, "default").Create(&podobj)if err != nil {log.Println(err)}// 删除一个pod,删除资源前最好获取UUIDcl.Resource(resource, "default").Delete("golang1", &v1.DeleteOptions{})// 获取列表got, err := cl.Resource(resource, "default").List(&v1.ListOptions{})if err != nil {log.Println(err)}js, err := json.Marshal(reflect.ValueOf(got).Elem().Interface())if err != nil {log.Println(err)}podlist := v1.PodList{}err = json.Unmarshal(js, &podlist)if err != nil {log.Println(err)}log.Println(podlist.Items[0].Name)// 获取thirdpart resourcegvthird := &unversioned.GroupVersion{"test.io", "v1"}thirdpartresource := &unversioned.APIResource{Name: "podtoservices", Namespaced: true}config.ContentConfig = rest.ContentConfig{GroupVersion: gvthird}config.APIPath = "/apis"clthird, err := dynamic.NewClient(config)if err != nil {log.Println(err)}objthird, err := clthird.Resource(thirdpartresource, "default").Get("redis-slave-360xf")if err != nil {log.Println(err)}log.Println(objthird)//watch一个resourcewatcher, err := clthird.Resource(thirdpartresource, "").Watch(&unversioned.TypeMeta{})if err != nil {log.Println(err)}c := watcher.ResultChan()for {select {case e := <-c:getptrstring(e)}}}func getptrstring(e watch.Event) {v := reflect.ValueOf(e.Object)log.Printf("Type: %s --- Obj: %s", e.Type, v.Elem().Interface())}
0 0
- 使用client-go 进行k8s相关操作-dynamicclient(二)
- 使用client-go 进行k8s相关操作-clientset(一)
- 使用client-go 进行k8s相关操作-restclient(三)
- kubernetes client-go包使用示例
- client-go的使用及源码分析
- 使用Realm进行数据操作(二)
- k8s相关命令
- 使用Blast2GO进行GO注释
- K8s kubectl get操作
- 如何使用ANT自动进行数据库的相关操作
- 如何使用ANT自动进行数据库的相关操作
- 如何使用ANT自动进行数据库的相关操作
- 如何使用ANT自动进行数据库的相关操作
- 使用FILE文件指针进行文件的操作相关函数
- 使用gdb调试go<二>
- Git相关操作二
- [k8s]gosu使用
- 使用Rancher 安装K8S
- 机器学习评估
- 23岁心语
- Swift-代理方法的使用
- 使用Jekyll搭建自有博客
- 深入理解RunLoop
- 使用client-go 进行k8s相关操作-dynamicclient(二)
- ELF文件解析
- Leetcode: 309. Best Time to Buy and Sell Stock with Cooldown 有冷却机制的最优炒股问题
- 游戏引擎C++反射和序列化方案心得
- C语言指针类型重要性
- AS gradle 编译引起的bug
- 全文搜索之 Elasticsearch
- 2017.01.12 学习日记-中介者模式
- Revit2017 Add-In Manager 安装