中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

监利县| 体育| 卫辉市| 金沙县| 普陀区| 遵化市| 同仁县| 竹山县| 西城区| 蒙阴县| 山丹县| 乌审旗| 郑州市| 平南县| 平安县| 时尚| 连南| 昌图县| 汪清县| 义乌市| 天长市| 霍山县| 芜湖县| 庆安县| 济源市| 云和县| 突泉县| 晴隆县| 广丰县| 和硕县| 南乐县| 阜平县| 从江县| 新建县| 册亨县| 牡丹江市| 仁怀市| 太湖县| 商南县| 平潭县| 灵川县|