激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - 如何自定義 Kube-Scheduler 插件

如何自定義 Kube-Scheduler 插件

2021-12-31 23:26云技術趣談 服務器知識

k8s的發展越來越像是一個框架,然后把各種擴展的能力留給開發者。開發者可以基于這些接口結合自己的業務場景,實現自己的場景化需求。

 如何自定義 Kube-Scheduler 插件

k8s的發展越來越像是一個框架,然后把各種擴展的能力留給開發者。開發者可以基于這些接口結合自己的業務場景,實現自己的場景化需求。其中kube scheduler 就是充分體現了這個特質,關于kube scheduler 本身的介紹參加之前的文章,今天我想介紹如何給scheduler 添加一個調度plugin。

如何自定義 Kube-Scheduler 插件

我們首先通過yaml定義這個plugin


  1. apiVersion: kubescheduler.config.k8s.io/v1beta1 
  2. kind: KubeSchedulerConfiguration 
  3. clientConnection: 
  4.   kubeconfig: "/etc/kubernetes/scheduler.conf"
  5. profiles: 
  6. - schedulerName: default-scheduler 
  7.   plugins: 
  8.     score: 
  9.       enabled: 
  10.       - name: HelloWorldPlugin 
  11.       disabled: 
  12.       - name"*"
  13.   pluginConfig: 
  14.   - name: HelloWorldPlugin 
  15.     args: 
  16.       xxx: "xxx"
  17.       yyy: "123"
  18.       zzz: 3 

我們定義了一個 HelloWorldPlugin 的插件,并且定義了這個插件的啟動參數。然后需要修改kube scheduler啟動參數通過 --config 指定上面的配置文件。

接下來我們就需要實現這個插件,scheduler是通過每個插件的打分的方式確定調度的主機。所以我們需要實現一個打分的接口


  1. type ScorePlugin interface { 
  2.   Plugin 
  3.   // 打分 
  4.   Score(ctx context.Context, state *CycleState, p *v1.Pod, nodeName string) (int64, *Status) 
  5.    
  6.   ScoreExtensions() ScoreExtensions 
  7.  
  8. type ScoreExtensions interface { 
  9.   // 打分歸一化,保證每個插件的公平性 
  10.   NormalizeScore(ctx context.Context, state *CycleState, p *v1.Pod, scores NodeScoreList) *Status 

我們根據自己的業務需求實現這個接口,譬如下面這個例子,基于主機網絡帶寬的調度:首先通過promethues獲取主機的網絡流量,打分依據網絡流量大小。


  1. func (n *HelloWorldPlugin) Score(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) (int64, *framework.Status) { 
  2.     nodeBandwidth, err := n.prometheus.GetNodeBandwidthMeasure(nodeName) 
  3.     if err != nil { 
  4.         return 0, framework.NewStatus(framework.Error, fmt.Sprintf("error getting node bandwidth measure: %s", err)) 
  5.     } 
  6.  
  7.     klog.Infof("[NetworkTraffic] node '%s' bandwidth: %s", nodeName, nodeBandwidth.Value) 
  8.     return int64(nodeBandwidth.Value), nil 

我們希望網絡流量越大,得分越少,于是在歸一化處理的時候,我們通過下面簡單公式轉化成最終的分數。


  1. func (n *HelloWorldPlugin) NormalizeScore(ctx context.Context, state *framework.CycleState, pod *v1.Pod, scores framework.NodeScoreList) *framework.Status { 
  2.     for i, node := range scores { 
  3.         scores[i].Score = framework.MaxNodeScore - (node.Score * framework.MaxNodeScore / higherScore) 
  4.     } 
  5.  
  6.     klog.Infof("[NetworkTraffic] Nodes final score: %v", scores) 
  7.     return nil 

這樣一個簡單的,基于網絡流量調度的插件就實現了。

原文鏈接:https://www.toutiao.com/i7046924965886591502/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日日草视频 | 成人男女啪啪免费观看网站四虎 | 欧美亚洲另类在线 | 亚洲成人欧美在线 | 九色com| 国产亲子伦在线观看 | 中国老女人一级毛片视频 | 国产在线观看精品 | 欧美日韩免费一区 | 超级av在线 | 日本中文字幕高清 | av在线高清观看 | 四季久久免费一区二区三区四区 | 国产91片 | 毛片在线免费视频 | 国产亚洲精品久久久久久大师 | 国产成人自拍视频在线观看 | 亚洲成人福利电影 | 欧美一级鲁丝片免费看 | 国产美女自拍av | 久久精品欧美一区二区三区不卡 | 成人在线精品视频 | 久国产 | 国产成人强伦免费视频网站 | 国产999精品久久久久 | 欧美精品一区自拍a毛片在线视频 | 92看片淫黄大片欧美看国产片 | 天堂成人一区二区三区 | 国产xxxx免费 | 欧美高清视频一区 | 桥本有菜免费av一区二区三区 | 国产精品麻豆一区二区三区 | 国产在线精品一区二区三区不卡 | 视频精品二区 | 久久亚洲第一 | 国产一区二区免费看 | 美国一级黄色毛片 | 国产一级小视频 | 色成人在线 | 一区二区三区日韩在线 | 欧美日韩一区,二区,三区,久久精品 |