【问题标题】:How to watch kubernetes event details using it's go client?如何使用它的 go 客户端观看 kubernetes 事件详细信息?
【发布时间】:2023-03-25 04:00:02
【问题描述】:

在 kubernetes 仪表板中,您可以查看命名空间的事件:例如“ 拉取镜像“hello-world”,成功拉取镜像“hello-world”等。

有没有办法使用 it's go 客户端获取所有这些事件?

非常感谢。

【问题讨论】:

标签: go client kubernetes


【解决方案1】:

使用NewInformer() 函数为特定类型的事件创建通知。

这是一个最小示例 (source):

import (
    "fmt"
    "log"
    "net/http"
    "time"

    "k8s.io/kubernetes/pkg/api"
    "k8s.io/kubernetes/pkg/client/cache"
    "k8s.io/kubernetes/pkg/client/restclient"
    client "k8s.io/kubernetes/pkg/client/unversioned"
    "k8s.io/kubernetes/pkg/fields"
    "k8s.io/kubernetes/pkg/util/wait"
)

func podCreated(obj interface{}) {
    pod := obj.(*api.Pod)
    fmt.Println("Pod created: " + pod.ObjectMeta.Name)
}
func podDeleted(obj interface{}) {
    pod := obj.(*api.Pod)
    fmt.Println("Pod deleted: " + pod.ObjectMeta.Name)
}
func watchPods(client *client.Client, store cache.Store) cache.Store {
    //Define what we want to look for (Pods)
    watchlist := cache.NewListWatchFromClient(client, "pods", api.NamespaceAll, fields.Everything())
    resyncPeriod := 30 * time.Minute
    //Setup an informer to call functions when the watchlist changes
    eStore, eController := framework.NewInformer(
        watchlist,
        &api.Pod{},
        resyncPeriod,
        framework.ResourceEventHandlerFuncs{
            AddFunc:    podCreated,
            DeleteFunc: podDeleted,
        },
    )
    //Run the controller as a goroutine
    go eController.Run(wait.NeverStop)
    return eStore
}
func main() {
    //Configure cluster info
    config := &amp
    restclient.Config{
        Host:     "https://xxx.yyy.zzz:443",
        Username: "kube",
        Password: "supersecretpw",
        Insecure: true,
    }
    //Create a new client to interact with cluster and freak if it doesn't work
    kubeClient, err := client.New(config)
    if err != nil {
        log.Fatalln("Client not created sucessfully:", err)
    }
    //Create a cache to store Pods
    var podsStore cache.Store
    //Watch for Pods
    podsStore = watchPods(kubeClient, podsStore)
    //Keep alive
    log.Fatal(http.ListenAndServe(":8080", nil))
}

【讨论】:

  • 感谢您提供此信息。但是,我想获取 kube 集群的所有类型的事件。有没有使用 kube event api 的示例?
  • 这不是构建的,因为k8s.io/kubernetes/pkg 似乎已经过重大重构。您是否可以解决已更新的可编译依赖项?
  • @nmurthy,不,我最近没有做过类似的事情。
猜你喜欢
  • 2017-04-19
  • 2017-10-02
  • 2015-09-01
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 2010-11-26
相关资源
最近更新 更多