亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行K8S源碼分析啟動

發布時間:2021-12-15 18:44:55 來源:億速云 閱讀:161 作者:柒染 欄目:云計算

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

Controller Manager啟動的過程比較簡單,主要就是依次啟動各個controllers。

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

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

func Run(s *options.CMServer) error {

   // 1. 驗證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. 創建controllers啟動邏輯。run是真正用來啟動controllers的函數

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

      rootClientBuilder := controller.SimpleControllerClientBuilder{

         ClientConfig: kubeconfig,

      }

      var clientBuilder controller.ControllerClientBuilder

      ....

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

      ....

      // NewControllerInitializers返回所有待啟動的controllers,StartControllers則依次啟動

      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執行run函數

   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()函數返回一個map[string]InitFunc的結構,包含所有需要啟動的controllers的啟動函數。
StartControllers則依次啟動controllers:

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

   // 依次調用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

}

關于如何進行K8S源碼分析啟動就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

荣成市| 梁河县| 马山县| 杭锦旗| 府谷县| 文登市| 闽侯县| 泊头市| 通江县| 平邑县| 阿瓦提县| 长寿区| 淮南市| 治多县| 霞浦县| 渭南市| 英吉沙县| 安陆市| 哈巴河县| 正蓝旗| 宜兰市| 石楼县| 阳曲县| 江源县| 廊坊市| 房产| 石泉县| 湟源县| 东乡族自治县| 柏乡县| 天祝| 清水河县| 肇州县| 桓仁| 台州市| 科尔| 濮阳县| 沙河市| 泌阳县| 玉门市| 定陶县|