成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

kube-scheduler調度擴展

fobnn / 1462人閱讀

摘要:調度擴展自帶了一個默認調度器,其內置了很多節(jié)點預選和優(yōu)選的調度算法,一般調度場景下可以滿足要求。我們就需要對調度器進行擴展,以達到調度適合業(yè)務場景的目的。可以參考故采用第三種實現(xiàn)擴展調度程序的方案。以保證和擴展調度程序的通信。

kube-scheduler調度擴展

Kubernetes 自帶了一個默認調度器kube-scheduler,其內置了很多節(jié)點預選和優(yōu)選的調度算法,一般調度場景下可以滿足要求。但是在一些特殊場景下,默認調度器不能滿足我們復雜的調度需求。我們就需要對調度器進行擴展,以達到調度適合業(yè)務場景的目的。

背景

中間件redis容器化后,需要兩主不能在同一個節(jié)點上,一對主從不能在同一節(jié)點上;elasticsearch容器化后,兩個data實例不能在同一節(jié)點上。在這類場景下,默認調度器內置的預選、優(yōu)選算法不能滿足需求,我們有以下三種選擇:

將新的調度算法添加到默認調度程序中,并重新編譯鏡像,最終該鏡像運行的實例作為kubernetes集群調度器;

參考kube-scheduler實現(xiàn)滿足自己業(yè)務場景的調度程序,并編譯鏡像,將該程序作為獨立的調度器運行到kubernetes集群內,需要用該調度器調度的pod實例,在spec.schedulerName里指定該調度器;

實現(xiàn)“調度擴展程序“:默認調度器kube-scheduler在進行預選時會調用該擴展程序進行過濾節(jié)點;在優(yōu)選時會調用該擴展程序進行給節(jié)點打分,或者在bind操作時,調用該擴展器進行bind操作。

對上述三種方式進行評估:

第一種:將自己的調度算法添加到默認調度器kube-scheduler中,對原生代碼侵入性較高,而且隨著kubernetes版本升級,維護成本也較高;

第二種:默認調度器里內置了很多優(yōu)秀調度算法,如:檢查節(jié)點資源是否充足;端口是否占用;volume是否被其他pod掛載;親和性;均衡節(jié)點資源利用等,如果完全使用自己開發(fā)的調度器程序,可能在達到了實際場景調度需求同時,失去更佳的調度方案,除非集成默認調度器中的算法到自己獨立調度程序中,但這無疑是不現(xiàn)實的;

第三種:通過啟動參數(shù)的policy配置,選用某些默認調度器中的預選、優(yōu)選調度算法的同時,也可以調用外部擴展調度程序的算法,計算得到最優(yōu)的調度節(jié)點,無需修改kube-scheduler代碼,只需要在啟動參數(shù)中增加配置文件即可將默認調度程序和擴展調度程序相互關聯(lián)。

可以參考:

https://github.com/kubernetes...

故采用第三種:實現(xiàn)擴展調度程序的方案。

整體架構

kube-scheduler在調度pod實例時,首先獲取到Node1、Node2、Node3三個節(jié)點信息,進行默認的預選階段,篩選滿足要求的節(jié)點,其次再調用擴展程序中的預選算法,選出剩下的節(jié)點,假設預選階段Node3上資源不足被過濾掉,預選結束后只剩Node1和Node2;Node1和Node2進入kube-scheduler默認的優(yōu)選階段進行節(jié)點打分,其次再調用擴展調度程序中的優(yōu)選算法進行打分,kube-scheduler會將所有算法的打分結果進行加權求和,獲得分數(shù)最高的節(jié)點作為pod最終bind節(jié)點,然后kube-scheduler調用apiserver進行bind操作。

實現(xiàn)步驟 實現(xiàn)擴展調度程序代碼

編寫擴展調度器程序代碼,根據(jù)實際業(yè)務調度場景編寫預選邏輯、優(yōu)選邏輯:

