使用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
原创粉丝点击