k8s informer使用示例

博客围绕K8s Informer展开,提供了相关示例,但具体内容未给出。K8s Informer在Kubernetes系统中是重要组件,可用于监听资源变化等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import (
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
	"k8s.io/kubernetes/staging/src/k8s.io/client-go/informers"
	"k8s.io/api/core/v1"
	"fmt"
	"time"
//	"k8s.io/apimachinery/pkg/labels"
	coreinformers "k8s.io/client-go/informers/core/v1"
)

type controller struct {
	queue chan interface{}
}

func (c *controller) pop() interface{}{
	e := <- c.queue
	return e
}

func (c *controller) run() {
	for {
		ele := c.pop()
		c.process(ele)
	}
}

func (c *controller) process(obj interface{}) {
	pod, _ := obj.(*v1.Pod)
	fmt.Printf("process pod: %s_%s \n", pod.Namespace, pod.Name)
}

func initInformer() coreinformers.PodInformer {
	// generate a k8s client
	clientConfig, err := clientcmd.LoadFromFile("/var/run/kubernetes/admin.kubeconfig")
	ExceptNilErr(err)

	config, err := clientcmd.NewDefaultClientConfig(*clientConfig, &clientcmd.ConfigOverrides{}).ClientConfig()
	ExceptNilErr(err)

	k8sClient, err := kubernetes.NewForConfig(config)
	ExceptNilErr(err)

	// generate a shared informerFactory
	sharedInformerFactory := informers.NewSharedInformerFactory(k8sClient, 0)

	// create pod informer and start it
	podInformer := sharedInformerFactory.Core().V1().Pods()
	return podInformer
}

func main() {
	stopCh := make(chan struct{})
	podInformer := initInformer()

	c := &controller{
		queue: make(chan interface{}, 10),
	}
	podInformer.Informer().AddEventHandler(&QueueEventHandler{c:c})
	go podInformer.Informer().Run(stopCh)
	go c.run()

	time.Sleep(time.Minute * 10)
}

type QueueEventHandler struct {
	c *controller
}

func (h *QueueEventHandler) OnAdd(obj interface{}) {
	h.c.queue <- obj
}

func (h *QueueEventHandler) OnDelete(obj interface{}) {
//	h.c.queue <- obj
}

func (h *QueueEventHandler) OnUpdate(old, new interface{}) {
//	h.c.queue <- new
}

func ExceptNilErr(err error)  {
	if err != nil {
		panic(err)
	}
}

controller的一般模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值