为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕后森 2021-11-08 15:34:38
我正在为 Kubernetes Go 库苦苦挣扎。文档——至少是我发现的那些——与库本身看起来已经过时了。由于导入问题,提供的示例无法构建。我只是想做一些简单的事情:按名称获取服务对象并打印一些属性(如 nodePort)。我只需要一个简单的库使用示例就可以了。我可以使用 RESTful API 轻松地做到这一点,但这感觉就像是在重新发明轮子。
查看完整描述

3 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

所以经过一些实验和来自 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)

    }

}


查看完整回答
反对 回复 2021-11-08
?
大话西游666

TA贡献1817条经验 获得超14个赞

以下是如何使用最新的 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())

}

我在一篇博文中对此进行了更详细的介绍。


查看完整回答
反对 回复 2021-11-08
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

使用 kubernetes go client,可以这样做:


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)

        }

    }

}


查看完整回答
反对 回复 2021-11-08
  • 3 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信