在Kubernetes中有一個(gè)最復(fù)雜的調(diào)度器可以處理pod的分配策略?;谠趐od規(guī)范中所提及的資源需求,Kubernetes調(diào)度器會(huì)自動(dòng)選擇最合適的節(jié)點(diǎn)來(lái)運(yùn)行pod。
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比澤庫(kù)網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式澤庫(kù)網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋澤庫(kù)地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
但在許多實(shí)際場(chǎng)景下,我們必須干預(yù)調(diào)度過(guò)程才能在pod和一個(gè)節(jié)點(diǎn)或兩個(gè)特定pod之間進(jìn)行匹配。因此,Kubernetes中有一種十分強(qiáng)大的機(jī)制來(lái)管理及控制pod的分配邏輯。
那么,本文將探索影響Kubernetes中默認(rèn)調(diào)度決定的關(guān)鍵特性。
Kubernetes一向以來(lái)都是依賴label和selector來(lái)對(duì)資源進(jìn)行分組。例如,某服務(wù)使用selector來(lái)過(guò)濾具有特定label的pod,這些label可以選擇性地接收流量。Label和selector可以使用簡(jiǎn)單的基于等式的條件(=and!=)來(lái)評(píng)估規(guī)則。通過(guò)nodeSelector的特性(即強(qiáng)制將pod調(diào)度到特定節(jié)點(diǎn)上),可以將這一技術(shù)擴(kuò)展到節(jié)點(diǎn)中。
此外,label和selector開始支持基于集合的query,它帶來(lái)了基于in、notin和exist運(yùn)算符的高級(jí)過(guò)濾技術(shù)。與基于等式的需求相結(jié)合,基于集合的需求提供了復(fù)雜的技術(shù)來(lái)過(guò)濾Kubernetes中的資源。
節(jié)點(diǎn)親和性/反親和性使用label和annotation的基于表達(dá)集的過(guò)濾技術(shù)來(lái)定義特定節(jié)點(diǎn)上的pod的分配邏輯。Annotation可以提供不會(huì)暴露到selector的其他元數(shù)據(jù),這意味著用于annotation的鍵不會(huì)包含在query和過(guò)濾資源中。但是節(jié)點(diǎn)親和性可以在表達(dá)式中使用annotation。反親和性可以確保pod不會(huì)被強(qiáng)制調(diào)度到與規(guī)則匹配的節(jié)點(diǎn)上。
除了能夠在query中使用復(fù)雜的邏輯之外,節(jié)點(diǎn)親和性/反親和性能夠?yàn)榉峙溥壿嫃?qiáng)制施加硬性和軟性規(guī)則。硬性規(guī)則將會(huì)執(zhí)行嚴(yán)格的策略,可能會(huì)阻止將pod分配到不符合條件的節(jié)點(diǎn)上。而軟性規(guī)則則會(huì)首先確認(rèn)節(jié)點(diǎn)是否與特定的條件相匹配,如果它們不匹配,它將使用默認(rèn)的調(diào)度模式來(lái)分配Pod。表達(dá)式requiredDuringSchedulingIgnoredDuringExecution和preferredDuringSchedulingIgnoredDuringExecution將會(huì)分別執(zhí)行硬性規(guī)則和軟性規(guī)則。
以下是在硬性和軟性規(guī)則下使用節(jié)點(diǎn)親和性/反親和性的示例:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "failure-domain.beta.kubernetes.io/zone"
operator: In
values: ["asia-south2-a"]
以上規(guī)則將指示Kubernetes調(diào)度器嘗試將Pod分配到在GKE集群的asia-south2-a區(qū)域中運(yùn)行的節(jié)點(diǎn)上。如果沒(méi)有可用的節(jié)點(diǎn),則調(diào)度器將會(huì)直接應(yīng)用標(biāo)準(zhǔn)的分配邏輯。
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "failure-domain.beta.kubernetes.io/zone"
operator: NotIn
values: ["asia-south2-a"]
以上規(guī)則通過(guò)使用NotIn運(yùn)算符來(lái)強(qiáng)制執(zhí)行反親和性。這是一個(gè)硬性規(guī)則,它能夠確保沒(méi)有pod被分配到運(yùn)行在asia-south2-a空間中的GKE節(jié)點(diǎn)。
盡管節(jié)點(diǎn)親和性/反親和性能夠處理pod和節(jié)點(diǎn)之間的匹配,但是有些場(chǎng)景下我們需要確保pod在一起運(yùn)行或在相同的節(jié)點(diǎn)上不運(yùn)行2個(gè)pod。Pod親和性/反親和性將幫助我們應(yīng)用強(qiáng)制實(shí)施粒度分配邏輯。
與節(jié)點(diǎn)親和性/反親和性中的表達(dá)式類似,pod親和性/反親和性也能夠通過(guò)requiredDuringSchedulingIgnoredDuringExecution和preferredDuringSchedulingIgnoredDuringExecution強(qiáng)制實(shí)施硬性以及軟性規(guī)則。還可以將節(jié)點(diǎn)親和性與pod親和性進(jìn)行混合和匹配,以定義復(fù)雜的分配邏輯。
為了能夠更好地理解概念,想象一下我們有一個(gè)web和緩存deployment,其中三個(gè)副本在一個(gè)3節(jié)點(diǎn)的集群中運(yùn)行。為了確保在web和緩存pod之間低延遲,我們想要在用一個(gè)節(jié)點(diǎn)上運(yùn)行它們。與此同時(shí),我們不想在相同的節(jié)點(diǎn)上運(yùn)行超過(guò)1個(gè)緩存pod。基于此情況,我們需要實(shí)施以下策略:每個(gè)節(jié)點(diǎn)僅運(yùn)行1個(gè)且只有1個(gè)緩存Pod的web pod。
首先,我們將使用反親和性規(guī)則來(lái)部署緩存,它將阻止超過(guò)1個(gè)pod運(yùn)行在1個(gè)節(jié)點(diǎn)上:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- redis
topologyKey: "kubernetes.io/hostname"
topoloyKey使用附加到節(jié)點(diǎn)的默認(rèn)label動(dòng)態(tài)過(guò)濾節(jié)點(diǎn)的名稱。請(qǐng)注意,我們使用podAntiAffinity表達(dá)式和in運(yùn)算符來(lái)應(yīng)用規(guī)則的方式。
假設(shè)在集群的某個(gè)節(jié)點(diǎn)上安排了3個(gè)pod緩存,那么現(xiàn)在我們想要在與緩存Pod相同的節(jié)點(diǎn)上部署web pod。我們將使用podAffinity來(lái)實(shí)施這一邏輯:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- redis
topologyKey: "kubernetes.io/hostname"
以上代碼表明Kubernetes調(diào)度器要尋找有緩存Pod的節(jié)點(diǎn)并部署web pod。
除了節(jié)點(diǎn)和pod的親和性/反親和性之外,我們還能使用taints和tolerations來(lái)定義自定義分配邏輯。此外,我們還能寫自定義調(diào)度程序,它可以從默認(rèn)的調(diào)度程序中接管調(diào)度邏輯。
名稱欄目:影響K8SPod分配和調(diào)度策略的兩大關(guān)鍵特性
本文鏈接:http://jinyejixie.com/article6/gcioog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、品牌網(wǎng)站設(shè)計(jì)、Google、建站公司、電子商務(wù)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(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)