国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Kubernetes 調(diào)度器淺析

ranwu / 1237人閱讀

摘要:與已運(yùn)行相關(guān)的過(guò)濾規(guī)則負(fù)責(zé)檢查待調(diào)度與上已有之間的親和性關(guān)系。并且每個(gè)打分函數(shù)都可以配置對(duì)應(yīng)的權(quán)重值,下面介紹調(diào)度器策略配置時(shí),也會(huì)涉及權(quán)重值的配置。默認(rèn)權(quán)重值是,如果覺得某個(gè)打分函數(shù)特別重要,便可以加大該權(quán)重值。

一、概述

Kubernetes 是 Google 開源的容器集群管理系統(tǒng)(谷歌內(nèi)部:Borg),而今天要介紹的 kube-scheduler 是 k8s 系統(tǒng)的核心組件之一,其主要職責(zé)就是通過(guò)自身的調(diào)度算法,為新創(chuàng)建的 Pod 尋找一個(gè)最合適的 Node。
主要包含如下幾個(gè)步驟:

通過(guò)一組叫做謂詞 predicates 的過(guò)濾算法,先挑出滿足條件的 Node;

通過(guò)一組叫做優(yōu)先級(jí) priorities 的打分算法,來(lái)給上一步符合條件的每個(gè) Node 進(jìn)行打分排名;

最終選擇得分最高的節(jié)點(diǎn),當(dāng)然如果得分一樣就隨機(jī)一個(gè)節(jié)點(diǎn),填回 Pod 的 spec.nodeName 字段。

官方流程圖如下:

For given pod:

    +---------------------------------------------+
    |               Schedulable nodes:            |
    |                                             |
    | +--------+    +--------+      +--------+    |
    | | node 1 |    | node 2 |      | node 3 |    |
    | +--------+    +--------+      +--------+    |
    |                                             |
    +-------------------+-------------------------+
                        |
                        |
                        v
    +-------------------+-------------------------+

    Pred. filters: node 3 doesn"t have enough resource

    +-------------------+-------------------------+
                        |
                        |
                        v
    +-------------------+-------------------------+
    |             remaining nodes:                |
    |   +--------+                 +--------+     |
    |   | node 1 |                 | node 2 |     |
    |   +--------+                 +--------+     |
    |                                             |
    +-------------------+-------------------------+
                        |
                        |
                        v
    +-------------------+-------------------------+

    Priority function:    node 1: p=2
                          node 2: p=5

    +-------------------+-------------------------+
                        |
                        |
                        v
            select max{node priority} = node 2

scheduler 的工作看似很簡(jiǎn)單,但其實(shí)不然。考慮的問(wèn)題非常多,比如要保證每個(gè)節(jié)點(diǎn)被公平調(diào)度,提高資源利用率,提高 pod 調(diào)度效率,提升調(diào)度器擴(kuò)展能力等等。
可涉及的內(nèi)容非常多,接下來(lái)會(huì)圍繞兩個(gè)核心步驟對(duì) k8s 的 默認(rèn)調(diào)度策略 深入了解。

參考 Kubernetes 版本: v1.12
二、Predicates

Predicates 在調(diào)度過(guò)程中的作用就是先進(jìn)行過(guò)濾,過(guò)濾掉所有不符合條件的節(jié)點(diǎn)后,剩下的所有節(jié)點(diǎn)就都是可以運(yùn)行帶調(diào)度 Pod。

Predicates 的可以分為如下四類:

GeneralPredicates:負(fù)責(zé)最基礎(chǔ)的調(diào)度策略,比如 PodFitsResources 計(jì)算宿主機(jī)資源是否夠用。

與 Volume 相關(guān)的過(guò)濾規(guī)則:負(fù)責(zé)與容器持久化 Volume 相關(guān)的調(diào)度策略。

與宿主機(jī)相關(guān)的過(guò)濾規(guī)則:負(fù)責(zé)考察待調(diào)度 Pod 是否滿足 Node 本身的一些條件。

