一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

云服務器|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/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99热这里只有精品一区二区三区 | sex5·性屋娱乐| 无人区1免费完整观看 | 国产麻豆精品原创 | 婷婷在线观看香蕉五月天 | 国产成人理在线观看视频 | 视频大全在线观看网址 | 猥琐对着美女飞机喷到脸上 | 久久两性视频 | 亚洲天堂影院在线观看 | 高清男的插曲女的 欢迎你老狼 | 久久电影午夜 | www.av免费| 高清欧美不卡一区二区三区 | 精品国产免费一区二区三区 | 欧美视频免费 | 欧美成人三级伦在线观看 | 欧美video丝袜连裤袜bd | 1024国产高清精品推荐 | 关晓彤被草| 国产精品玖玖玖影院 | 日日精品| 国产99区 | 国产高清在线播放免费观看 | 亚洲国产在线视频精品 | 四虎永久免费地址在线网站 | 短篇最污的乱淫伦小说全集 | 国产重口老太伦 | 久久这里只有精品国产精品99 | 俄罗斯美女大逼 | 欧美性高清另类videosex死尸 | 私人chinese beauty | 特黄视频 | 人人人人看人人人做人人 | 国产精品香蕉在线观看不卡 | 无码专区aaaaaa免费视频 | 古代色翁荡熄 | 色婷婷久久综合中文久久一本 | 日本漫画大全之工之口 | 成人资源影音先锋久久资源网 | 精品欧美小视频在线观看 |