成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kubernetes 調度器是如何工作的

運維 系統運維
了解 Kubernetes 調度器是如何發現新的吊艙并將其分配到節點。

[[383892]]

了解 Kubernetes 調度器是如何發現新的吊艙并將其分配到節點。

Kubernetes 已經成為容器和容器化工作負載的標準編排引擎。它提供一個跨公有云和私有云環境的通用和開源的抽象層。

對于那些已經熟悉 Kuberbetes 及其組件的人,他們的討論通常圍繞著如何盡量發揮 Kuberbetes 的功能。但當你剛剛開始學習 Kubernetes 時,嘗試在生產環境中使用前,明智的做法是從一些關于 Kubernetes 相關組件(包括 Kubernetes 調度器) 開始學習,如下抽象視圖中所示:

 

Kubernetes 也分為控制平面和工作節點:

  1. 控制平面: 也稱為主控,負責對集群做出全局決策,以及檢測和響應集群事件。控制平面組件包括:
  • etcd
  • kube-apiserver
  • kube-controller-manager
  • 調度器
  1. 工作節點: 也稱節點,這些節點是工作負載所在的位置。它始終和主控聯系,以獲取工作負載運行所需的信息,并與集群外部進行通訊和連接。工作節點組件包括:
  • kubelet
  • kube-proxy
  • CRI

我希望這個背景信息可以幫助你理解 Kubernetes 組件是如何關聯在一起的。

Kubernetes 調度器是如何工作的

Kubernetes 吊艙pod 由一個或多個容器組成組成,共享存儲和網絡資源。Kubernetes 調度器的任務是確保每個吊艙分配到一個節點上運行。

(LCTT 譯注:容器技術領域大量使用了航海比喻,pod 一詞,意為“豆莢”,在航海領域指“吊艙” —— 均指盛裝多個物品的容器。常不翻譯,考慮前后文,可譯做“吊艙”。)

在更高層面下,Kubernetes 調度器的工作方式是這樣的:

  1. 每個需要被調度的吊艙都需要加入到隊列
  2. 新的吊艙被創建后,它們也會加入到隊列
  3. 調度器持續地從隊列中取出吊艙并對其進行調度

調度器源碼scheduler.go)很大,約 9000 行,且相當復雜,但解決了重要問題:

等待/監視吊艙創建的代碼

