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

Chr*_*ell 11 go kubernetes

我正在努力与Kubernetes Go图书馆合作.文档 - 至少是我发现的文档 - 似乎与图书馆本身已经过时了.由于导入问题,提供的示例无法构建.我只是想做一些简单的事情:按名称获取一个Service对象并打印一些属性(如nodePort).我只需要一个简单的库使用示例来帮助我.

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

Chr*_*ell 7

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

package main

import (
    "fmt"
    "log"

    "github.com/kubernetes/kubernetes/pkg/api"
    client "github.com/kubernetes/kubernetes/pkg/client/unversioned"
)

func main() {

    config := client.Config{
        Host: "http://my-kube-api-server.me:8080",
    }
    c, err := client.New(&config)
    if err != nil {
        log.Fatalln("Can't connect to Kubernetes API:", err)
    }

    s, err := c.Services(api.NamespaceDefault).Get("some-service-name")
    if err != nil {
        log.Fatalln("Can't get service:", err)
    }
    fmt.Println("Name:", s.Name)
    for p, _ := range s.Spec.Ports {
        fmt.Println("Port:", s.Spec.Ports[p].Port)
        fmt.Println("NodePort:", s.Spec.Ports[p].NodePort)
    }
}
Run Code Online (Sandbox Code Playgroud)


Rus*_*ush 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())
}
Run Code Online (Sandbox Code Playgroud)

如果您不在集群中:

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())
}
Run Code Online (Sandbox Code Playgroud)

我已经在博客文章中对此进行了更详细的介绍。