溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

kubernetes中怎么實(shí)現(xiàn)資源擴(kuò)展機(jī)制

發(fā)布時(shí)間:2021-08-10 12:00:28 來源:億速云 閱讀:211 作者:Leah 欄目:云計(jì)算

今天就跟大家聊聊有關(guān)kubernetes中怎么實(shí)現(xiàn)資源擴(kuò)展機(jī)制,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。


1.PluginManager

PluginManager是一個(gè)上層組件,其內(nèi)部包含了上篇文章中的關(guān)鍵組件,并且協(xié)調(diào)其內(nèi)部數(shù)據(jù)流,而且還提供針對(duì)不同插件的具體的控制器kubernetes中怎么實(shí)現(xiàn)資源擴(kuò)展機(jī)制

 

1.1 核心數(shù)據(jù)結(jié)構(gòu)

核心結(jié)構(gòu)里面其實(shí)就是按照數(shù)據(jù)流來進(jìn)行設(shè)計(jì)的,首先需要一個(gè)感知插件desiredStateOfWorldPopulator用于感知后端服務(wù)的創(chuàng)建或者刪除,然后將感知到的事件加入到desiredStateOfWorld期望狀態(tài)緩存,由reconciler負(fù)責(zé)期進(jìn)行底層的注冊(cè)和下線,并且將結(jié)果存儲(chǔ)到actualStateOfWorld實(shí)際狀態(tài)緩存

type pluginManager struct {
   // 插件感知
   desiredStateOfWorldPopulator *pluginwatcher.Watcher

   // 協(xié)調(diào)器插件
   reconciler reconciler.Reconciler

   // 實(shí)際狀態(tài)緩存
   actualStateOfWorld cache.ActualStateOfWorld
   // 期望狀態(tài)緩存
   desiredStateOfWorld cache.DesiredStateOfWorld
}
 
 

1.2 初始化

初始化中會(huì)將dsw和asw都交給reconciler用于進(jìn)行事件的感知和更新對(duì)應(yīng)的緩存

func NewPluginManager(
   sockDir string,
   recorder record.EventRecorder) PluginManager {
   asw := cache.NewActualStateOfWorld()
   dsw := cache.NewDesiredStateOfWorld()
   // 這里會(huì)將期望狀態(tài)緩存和實(shí)際狀態(tài)緩存,都交給reconciler
   reconciler := reconciler.NewReconciler(
       operationexecutor.NewOperationExecutor(
           operationexecutor.NewOperationGenerator(
               recorder,
           ),
       ),
       loopSleepDuration,
       dsw,
       asw,
   )

   pm := &pluginManager{
       //  啟動(dòng)一個(gè)watcher并且存儲(chǔ)dsw期望狀態(tài)緩存,后續(xù)reconciler就可以通過dsw感知到新的狀態(tài)了
       desiredStateOfWorldPopulator: pluginwatcher.NewWatcher(
           sockDir,
           dsw,
       ),
       reconciler:          reconciler,
       desiredStateOfWorld: dsw,
       actualStateOfWorld:  asw,
   }
   return pm
}
 
 

1.3 啟動(dòng)插件管理器

插件管理器啟動(dòng)其實(shí)就是啟動(dòng)內(nèi)部的desiredStateOfWorldPopulator就會(huì)講watcher感知的事件,不斷的修改自己的內(nèi)部緩存這樣reconciler就可以不斷的通過期望狀態(tài)緩存,進(jìn)行對(duì)應(yīng)grpc的調(diào)用從而滿足期望狀態(tài)

func (pm *pluginManager) Run(sourcesReady config.SourcesReady, stopCh <-chan struct{}) {
   defer runtime.HandleCrash()

   // 運(yùn)行期望狀態(tài)緩存,其實(shí)主要是通過watcher感知到的事件,修改自身的緩存
   // 后續(xù)reconciler會(huì)周期性的獲取
   pm.desiredStateOfWorldPopulator.Start(stopCh)
   klog.V(2).Infof("The desired_state_of_world populator (plugin watcher) starts")

   klog.Infof("Starting Kubelet Plugin Manager")
   // 周期性的運(yùn)行校證數(shù)據(jù)
   go pm.reconciler.Run(stopCh)

   metrics.Register(pm.actualStateOfWorld, pm.desiredStateOfWorld)
   <-stopCh
   klog.Infof("Shutting down Kubelet Plugin Manager")
}
 
 