與已運(yùn)行 Pod 相關(guān)的過(guò)濾規(guī)則:負(fù)責(zé)檢查待調(diào)度 Pod 與 Node 上已有 Pod 之間的親和性關(guān)系。

具體的 Predicates 默認(rèn)策略,可以參考: 默認(rèn)調(diào)度策略

當(dāng)開始調(diào)度一個(gè) Pod 的時(shí)候,調(diào)度器會(huì)同時(shí)開啟多個(gè)協(xié)程并發(fā)的進(jìn)行 Node Predicates 過(guò)濾,最后返回一個(gè)可以運(yùn)行 Pod 的節(jié)點(diǎn)列表。每個(gè)協(xié)程都是按照固定的順序進(jìn)行計(jì)算過(guò)濾的。

接下來(lái),我們看下四大類具體運(yùn)行的調(diào)度策略內(nèi)容。

1. GeneralPredicates

看字面意思就知道 GeneralPredicates 負(fù)責(zé)的是最基礎(chǔ)的調(diào)度策略,其包含的具體策略如下:

PodFitsResources: 計(jì)算宿主機(jī)的 CPU、內(nèi)存、擴(kuò)展資源(如 GPU)等是否夠用。

PodFitsHost: 檢查宿主機(jī)的名字是否跟 Pod 的 spec.nodeName 匹配。

PodFitsHostPorts: 檢查 Pod 申請(qǐng)的宿主機(jī)端口有沒(méi)有沖突。

PodMatchNodeSelector: 檢查節(jié)點(diǎn)是否能匹配 Pod 的 nodeSelector 和 nodeAffinity。

因?yàn)?GeneralPredicates 是最基礎(chǔ)的調(diào)度策略,所以該接口也會(huì)被別的組件直接調(diào)用,比如 kubelet、daemonSet controller。kubelet 在啟動(dòng) pod 之前,還會(huì)再執(zhí)行一遍 GeneralPredicates,用于二次確認(rèn)。

2. 與 Volume 相關(guān)的過(guò)濾規(guī)則

不廢話就直接列舉具體的策略了:

NoDiskConflict:檢查該節(jié)點(diǎn)上所有的 Pods 是否與待調(diào)度的 Pod 的 Volume 有沖突,比如 AWS、GCE 的 Volume 是不允許被兩個(gè) Pod 同時(shí)使用的。

VolumeZonePredicate:檢查 Pod Volume 的 zone 標(biāo)簽是否與節(jié)點(diǎn)的 zone 標(biāo)簽匹配。如果 Node 沒(méi)有 zone 標(biāo)簽則認(rèn)定為匹配。

MaxPDVolumeCountPredicate:檢查節(jié)點(diǎn)上某種類型的 Volume 是否已經(jīng)超過(guò)指定數(shù)目。

CSIMaxVolumeLimitPredicate:檢查 csi volume 相關(guān)的限制

VolumeBindingPredicate:檢查 Pod 對(duì)應(yīng)的 Local PV 的 nodeAffinity 字段,是否跟某個(gè)節(jié)點(diǎn)的標(biāo)簽相匹配。如果該 Pod PVC 還沒(méi)有綁定 PV 的話,則調(diào)度器還要負(fù)責(zé)檢查所有待綁定的 PV,且該 PV 的 nodeAffinity 是否與節(jié)點(diǎn)標(biāo)簽匹配。

3. 與宿主機(jī)相關(guān)的過(guò)濾規(guī)則

這些規(guī)則主要考察待調(diào)度的 Pod 是否滿足 Node 本身的一些條件。
具體的策略如下:

NodeConditionPredicate:檢查 Node 是否還未準(zhǔn)備好或者處于NodeOutOfDisk、NodeNetworkUnavailable 狀態(tài),又或者 Node spec.Unschedulable 設(shè)置為 true,那該節(jié)點(diǎn)都將無(wú)法被調(diào)度。

