Kubernetes Informers
有时候去使用 client-go 的时候会去频率高的查 pod 的状态,这会给 api-server 造成压力,有什么办法可以本地缓存呢一份数据呢,k8s.io/client-go/tools/cache 这就是缓存库
先介绍一个和缓存库相关连的 Informer k8s.io/client-go/informers 它可以创建一个为 k8s 所有资源创建一个工厂,来镜像 kubernetes.Interface type
代码示例如下
package main
import (
"log"
"os"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/clientcmd"
)
func main() {
kubeconfig := os.Getenv("KUBECONFIG")
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
if err != nil {
panic(err.Error())
}
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
panic(err.Error())
}
factory := informers.NewSharedInformerFactory(clientset, 0)
informer := factory.Core().V1().Pods().Informer()
stopper := make(chan struct{})
defer close(stopper)
informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
// "k8s.io/apimachinery/pkg/apis/meta/v1" provides an Object
// interface that allows us to get metadata easily
mObj := obj.(v1.Object)
log.Printf("New Pod Added to Store: %s", mObj.GetName())
},
})
informer.Run(stopper)
}Dynamic Informer
Last updated
Was this helpful?