1.4 控制器注冊(cè)

控制器其實(shí)主要是指的reconciler通過對(duì)比期望緩存和實(shí)際緩存之間的差異,產(chǎn)生對(duì)應(yīng)的事件之后,針對(duì)該類型的插件,后續(xù)的處理流程是什么,比如注冊(cè)/下線具體的grpc接口和對(duì)應(yīng)插件類型的處理機(jī)制

func (pm *pluginManager) AddHandler(pluginType string, handler cache.PluginHandler) {
   pm.reconciler.AddHandler(pluginType, handler)
}
 
 

1.5 CSI與普通設(shè)備

當(dāng)前的kubelet中有注冊(cè)兩種類型的插件控制器,CSI與DEVICPLUGIn,從名字上大家也能知道大概的意思

kl.pluginManager.AddHandler(pluginwatcherapi.CSIPlugin, plugincache.PluginHandler(csi.PluginHandler))
   kl.pluginManager.AddHandler(pluginwatcherapi.DevicePlugin, kl.containerManager.GetPluginRegistrationHandler())
 
 

2. PluginHandler

這里我們只介紹一個(gè)即DevicePlugin的核心實(shí)現(xiàn)機(jī)制kubernetes中怎么實(shí)現(xiàn)資源擴(kuò)展機(jī)制

 

2.1 Endpoint

Endpoint其實(shí)指的就是某個(gè)提供擴(kuò)展資源的服務(wù),在之前說的reconciler中,會(huì)獲取其對(duì)應(yīng)的grpc服務(wù)的地址,后續(xù)則會(huì)直接調(diào)用grpc進(jìn)行通信

Endpoint需要感知對(duì)應(yīng)的資源設(shè)備的變化,同時(shí)將對(duì)應(yīng)的設(shè)備信息,回調(diào)通知給當(dāng)前的

 

2.2 Manager

Manager則是主要負(fù)責(zé)實(shí)現(xiàn)后端真正的Register/UnRegister的具體實(shí)現(xiàn),其在內(nèi)部會(huì)為每個(gè)Device創(chuàng)建一個(gè)Endpoint并負(fù)責(zé)收集后端提供資源服務(wù)上報(bào)上來的信息, 最終會(huì)講對(duì)應(yīng)的信息發(fā)送給kubelet,然后由kubelet在負(fù)責(zé)節(jié)點(diǎn)信息更新的時(shí)候,將信息傳遞給APIServer

 

2.3 Checkpoint

Checkpoint機(jī)制其實(shí)在很多系統(tǒng)中都比較常用,主要是用于周期性的將內(nèi)存中的數(shù)據(jù)序列化存儲(chǔ)到本地的磁盤中,在后續(xù)恢復(fù)的時(shí)候,會(huì)通過磁盤重新加載之前的數(shù)據(jù),從而實(shí)現(xiàn)內(nèi)存資源的快速恢復(fù)

擴(kuò)展資源的整體實(shí)現(xiàn)流程大概就是這個(gè)樣子,從如何感知數(shù)據(jù),注冊(cè)資源服務(wù),獲取資源服務(wù)的資源信息,并最終匯報(bào)給kubelet,同時(shí)落地本地磁盤,實(shí)現(xiàn)了完整的資源從感知到上報(bào)的整體流程的探測(cè),其不足主要是在于關(guān)于資源實(shí)體的描述,從而導(dǎo)致資源的分配和資源的上報(bào)上有比較大的擴(kuò)展性限制,比如要實(shí)現(xiàn)精細(xì)化的資源分配擴(kuò)展,則不太能實(shí)現(xiàn)

看完上述內(nèi)容,你們對(duì)kubernetes中怎么實(shí)現(xiàn)資源擴(kuò)展機(jī)制有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI