ZBLOG

package main import ( "fmt" "jvmdump/conf" "jvmdump/k8sutils" "jvmdump/notify" "jvmdump/ossutils" "jvmdump/p8sutils" "k8s.io/client-go/kubernetes" "k8s.io/client-go/r

使用 informer 可以监听 Kubernetes 资源的变化,可以实现更加高效和及时的处理资源变化的事件。在这段代码中,我们可以使用 informer 监听 Pod 的更新事件,当 Pod 更新后,获取 Pod 中的容器信息,并执行生成 dump 文件、拷贝文件等操作。

具体实现方式如下:

  1. 首先,创建一个 Pod 的 informer 对象。
podInformer := informers.NewSharedInformerFactoryWithOptions(
    clientSet,
    time.Second*30,
    informers.WithNamespace("default"),
    informers.WithTweakListOptions(func(options *metav1.ListOptions) {
        options.LabelSelector = "app=my-app"
    }),
).Core().V1().Pods().Informer()
  1. 定义 Pod 更新事件的回调函数。
func handlePodUpdate(oldObj, newObj interface{}) {
    oldPod := oldObj.(*corev1.Pod)
    newPod := newObj.(*corev1.Pod)

    // 判断 Pod 是否已删除
    if newPod.GetDeletionTimestamp() != nil {
        return
    }

    // 循环遍历容器,生成 dump 文件并上传至 OSS
    for _, container := range newPod.Spec.Containers {
        containerName := container.Name
        // 生成 dump 文件
        dumpFilename := fmt.Sprintf("%s-%s-oom.dump", newPod.Name, containerName)
        // 执行生成 dump 文件、拷贝文件、上传 OSS 等操作
        ...
    }
}
  1. 绑定事件回调函数,并启动 informer。
podInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
    UpdateFunc: handlePodUpdate,
})
podInformer.Run(stopCh)

通过使用 informer,我们可以避免轮询资源列表的方式来获取资源变化的事件,提高了程序的效率和稳定性。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=1747

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?