PodToleratesNodeTaints:檢查 Node 的 taint(污點(diǎn))機(jī)制。只有當(dāng) Pod 的 Toleration 與 Node 的 Taint 匹配時(shí),Pod 才能調(diào)度到該節(jié)點(diǎn)上。

NodeMemoryPressurePredicate:檢查當(dāng)前節(jié)點(diǎn)的內(nèi)存是否已經(jīng)不夠使用。

NodeDiskPressurePredicate:檢查當(dāng)前節(jié)點(diǎn)的磁盤是否已經(jīng)不夠使用。

NodePIDPressurePredicate:檢查當(dāng)前節(jié)點(diǎn)的 PID 是否已經(jīng)不夠使用。

4. 與已運(yùn)行 Pod 相關(guān)的過(guò)濾規(guī)則

該規(guī)則主要就是 PodAffinityPredicate,用于檢查待調(diào)度 Pod 與 Node 上已有的 Pod 之間的親和性和反親和性關(guān)系。
具體的親和性相關(guān)的調(diào)度,后面會(huì)多帶帶拿一篇文章進(jìn)行介紹。

三、Priorities

完成了前一個(gè)階段的節(jié)點(diǎn) “過(guò)濾” 之后,便需要通過(guò) Priorities 為這些節(jié)點(diǎn)打分,選擇得分最高的節(jié)點(diǎn),作為調(diào)度對(duì)象。
打分函數(shù)很多,總得分可以參考:
總分 = (權(quán)重1 * 打分函數(shù)1) + (權(quán)重2 * 打分函數(shù)2) + … + (權(quán)重n * 打分函數(shù)n)
每一次打分的范圍是 0 — 10 分。10 表示非常合適,0 表示非常不合適。
并且每個(gè)打分函數(shù)都可以配置對(duì)應(yīng)的權(quán)重值,下面介紹 調(diào)度器策略配置 時(shí),也會(huì)涉及權(quán)重值的配置。默認(rèn)權(quán)重值是 1,如果覺得某個(gè)打分函數(shù)特別重要,便可以加大該權(quán)重值。

具體的 Priorities 默認(rèn)策略可以參考: defaultPriorities 。

Priorities 最常用到的一個(gè)打分規(guī)則是 LeastRequestedPriority, 該算法用于選出空閑資源(cpu & memory)最多的宿主機(jī)。

還有一個(gè)常見的是 BalancedResourceAllocation,該規(guī)則主要目的是資源平衡。在所有節(jié)點(diǎn)里選擇各種資源分配最均衡的節(jié)點(diǎn),避免出現(xiàn)某些節(jié)點(diǎn) CPU 被大量分配,但是 Memory 大量剩余的情況。

此外,還有 InterPodAffinityPriorityNodeAffinityPriorityTaintTolerationPriority,與親和性與污點(diǎn)調(diào)度有關(guān),后面會(huì)有多帶帶的文章進(jìn)行介紹。這里表示節(jié)點(diǎn)滿足的規(guī)則越多,那得分就越高。

在 K8S v1.12 版本還引入了一個(gè)調(diào)度策略,即 ImageLocalityPriority。該策略主要目的是優(yōu)先選擇那些已經(jīng)存有 Pod 所需 image 的節(jié)點(diǎn),可以避免實(shí)際運(yùn)行 Pod 時(shí),再去下載 image。

注意: pod 運(yùn)行時(shí)是否會(huì)下載 image,還跟 Pod ImagePullPolicy 配置有關(guān)。

可以看到 k8s scheduler 完成一次調(diào)度所需的信息非常之多。所以在實(shí)際的調(diào)度過(guò)程中,大量的信息都事先已經(jīng)緩存,提高了 Pod 的調(diào)度效率。

四、調(diào)度策略配置

Kubernetes 調(diào)度器有默認(rèn)的調(diào)度策略,具體可以參考 default 。當(dāng)然用戶也可以修改調(diào)度策略,可以通過(guò)命令行參數(shù) policy-config-file 指定一個(gè) JSON 文件來(lái)描述哪些 predicates 和 priorities 在啟動(dòng) k8s 時(shí)被使用, 通過(guò)這個(gè)參數(shù)調(diào)度就能使用管理者定義的策略了。
示例如下:

