1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| package main
import ( "flag" "fmt" "k8s.io/api/core/v1" v12 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/client-go/dynamic" "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" )
var ( //集群配置文件路径 kubeconfigStr = flag.String("kubeconfig", "default value", "kubernetes config file") )
func main() { //解析参数 flag.Parse()
testClientSet()
fmt.Println("\nrest")
testRestClient()
fmt.Println("\n.....") testDynamicClient() }
func testRestClient() { config, err := clientcmd.BuildConfigFromFlags("", *kubeconfigStr) if err != nil { panic(err) }
//原生接口都在/api下,扩展接口在/apis下 config.APIPath = "/api" //pods资源相关的group为空 config.GroupVersion = &schema.GroupVersion{ Group: "", Version: "v1", } //序列化方式,目前json和protocal buf config.ContentType = runtime.ContentTypeJSON config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs}
restClient, err := rest.RESTClientFor(config) if err != nil { panic(err) }
podList := v1.PodList{} //除了Do()方法之外,还有DoRaw(),返回原始的bytes; Do()会做一下类型的转化 restClient.Get().Resource("pods").Namespace("").Do().Into(&podList)
fmt.Println(podList) }
func testClientSet() { config, err := clientcmd.BuildConfigFromFlags("", *kubeconfigStr) if err != nil { panic(err) }
clientset, err := kubernetes.NewForConfig(config) if err != nil { panic(err) }
//一行代码指定group、version、resource、以及动作 podList, err := clientset.CoreV1().Pods("").List(v12.ListOptions{})
fmt.Println(podList.Items) }
func testDynamicClient() { config, err := clientcmd.BuildConfigFromFlags("", *kubeconfigStr) if err != nil { panic(err) }
dynamicClient, err := dynamic.NewForConfig(config) if err != nil { panic(err) }
//指定group、version以及要访问的资源 testrcGVR := schema.GroupVersionResource{ Group: "", Version: "v1", Resource: "pods", }
unstr, err := dynamicClient.Resource(testrcGVR).List(v12.ListOptions{})
fmt.Println(unstr) }
|