kubernetes 开发入门之获取pod信息

来源:互联网 发布:广发手机证券交易软件 编辑:程序博客网 时间:2024/06/01 07:28

之前写了很多kubernetes源码阅读的文章,今天介绍一下kubernetes开发入门,kubernetes提供了一个client-go,它里面封装了kubernetes的相关操作,分为两种情况,在集群内核集群之外
先说一下集群内

package mainimport (    "fmt"    "time"    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"    "k8s.io/client-go/kubernetes"    "k8s.io/client-go/rest")func main() {    // creates the in-cluster config    config, err := rest.InClusterConfig()    if err != nil {        panic(err.Error())    }    // creates the clientset    clientset, err := kubernetes.NewForConfig(config)    if err != nil {        panic(err.Error())    }    for {        pods, err := clientset.CoreV1().Pods("").List(metav1.ListOptions{})        if err != nil {            panic(err.Error())        }        fmt.Printf("There are %d pods in the cluster\n", len(pods.Items))        time.Sleep(10 * time.Second)    }}

代码很简单,其实是通过kubernetes自身的服务发现去完成的,kubernetes自带的service;访问token也通过secret的方式注入到容器里面,这样容器里面就可以调用kubernetes的api了。
如果是集群之外去访问的话就只能通过kubeconfig文件了。

package mainimport (    "flag"    "fmt"    "time"    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"    "k8s.io/apimachinery/pkg/fields"    "k8s.io/client-go/kubernetes"    "k8s.io/client-go/tools/cache"    "k8s.io/client-go/pkg/api/v1"    "k8s.io/client-go/tools/clientcmd"    // Uncomment the following line to load the gcp plugin (only required to authenticate against GKE clusters).    // _ "k8s.io/client-go/plugin/pkg/client/auth/gcp")func main() {    kubeconfig := flag.String("kubeconfig", "/mnt/go/src/k8s.io/client-go/examples/out-of-cluster/config", "absolute path to the kubeconfig file")    flag.Parse()    // uses the current context in kubeconfig    config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)    if err != nil {        panic(err.Error())    }    // creates the clientset    clientset, err := kubernetes.NewForConfig(config)    if err != nil {        panic(err.Error())    }    watchlist := cache.NewListWatchFromClient(clientset.Core().RESTClient(), "pods", v1.NamespaceDefault,        fields.Everything())    _, controller := cache.NewInformer(        watchlist,        &v1.Pod{},        time.Second * 0,        cache.ResourceEventHandlerFuncs{            AddFunc: func(obj interface{}) {                fmt.Printf("add: %s \n", obj)            },            DeleteFunc: func(obj interface{}) {                fmt.Printf("delete: %s \n", obj)            },            UpdateFunc:func(oldObj, newObj interface{}) {                fmt.Printf("old: %s, new: %s \n", oldObj, newObj)            },        },    )    stop := make(chan struct{})    go controller.Run(stop)    for {        pods, err := clientset.CoreV1().Pods("").List(metav1.ListOptions{})        if err != nil {            panic(err.Error())        }        fmt.Printf("There are %d pods in the cluster\n", len(pods.Items))        time.Sleep(10 * time.Second)    }}

上面代码通过kubeconfig建立连接,通过watchlist的方式监听pods的变化,监听add/delete/update事件。

原创粉丝点击