監視吊艙創建的代碼始于 scheduler.go 的 8970 行,它持續等待新的吊艙:

  1. // Run begins watching and scheduling. It waits for cache to be synced, then starts a goroutine and returns immediately.
  2.  
  3. func (sched *Scheduler) Run() {
  4. if !sched.config.WaitForCacheSync() {
  5. return
  6. }
  7.  
  8. go wait.Until(sched.scheduleOne, 0, sched.config.StopEverything)

負責對吊艙進行排隊的代碼

負責對吊艙進行排隊的功能是:

  1. // queue for pods that need scheduling
  2. podQueue *cache.FIFO

負責對吊艙進行排隊的代碼始于 scheduler.go 的 7360 行。當事件處理程序觸發,表明新的吊艙顯示可用時,這段代碼將新的吊艙加入隊列中:

  1. func (f *ConfigFactory) getNextPod() *v1.Pod {
  2. for {
  3. pod := cache.Pop(f.podQueue).(*v1.Pod)
  4. if f.ResponsibleForPod(pod) {
  5. glog.V(4).Infof("About to try and schedule pod %v", pod.Name)
  6. return pod
  7. }
  8. }
  9. }

處理錯誤代碼

在吊艙調度中不可避免會遇到調度錯誤。以下代碼是處理調度程序錯誤的方法。它監聽 podInformer 然后拋出一個錯誤,提示此吊艙尚未調度并被終止:

  1. // scheduled pod cache
  2. podInformer.Informer().AddEventHandler(
  3. cache.FilteringResourceEventHandler{
  4. FilterFunc: func(obj interface{}) bool {
  5. switch t := obj.(type) {
  6. case *v1.Pod:
  7. return assignedNonTerminatedPod(t)
  8. default:
  9. runtime.HandleError(fmt.Errorf("unable to handle object in %T: %T", c, obj))
  10. return false
  11. }
  12. },

換句話說,Kubernetes 調度器負責如下:

  • 將新創建的吊艙調度至具有足夠空間的節點上,以滿足吊艙的資源需求。
  • 監聽 kube-apiserver 和控制器是否創建新的吊艙,然后調度它至集群內一個可用的節點。
  • 監聽未調度的吊艙,并使用 /binding 子資源 API 將吊艙綁定至節點。

例如,假設正在部署一個需要 1 GB 內存和雙核 CPU 的應用。因此創建應用吊艙的節點上需有足夠資源可用,然后調度器會持續運行監聽是否有吊艙需要調度。

了解更多

要使 Kubernetes 集群工作,你需要使以上所有組件一起同步運行。調度器有一段復雜的的代碼,但 Kubernetes 是一個很棒的軟件,目前它仍是我們在討論或采用云原生應用程序時的首選。

學習 Kubernetes 需要精力和時間,但是將其作為你的專業技能之一能為你的職業生涯帶來優勢和回報。有很多很好的學習資源可供使用,而且 官方文檔 也很棒。如果你有興趣了解更多,建議從以下內容開始:

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2023-03-06 00:27:02

Kubernetesscheduler系統

2023-04-17 08:13:13

KubernetesPod

2021-11-25 14:44:51

Kubernetes復制控制器

2023-03-03 11:12:34

Kubernetes控制器后端

2024-03-01 19:11:18

KubernetesOOM內存

2020-10-12 08:32:34

瀏覽器進程線程

2010-07-26 15:01:32

Telnet服務器

2021-11-05 15:55:35

作業幫Kubernetes調度器

2011-08-08 13:45:58

jQuery

2021-05-10 17:20:55

AIOps開發人員人工智能

2023-04-18 14:53:48

2023-04-18 15:09:50

2010-08-02 16:56:03

ICMP協議

2021-08-03 14:29:30

ARPANET互聯網協議TCP

2024-09-06 17:55:27

Springboot開發

2019-12-02 13:46:35

瀏覽器前端開發

2023-10-25 12:51:28

Go調度器

2016-06-15 10:35:59

云計算

2017-08-23 11:10:44

Kubernetes 調度詳解

2019-03-05 10:48:24

Web瀏覽器前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久免费观看视频 | 在线看免费| 中文字幕在线第二页 | 日韩精品一区二区三区中文在线 | 影音先锋中文字幕在线观看 | 色网在线播放 | 国产精品成人一区二区三区夜夜夜 | av大片在线 | 久久国产精品无码网站 | 日本在线综合 | 啪啪精品 | 欧美888| 国产一区二区在线视频 | 欧美午夜一区 | 99久久精品国产一区二区三区 | 不卡一区二区在线观看 | 国产精品污www一区二区三区 | 国产精品一区在线观看你懂的 | 欧美日本高清 | 国产亚洲精品成人av久久ww | 久久精品亚洲 | 久久夜视频 | 日本a∨精品中文字幕在线 亚洲91视频 | 精品日韩一区二区 | 国产在线拍偷自揄拍视频 | 日日摸日日碰夜夜爽2015电影 | 99久9 | 久久小视频 | 中文字幕韩在线第一页 | 国产区在线观看 | 精品一区二区三区不卡 | 91精品亚洲| 免费一级欧美在线观看视频 | 亚洲国产精品一区二区久久 | 欧美国产在线一区 | 国产高清免费 | 日韩精品av一区二区三区 | 国产女人与拘做视频免费 | 国产精品一区一区 | 久久久亚洲成人 | 9999国产精品欧美久久久久久 |