如何進(jìn)行K8S源碼分析啟動(dòng)

這篇文章給大家介紹如何進(jìn)行K8S源碼分析啟動(dòng),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供石臺(tái)企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都做網(wǎng)站、H5頁面制作、小程序制作等業(yè)務(wù)。10年已為石臺(tái)眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

Controller Manager啟動(dòng)的過程比較簡單,主要就是依次啟動(dòng)各個(gè)controllers。

啟動(dòng)的代碼在/cmd/kube-controller-manager/app/controllermanager.go中,核心的是Run方法:

// Run runs the CMServer.  This should never exit.

func Run(s *options.CMServer) error {

   // 1. 驗(yàn)證CM配置

   if err := s.Validate(KnownControllers(), ControllersDisabledByDefault.List()); err != nil {

      return err

   }

 

   ....

   kubeClient, leaderElectionClient, kubeconfig, err := createClients(s)

   if err != nil {

      return err

   }

 

   go startHTTP(s)

 

   recorder := createRecorder(kubeClient)

 

   // 2. 創(chuàng)建controllers啟動(dòng)邏輯。run是真正用來啟動(dòng)controllers的函數(shù)

   run := func(stop <-chan struct{}) {

      rootClientBuilder := controller.SimpleControllerClientBuilder{

         ClientConfig: kubeconfig,

      }

      var clientBuilder controller.ControllerClientBuilder

      ....

      ctx, err := CreateControllerContext(s, rootClientBuilder, clientBuilder, stop)

      ....

      // NewControllerInitializers返回所有待啟動(dòng)的controllers,StartControllers則依次啟動(dòng)

      if err := StartControllers(ctx, saTokenControllerInitFunc, NewControllerInitializers()); err != nil {

         glog.Fatalf("error starting controllers: %v", err)

      }

 

      ctx.InformerFactory.Start(ctx.Stop)

      close(ctx.InformersStarted)

 

      select {}

   }

 

   ...

   // 3. 選主,由leader執(zhí)行run函數(shù)

   leaderelection.RunOrDie(leaderelection.LeaderElectionConfig{

      Lock:          rl,

      LeaseDuration: s.LeaderElection.LeaseDuration.Duration,

      RenewDeadline: s.LeaderElection.RenewDeadline.Duration,

      RetryPeriod:   s.LeaderElection.RetryPeriod.Duration,

      Callbacks: leaderelection.LeaderCallbacks{

         OnStartedLeading: run,

         OnStoppedLeading: func() {

            glog.Fatalf("leaderelection lost")

         },

      },

   })

   panic("unreachable")

}

NewControllerInitializers()函數(shù)返回一個(gè)map[string]InitFunc的結(jié)構(gòu),包含所有需要啟動(dòng)的controllers的啟動(dòng)函數(shù)。
StartControllers則依次啟動(dòng)controllers:

func StartControllers(ctx ControllerContext, startSATokenController InitFunc, controllers map[string]InitFunc) error {

   // 依次調(diào)用controller init funcs

   for controllerName, initFn := range controllers {

      if !ctx.IsControllerEnabled(controllerName) {

         glog.Warningf("%q is disabled", controllerName)

         continue

      }

 

      time.Sleep(wait.Jitter(ctx.Options.ControllerStartInterval.Duration, ControllerStartJitter))

 

      glog.V(1).Infof("Starting %q", controllerName)

      started, err := initFn(ctx)

      if err != nil {

         glog.Errorf("Error starting %q", controllerName)

         return err

      }

      if !started {

         glog.Warningf("Skipping %q", controllerName)

         continue

      }

      glog.Infof("Started %q", controllerName)

   }

 

   return nil

}

關(guān)于如何進(jìn)行K8S源碼分析啟動(dòng)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)頁標(biāo)題:如何進(jìn)行K8S源碼分析啟動(dòng)
本文路徑:http://muchs.cn/article4/gepjie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、營銷型網(wǎng)站建設(shè)、搜索引擎優(yōu)化動(dòng)態(tài)網(wǎng)站、、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作