iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
Kubernetes

Think Again Kubernetes系列 第 13

初探 kube-scheduler,Filter and Score

  • 分享至 

  • xImage
  •  
  • 當你在 pod.spec 設定 nodeselector 的時候,kubernetes 是怎麼找到合適的 Node?為

  • 什麼我們不會看到 Hot Spot Node,也就是一個 Node 上面出現 30+ Pod,但是另一個 Node 卻一個都沒有?

這兩個問題可以瞭解 kube-scheduler 的兩個階段: Filter 以及 Score。

kube-scheduler 的排程算法主要有兩個階段,第一個階段是 Filter,篩選符合資格的 Node,再來是 Score 階段,會根據策略為篩選過後的 Node 計算分數,然後根據分數把 Pod 排程到分數最高的 Node 上。

NodeSelector 作用於 Filter 這個一階段,如果 pod.spec 裡面有設定 nodeSelector,Filter 階段會根據 nodeSelector 篩選符合資格的 Node。

篩選之後,kube-scheduler 會根據 Node 上面的 CPU, Memory計算分數,其算法是透過 NodeResourcesFit 來達成。

https://ithelp.ithome.com.tw/upload/images/20240922/20169135hHizUX9BE8.png

我們藉由兩個使用情境介紹了 kube-scheduler 的兩階段算法,但是如果想要處理更複雜的業務要怎麼辦?

如果你在每一個 Zone 配置 30 個 Node,但 kube-proxy 只會把每一個 Pod 放到 routing table,於是,為了減少不必要的東西向流量,你啟用了 Topology Aware Routing,希望讓 frontend Pod 可以溝通在同一個 Zone。

這麼做解決了網路拓樸問題後,你想要確保每一個 AZ,甚至每一個 Node 上面都有至少一對 frontend 以及 backend,你該怎麼做?

如果你的資料庫,以 AWS RDS 為例,放在 A-zone,所以你希望 backend 靠近 A-zone,所以你用了 nodeselector 把 backend 佈署到 A-zone。 但是你的 AWS RDS 有啟動 Multiple-AZ 的功能,當 A-zone 出現問題的時候會 Failover 到 B-zone,由於用了 NodeSelector,這時候你的 Pod 不會跟者 failover 到 zone-b,資料庫過去了但是 backend 沒有過去,造成了 P0 事件,我們要怎麼避免?

由於應用情境會有不同的需求,Kubernetes 要怎麼讓用戶靈活地制定排程策略?

於是,迎接了 Kubernetes Scheduler Framework。


上一篇
Dynamic Admission Controller
下一篇
深入 kube-scheduler : Scheduler Framework 以及 percentageOfNodesToScore
系列文
Think Again Kubernetes31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言