Kubernetes中的kube-scheduler組件怎么用

這篇文章給大家介紹Kubernetes中的kube-scheduler組件怎么用,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

專(zhuān)注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)八公山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

Kubernetes作為一個(gè)容器編排調(diào)度引擎,資源調(diào)度是它的最基本也是最重要的功能。當(dāng)開(kāi)發(fā)者部署一個(gè)應(yīng)用時(shí)它運(yùn)行在哪個(gè)節(jié)點(diǎn)?這個(gè)節(jié)點(diǎn)滿不滿足開(kāi)發(fā)的運(yùn)行要求?Kubernetes又是如何進(jìn)行資源調(diào)度的呢?

在Kubernetes中有一個(gè)kube-scheduler組件,該組件運(yùn)行在master節(jié)點(diǎn)上,它主要負(fù)責(zé)pod的調(diào)度。Kube-scheduler監(jiān)聽(tīng)kube-apiserver中是否有還未調(diào)度到node上的pod(即Spec.NodeName為空的Pod),再通過(guò)特定的算法為pod指定分派node運(yùn)行。如果分配失敗,則將該pod放置調(diào)度隊(duì)列尾部以重新調(diào)度。調(diào)度主要分為幾個(gè)部分:首先是預(yù)選過(guò)程,過(guò)濾不滿足Pod要求的節(jié)點(diǎn)。然后是優(yōu)選過(guò)程,對(duì)通過(guò)要求的節(jié)點(diǎn)進(jìn)行優(yōu)先級(jí)排序,最后選擇優(yōu)先級(jí)最高的節(jié)點(diǎn)分配,其中涉及到的兩個(gè)關(guān)鍵點(diǎn)是過(guò)濾和優(yōu)先級(jí)評(píng)定的算法。調(diào)度器使用一組規(guī)則過(guò)濾不符合要求的節(jié)點(diǎn),其中包括設(shè)置了資源的request和指定了Nodename或者其他親和性設(shè)置等等。優(yōu)先級(jí)評(píng)定將過(guò)濾得到的節(jié)點(diǎn)列表進(jìn)行打分,調(diào)度器考慮一些整體的優(yōu)化策略,比如將Deployment控制的多個(gè)副本集分配到不同節(jié)點(diǎn)上等。

Kubernetes中的kube-scheduler組件怎么用

資源請(qǐng)求及限制對(duì)pod調(diào)度的影響

在部署應(yīng)用時(shí),開(kāi)發(fā)者會(huì)考慮到使這個(gè)應(yīng)用運(yùn)行起來(lái)需要多少的內(nèi)存和CPU資源的使用量,這樣才能判斷應(yīng)將他運(yùn)行在哪個(gè)節(jié)點(diǎn)上。在部署文件resource屬性中添加requests字段用于說(shuō)明運(yùn)行該容器所需的最少資源,當(dāng)調(diào)度器開(kāi)始調(diào)度該P(yáng)od時(shí),調(diào)度程序確保對(duì)于每種資源類(lèi)型,計(jì)劃容器的資源請(qǐng)求總和必須小于節(jié)點(diǎn)的容量才能分配該節(jié)點(diǎn)運(yùn)行Pod,resource屬性中添加limits字段用于限制容器運(yùn)行時(shí)所獲得的最大資源。如果該容器超出其內(nèi)存限制,則可能被終止。 如果該容器可以重新啟動(dòng),kubelet會(huì)將它重新啟動(dòng)。如果調(diào)度器找不到合適的節(jié)點(diǎn)運(yùn)行Pod時(shí),就會(huì)產(chǎn)生調(diào)度失敗事件,調(diào)度器會(huì)將Pod放置調(diào)度隊(duì)列以循環(huán)調(diào)度,直到調(diào)度完成。

在下面例子中,運(yùn)行一個(gè)nginx Pod,資源請(qǐng)求了256Mi的內(nèi)存和100m的CPU,調(diào)度器將判斷哪個(gè)節(jié)點(diǎn)還剩余這么多的資源,尋找到了之后就會(huì)將這個(gè)Pod調(diào)度上去。同時(shí)也設(shè)置了512Mi的內(nèi)存和300m的CPU的使用限制,如果該P(yáng)od運(yùn)行之后超出了這一限制就將被重啟甚至被驅(qū)逐。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    resources:
      requests:
        memory: "256Mi"
        cpu: "100m"
      limits:
        memory: "512Mi"
        cpu: "300m"

查看調(diào)度事件events

在部署應(yīng)用后,可以使用 kubectl describe 命令進(jìn)行查看Pod的調(diào)度事件,下面是一個(gè)coreDNS被成功調(diào)度到node3運(yùn)行的事件記錄。

$ kubectl describe po coredns-5679d9cd77-d6jp6 -n kube-system
...
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  29s   default-scheduler  Successfully assigned kube-system/coredns-5679d9cd77-d6jp6 to node3
  Normal  Pulled     28s   kubelet, node3     Container image "grc.io/kubernetes/coredns:1.2.2" already present on machine
  Normal  Created    28s   kubelet, node3     Created container
  Normal  Started    28s   kubelet, node3     Started container

下面是一個(gè)coredns被調(diào)度失敗的事件記錄,根據(jù)記錄顯示不可調(diào)度的原因是沒(méi)有節(jié)點(diǎn)滿足該P(yáng)od的內(nèi)存請(qǐng)求。

$ kubectl describe po coredns-8447874846-5hpmz -n kube-system
...
Events:
  Type     Reason            Age                From               Message
  ----     ------            ----               ----               -------
  Warning  FailedScheduling  22s (x3 over 24s)  default-scheduler  0/3 nodes are available: 3 Insufficient memory.

label選擇器對(duì)pod調(diào)度的影響

例如開(kāi)發(fā)者需要部署一個(gè)ES集群,由于ES對(duì)磁盤(pán)有較高的要求,而集群中只有一部分節(jié)點(diǎn)有SSD磁盤(pán),那么就需要將標(biāo)記一下帶有SSD磁盤(pán)的節(jié)點(diǎn)即給這些節(jié)點(diǎn)打上Lable,讓ES的pod只能運(yùn)行在帶這些標(biāo)記的節(jié)點(diǎn)上。

Lable是附著在K8S對(duì)象(如Pod、Service等)上的鍵值對(duì)。它可以在創(chuàng)建對(duì)象的時(shí)候指定,也可以在對(duì)象創(chuàng)建后隨時(shí)指定。Kubernetes最終將對(duì)labels最終索引和反向索引用來(lái)優(yōu)化查詢(xún)和watch,在UI和命令行中會(huì)對(duì)它們排序。通俗的說(shuō),就是為K8S對(duì)象打上各種標(biāo)簽,方便選擇和調(diào)度。

關(guān)于Kubernetes中的kube-scheduler組件怎么用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享標(biāo)題:Kubernetes中的kube-scheduler組件怎么用
本文路徑:http://muchs.cn/article48/joochp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、微信公眾號(hào)用戶體驗(yàn)、網(wǎng)站設(shè)計(jì)、靜態(tài)網(wǎng)站、小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站