如何使用Kubernetes Go库创建简单的客户端应用程序?

时间:2015-09-13 21:53:42

标签: go kubernetes

我正在与Kubernetes Go图书馆挣扎。文档 - at least the ones I found - 与图书馆本身过时了。由于导入问题,提供的示例无法构建。我只是想做一些简单的事情:按名称获取一个Service对象并打印一些属性(如nodePort)。我只需要一个简单的库使用示例来帮助我。

我可以使用RESTful API轻松完成此操作,但这就像重新发明轮子一样。

3 个答案:

答案 0 :(得分:7)

所以经过一些实验和k8s Slack频道的提示后,我就有了这个例子。也许有人可以使用正确的导入路径更新示例。

<appSettings>

<add key="UnobtrusiveJavaScriptEnabled" value="true" />

</appSettings>

答案 1 :(得分:5)

以下是使用最新Go客户端的方法。

如果你在k8s群集中:

package main

import (
  "fmt"

  "k8s.io/client-go/1.5/kubernetes"
  "k8s.io/client-go/1.5/pkg/api/v1"
  "k8s.io/client-go/1.5/rest"
)

func main()  {
    config, err = rest.InClusterConfig()
    if err != nil {
      return nil, err
    }

    c, err := kubernetes.NewForConfig(config)
    if err != nil {
      return nil, err
    }

    // Get Pod by name
    pod, err := c.Pods(v1.NamespaceDefault).Get("my-pod")
    if err != nil {
        fmt.Println(err)
        return
    }

    // Print its creation time
    fmt.Println(pod.GetCreationTimestamp())
}

如果你不在群集中:

package main

import (
  "fmt"

  "k8s.io/client-go/1.5/kubernetes"
  "k8s.io/client-go/1.5/pkg/api/v1"
  "k8s.io/client-go/1.5/tools/clientcmd"
)

func main()  {
    config, err := clientcmd.BuildConfigFromFlags("", <kube-config-path>)
    if err != nil {
      return nil, err
    }

    c, err := kubernetes.NewForConfig(config)
    if err != nil {
      return nil, err
    }

    // Get Pod by name
    pod, err := c.Pods(v1.NamespaceDefault).Get("my-pod")
    if err != nil {
        fmt.Println(err)
        return
    }

    // Print its creation time
    fmt.Println(pod.GetCreationTimestamp())
}

我在blog post中详细介绍了这一点。

答案 2 :(得分:3)

随着kubernetes成为客户端,可以这样做:

package main

import (
    "flag"
    "fmt"

    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/pkg/api/v1"
    "k8s.io/client-go/tools/clientcmd"
)

var (
    kubeconfig = flag.String("kubeconfig", "./config", "absolute path to the kubeconfig file")
)

func main() {
    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())
    }
    services, err := clientset.Core().Services("").List(v1.ListOptions{})
    if err != nil {
        panic(err.Error())
    }
    fmt.Printf("There are %d pods in the cluster\n", len(services.Items))

    for _, s := range services.Items {
        for p, _ := range s.Spec.Ports {
            fmt.Println("Port:", s.Spec.Ports[p].Port)
            fmt.Println("NodePort:", s.Spec.Ports[p].NodePort)
        }
    }
}