實現(xiàn)預選接口,入?yún)閟chedulerapi.ExtenderArgs,出參為schedulerapi.ExtenderFilterResult:

實現(xiàn)優(yōu)選接口,入?yún)閟chedulerapi.ExtenderArgs,出參為schedulerapi.HostPriorityList:

暴露http接口:

參考:

https://github.com/ll83744879...

默認調度器部署

由于kubernetes集群內已經(jīng)有了一個名為default-scheduler的默認調度器,為了不影響集群正常調度功能,下面會創(chuàng)建一個名為my-kube-scheduler的調度器,這個調度器和default-scheduler除了啟動參數(shù)不一樣外,鏡像無差別。

1、創(chuàng)建一個名為my-scheduler-config的configmaps,data下的config.yaml文件指定了調度器的一些參數(shù),包括leader選舉,調度算法策略的選擇(指定另一個configmaps),以及指定調度器的名稱為my-kube-scheduler。

相應的創(chuàng)建一個my-scheduler-policy的configmaps,里面指定了選擇哪些預選、優(yōu)選策略,以及外部擴展調度程序的urlPrefix、擴展預選URI、擴展優(yōu)選URI、擴展pod優(yōu)先級搶占URI、擴展bind URI、擴展優(yōu)選算法的權重等。

以保證my-kube-scheduler和擴展調度程序的通信。

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-scheduler-config
  namespace: kube-system
data:
  config.yaml: |
    apiVersion: kubescheduler.config.k8s.io/v1alpha1
    kind: KubeSchedulerConfiguration
    schedulerName: my-kube-scheduler
    algorithmSource:
      policy:
        configMap:
          namespace: kube-system
          name: my-scheduler-policy
    leaderElection:
      leaderElect: false
      lockObjectName: my-kube-scheduler
      lockObjectNamespace: kube-system
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-scheduler-policy
  namespace: kube-system
data:
 policy.cfg : |
  {
    "kind" : "Policy",
    "apiVersion" : "v1",
    "predicates" : [
      {"name" : "PodFitsHostPorts"},
      {"name" : "PodFitsResources"},
      {"name" : "NoDiskConflict"},
      {"name" : "MatchNodeSelector"},
      {"name" : "HostName"}
    ],
    "priorities" : [
      {"name" : "LeastRequestedPriority", "weight" : 1},
      {"name" : "BalancedResourceAllocation", "weight" : 1},
      {"name" : "ServiceSpreadingPriority", "weight" : 1},
      {"name" : "EqualPriority", "weight" : 1}
    ],
    "extenders" : [{
      "urlPrefix": "http://10.168.107.12:80/scheduler",
      "filterVerb": "predicates/always_true",
      "prioritizeVerb": "priorities/zero_score",
      "preemptVerb": "preemption",
      "bindVerb": "",
      "weight": 1,
      "enableHttps": false,
      "nodeCacheCapable": false
    }],
    "hardPodAffinitySymmetricWeight" : 10
  }

2、在my-kube-scheduler yaml文件中將configmaps:my-scheduler-config以文件的形式掛載到容器內/my-scheduler目錄下,并在啟動參數(shù)中指定--config=/my-scheduler/config.yaml,使用和默認調度器一樣的鏡像。

增加掛載:

擴展調度器鏡像制作和部署

1、編譯擴展調度程序my-scheduler-extender鏡像,以下為Dockerfile:

推送my-scheduler-extender鏡像到harbor:

2、創(chuàng)建外部擴展程序my-scheduler-extender的deployment,如下為yaml描述:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-scheduler-extender
  namespace: kube-system
  labels:
    app: my-scheduler-extender
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-scheduler-extender
  template:
    metadata:
      labels:
        app: my-scheduler-extender
    spec:
      containers:
      - name: my-scheduler-extender
        image: 192.168.26.46/k8s-deploy/my-scheduler-extender:v1.0
        imagePullPolicy: Always
        livenessProbe:
          httpGet:
            path: /version
            port: 80
        readinessProbe:
          httpGet:
            path: /version
            port: 80
        ports:
          - containerPort: 80
