91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何進行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

娱乐| 方山县| 浮梁县| 聊城市| 泸州市| 平陆县| 轮台县| 聂荣县| 南靖县| 海城市| 桂阳县| 关岭| 乐陵市| 自治县| 石屏县| 三河市| 德阳市| 囊谦县| 丰台区| 通许县| 汶上县| 长宁县| 琼结县| 大荔县| 尼勒克县| 宣化县| 塔河县| 平遥县| 搜索| 临潭县| 泸州市| 阜新市| 周至县| 枣阳市| 江源县| 贵德县| 孟州市| 敦煌市| 临桂县| 体育| 莒南县|