第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Kubernetes client-go 使用 Informers 監(jiān)視部署

Kubernetes client-go 使用 Informers 監(jiān)視部署

Go
蕭十郎 2022-12-19 21:18:09
我正在嘗試使用 client-go informers 來獲取部署的副本數(shù)。每當(dāng)自動(dòng)縮放更改副本數(shù)時(shí),我都需要檢索它以處理其他一些邏輯。我之前使用的是 Watch() 函數(shù),但在超時(shí)和連接斷開方面存在一些不一致。下面的代碼顯示了一個(gè)實(shí)現(xiàn)示例:labelOptions := informers.WithTweakListOptions(func(opts *v1.ListOptions) {    opts.FieldSelector = "metadata.name=" + name})factory := informers.NewSharedInformerFactoryWithOptions(clientSet, 2*time.Second, informers.WithNamespace(namespace), labelOptions)informer := factory.Apps().V1().Deployments().Informer()// Using the channels and goroutines below didn't show changes:stopper := make(chan struct{})defer close(stopper)//go func() {informer.AddEventHandler(cache.ResourceEventHandlerFuncs{    AddFunc: func(obj interface{}) {        mObj, ok := obj.(*appsv1.Deployment)        if !ok {            panic(spew.Sdump("informer returned invalid type", mObj))        }        replicas := int(*mObj.Spec.Replicas)        logger.Infof("updating replicas to %d", replicas)        sendUpdates() // use updates elsewhere    },        UpdateFunc: func(oldObj, newObj interface{}) {        old, ok := oldObj.(*appsv1.Deployment)        if !ok {            panic(spew.Sdump("informer returned invalid type", old))        }        newDeployment, ok := newObj.(*appsv1.Deployment)        if !ok {            panic(spew.Sdump("informer returned invalid type", newDeployment))        }        oldReplicas := int(*old.Spec.Replicas)        newReplicas := int(*newDeployment.Spec.Replicas)        if oldReplicas != newReplicas {            sendUpdates()        }    },})//factory.Start(wait.NeverStop)//factory.WaitForCacheSync(wait.NeverStop)informer.Run(stopper)當(dāng) Kubernetes 自動(dòng)縮放或我手動(dòng)更改 Deployments 副本時(shí),我得到deployment.apps/app scaled了但它沒有被 Informer 捕獲。日志中沒有打印任何內(nèi)容,它進(jìn)入了一個(gè)沒有錯(cuò)誤消息的崩潰循環(huán)。
查看完整描述

1 回答

?
當(dāng)年話下

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊

有幾點(diǎn)需要注意:

  • 在調(diào)用之前informerFactory.Start(),確保 Informer 被直接調(diào)用(informer := factory.Apps().V1().Deployments().Informer())或Start()不會(huì)啟動(dòng)任何東西。

  • 使用 goroutine 啟動(dòng) SharedInformerFactory 是沒有意義的,因?yàn)樗?code>informerFactory.Start()內(nèi)部使用了一個(gè)。

  • 它還將停止該 informerFactory.WaitForCacheSync() 方法的工作,導(dǎo)致它為開始的告密者獲取錯(cuò)誤的數(shù)據(jù)。

labelOptions := informers.WithTweakListOptions(func(opts *v1.ListOptions) {

    opts.FieldSelector = "metadata.name=" + name

})

factory := informers.NewSharedInformerFactoryWithOptions(clientSet, 2*time.Second, informers.WithNamespace(namespace), labelOptions)

informer := factory.Apps().V1().Deployments().Informer()


informer.AddEventHandler(cache.ResourceEventHandlerFuncs{

    AddFunc: func(obj interface{}) {

        mObj, ok := obj.(*appsv1.Deployment)

        if !ok {

            doSomething()

        }

        replicas := int(*mObj.Spec.Replicas)

        doSomething() 

    },


    

    UpdateFunc: func(oldObj, newObj interface{}) {

        old, ok := oldObj.(*appsv1.Deployment)

        if !ok {

            doSomething()

        }

        newDeployment, ok := newObj.(*appsv1.Deployment)

        if !ok {

            doSomething()

        }

        oldReplicas := int(*old.Spec.Replicas)

        newReplicas := int(*newDeployment.Spec.Replicas)

        if oldReplicas != newReplicas {

            doSomething()

        }

    },

})


// Initializes all active informers and starts the internal goroutine

factory.Start(wait.NeverStop)

factory.WaitForCacheSync(wait.NeverStop)


查看完整回答
反對(duì) 回復(fù) 2022-12-19
  • 1 回答
  • 0 關(guān)注
  • 157 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)