驗證

查看my-kube-scheduler pod日志,加載到了policy里的extender信息,獲取到了擴展調度器的接口地址:

創(chuàng)建一個nginx的pod,指定schedulerName為my-kube-scheduler:

查看擴展調度器pod日志,發(fā)現(xiàn)默認調度器會調用extender擴展調度器,如下為extender日志打印的入?yún)ⅰ⒊鰠ⅲ?/p>

從而可以通過編寫擴展調度程序,對默認調度器的預選和優(yōu)選算法進行擴展。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/33163.html

相關文章

  • kube-scheduler調度擴展

    摘要:調度擴展自帶了一個默認調度器,其內置了很多節(jié)點預選和優(yōu)選的調度算法,一般調度場景下可以滿足要求。我們就需要對調度器進行擴展,以達到調度適合業(yè)務場景的目的??梢詤⒖脊什捎玫谌N實現(xiàn)擴展調度程序的方案。以保證和擴展調度程序的通信。 kube-scheduler調度擴展 Kubernetes 自帶了一個默認調度器kube-scheduler,其內置了很多節(jié)點預選和優(yōu)選的調度算法,一般調度場景...

    劉德剛 評論0 收藏0
  • kube-scheduler的代碼邏輯和二次開發(fā)

    摘要:代碼的組織結構中,仍然是作為一個放在代碼中,在根目錄下的目錄中,目錄是其編譯入口,目錄是其主要核心代碼。而如果通過指定啟動,參數(shù)中的算法都來自的方法。登記時會提供自己本身包含的兩類算法的集合。 kube-scheduler代碼的組織結構(ver:1.9.2) 1.9中,kube-scheduler仍然是作為一個plugin放在k8s代碼中,在k8s根目錄下的plugin目錄中,cmd/...

    heartFollower 評論0 收藏0
  • Kubernetes 入門基礎

    摘要:我們要學習,就有首先了解的技術范圍基礎理論知識庫等,要學習,肯定要有入門過程,在這個過程中,學習要從易到難,先從基礎學習。組件組件一個集群是由一組被稱為節(jié)點的機器或虛擬機組成,節(jié)點有兩種類型。我們要學習 Kubernetes,就有首先了解 Kubernetes 的技術范圍、基礎理論知識庫等,要學習 Kubernetes,肯定要有入門過程,在這個過程中,學習要從易到難,先從基礎學習。 接...

    myshell 評論0 收藏0
  • 使用 Kubernetes 部署一個記事本項目

    摘要:簡稱,是在年發(fā)布的一個開源項目。網(wǎng)絡要能夠通信,必須部署網(wǎng)絡,是其中一個可選方案。最常使用,可以管理多個副本,并確保按照期望的狀態(tài)運行,底層調用。用于每個最多只運行一個副本的場景。 Kubernetes 簡稱 k8s,是 google 在 2014 年發(fā)布的一個開源項目。 Kubernetes 解決了哪些問題? 真實的生產(chǎn)環(huán)境應用會包含多個容器,而這些容器還很可能會跨越多個服務器主機部...

    null1145 評論0 收藏0
  • 帶著問題學 Kubernetes 架構

    摘要:又因為是谷歌出品的,依賴了很多谷歌自己的鏡像,所以對于國內的同學環(huán)境搭建的難度又增加了一層。 帶著問題學 Kubernetes 架構 摘要:本文屬于原創(chuàng),歡迎轉載,轉載請保留出處:https://github.com/jasonGeng88/blog 打開這篇文章的同學,想必對 docker 都不會陌生。docker 是一種虛擬容器技術,它上手比較簡單,只需在宿主機上起一個 docke...

    Allen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<