自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何自定義 Kube-Scheduler 插件

開發(fā) 架構(gòu)
k8s的發(fā)展越來越像是一個(gè)框架,然后把各種擴(kuò)展的能力留給開發(fā)者。開發(fā)者可以基于這些接口結(jié)合自己的業(yè)務(wù)場景,實(shí)現(xiàn)自己的場景化需求。

 [[443171]]

 k8s的發(fā)展越來越像是一個(gè)框架,然后把各種擴(kuò)展的能力留給開發(fā)者。開發(fā)者可以基于這些接口結(jié)合自己的業(yè)務(wù)場景,實(shí)現(xiàn)自己的場景化需求。其中kube scheduler 就是充分體現(xiàn)了這個(gè)特質(zhì),關(guān)于kube scheduler 本身的介紹參加之前的文章,今天我想介紹如何給scheduler 添加一個(gè)調(diào)度plugin。

 

我們首先通過yaml定義這個(gè)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 

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

接下來我們就需要實(shí)現(xiàn)這個(gè)插件,scheduler是通過每個(gè)插件的打分的方式確定調(diào)度的主機(jī)。所以我們需要實(shí)現(xiàn)一個(gè)打分的接口

  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.   // 打分歸一化,保證每個(gè)插件的公平性 
  10.   NormalizeScore(ctx context.Context, state *CycleState, p *v1.Pod, scores NodeScoreList) *Status 

我們根據(jù)自己的業(yè)務(wù)需求實(shí)現(xiàn)這個(gè)接口,譬如下面這個(gè)例子,基于主機(jī)網(wǎng)絡(luò)帶寬的調(diào)度:首先通過promethues獲取主機(jī)的網(wǎng)絡(luò)流量,打分依據(jù)網(wǎng)絡(luò)流量大小。

  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 

我們希望網(wǎng)絡(luò)流量越大,得分越少,于是在歸一化處理的時(shí)候,我們通過下面簡單公式轉(zhuǎn)化成最終的分?jǐn)?shù)。

  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 

這樣一個(gè)簡單的,基于網(wǎng)絡(luò)流量調(diào)度的插件就實(shí)現(xiàn)了。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2023-11-29 09:29:48

Kuberneteskube

2021-12-28 15:38:46

Traefik中間件插件

2023-03-31 07:17:16

2022-01-14 09:17:13

PythonAPISIX插件

2009-09-07 22:00:15

LINQ自定義

2012-11-19 11:07:42

IBMdw

2013-06-27 11:10:01

iOS開發(fā)自定義UISlider

2015-02-12 15:33:43

微信SDK

2015-02-12 15:38:26

微信SDK

2009-09-03 13:34:03

.NET自定義控件

2023-01-03 07:40:27

自定義滑塊組件

2022-04-20 18:22:18

CSS拖拽預(yù)覽圖

2011-08-25 11:44:21

LUA腳本魔獸世界

2010-02-07 14:02:16

Android 界面

2016-12-26 15:25:59

Android自定義View

2019-06-10 10:08:16

Windows 10Windows鼠標(biāo)指針

2021-06-17 06:52:37

C#自定義異常

2013-01-10 09:36:19

NagiosNagios插件

2011-08-09 17:16:56

CoreAnimati動(dòng)畫

2019-08-22 13:40:27

GNOME 3桌面
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)