{
"kind" : "Policy",
"apiVersion" : "v1",
"predicates" : [
    {"name" : "PodFitsHostPorts"},
    {"name" : "PodFitsResources"},
    {"name" : "NoDiskConflict"},
    {"name" : "NoVolumeZoneConflict"},
    {"name" : "MatchNodeSelector"},
    {"name" : "HostName"}
    ],
"priorities" : [
    {"name" : "LeastRequestedPriority", "weight" : 1},
    {"name" : "BalancedResourceAllocation", "weight" : 1},
    {"name" : "ServiceSpreadingPriority", "weight" : 1},
    {"name" : "EqualPriority", "weight" : 1}
    ],
"hardPodAffinitySymmetricWeight" : 10,
"alwaysCheckAllPredicates" : false
}
五、自定義調(diào)度器

前面提到了調(diào)度器的擴(kuò)展能力,除了使用 k8s 自帶的調(diào)度器,你也可以編寫自己的調(diào)度器。通過(guò)修改 Pod 的 spec.schedulername 參數(shù)來(lái)指定調(diào)度器的名字。

參考資料

The Kubernetes Scheduler

Scheduler Algorithm in Kubernetes

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/32908.html

相關(guān)文章

  • Kubernetes 親和性調(diào)度

    摘要:換句話說(shuō),親和性選擇節(jié)點(diǎn)僅在調(diào)度時(shí)起作用。先創(chuàng)建集群反親和性打散各個(gè)副本再部署服務(wù),需要打散并且與服務(wù)共存,配置如下注意需要進(jìn)行大量處理,所以會(huì)明顯減慢大型集群的調(diào)度時(shí)間,不建議在大于幾百個(gè)節(jié)點(diǎn)的集群中使用該功能。 一、概述 前一篇文章 Kubernetes 調(diào)度器淺析,大致講述了調(diào)度器的工作原理及相關(guān)調(diào)度策略。這一章會(huì)繼續(xù)深入調(diào)度器,介紹下親和性調(diào)度。 Kubernetes 支持限制...

    GT 評(píng)論0 收藏0
  • 淺析 Kubernetes原生NetworkPolicy 網(wǎng)絡(luò)策略,讓更安全的容運(yùn)行環(huán)境唾手可得

    摘要:本文將主要分析原生的網(wǎng)絡(luò)策略。筆者認(rèn)為這個(gè)問(wèn)題主要是因?yàn)槭褂谜卟涣私饩W(wǎng)絡(luò)策略的省缺行為。可選字段,字符串,策略規(guī)則類型,表示該網(wǎng)絡(luò)策略中包含哪些類型的策略,可選為或。互相間為或的關(guān)系,滿足其中一條則放行。標(biāo)準(zhǔn),除了指定的放行外其他都禁止。 k8s中的網(wǎng)絡(luò)策略主要分為原生 NetworkPolicy 和第三方網(wǎng)絡(luò)插件提供的網(wǎng)絡(luò)策略。本文將主要分析原生Networkpolicy的網(wǎng)絡(luò)策略。...

    jsdt 評(píng)論0 收藏0
  • Kubernetes編排的三大支柱

    摘要:在這種情況下,以防干擾其他集群租戶,調(diào)度器可能會(huì)考慮將作為驅(qū)逐的候選對(duì)象。其結(jié)果是負(fù)載均衡和調(diào)度之間交互作用。 每當(dāng)談及Kubernetes,我們經(jīng)常聽到諸如資源管理、調(diào)度和負(fù)載均衡等術(shù)語(yǔ)。雖然Kubernetes提供了許多功能,但更關(guān)鍵的還是要了解這些概念,只有這樣才能更好地理解如何放置、管理并恢復(fù)工作負(fù)載。在這篇文章中,我提供了每個(gè)功能的概述,并解釋了它們是如何在Kubernete...

    劉厚水 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<