影響K8SPod分配和調(diào)度策略的兩大關(guān)鍵特性

在Kubernetes中有一個(gè)最復(fù)雜的調(diào)度器可以處理pod的分配策略。基于在pod規(guī)范中所提及的資源需求,Kubernetes調(diào)度器會(huì)自動(dòng)選擇最合適的節(jié)點(diǎn)來運(yùn)行pod。

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比澤庫網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式澤庫網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋澤庫地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

 
但在許多實(shí)際場景下,我們必須干預(yù)調(diào)度過程才能在pod和一個(gè)節(jié)點(diǎn)或兩個(gè)特定pod之間進(jìn)行匹配。因此,Kubernetes中有一種十分強(qiáng)大的機(jī)制來管理及控制pod的分配邏輯。

 

那么,本文將探索影響Kubernetes中默認(rèn)調(diào)度決定的關(guān)鍵特性。
 

節(jié)點(diǎn)親和性/反親和性

 

Kubernetes一向以來都是依賴label和selector來對(duì)資源進(jìn)行分組。例如,某服務(wù)使用selector來過濾具有特定label的pod,這些label可以選擇性地接收流量。Label和selector可以使用簡單的基于等式的條件(=and!=)來評(píng)估規(guī)則。通過nodeSelector的特性(即強(qiáng)制將pod調(diào)度到特定節(jié)點(diǎn)上),可以將這一技術(shù)擴(kuò)展到節(jié)點(diǎn)中。
 
影響K8S Pod分配和調(diào)度策略的兩大關(guān)鍵特性
 
此外,label和selector開始支持基于集合的query,它帶來了基于in、notin和exist運(yùn)算符的高級(jí)過濾技術(shù)。與基于等式的需求相結(jié)合,基于集合的需求提供了復(fù)雜的技術(shù)來過濾Kubernetes中的資源。

 

節(jié)點(diǎn)親和性/反親和性使用label和annotation的基于表達(dá)集的過濾技術(shù)來定義特定節(jié)點(diǎn)上的pod的分配邏輯。Annotation可以提供不會(huì)暴露到selector的其他元數(shù)據(jù),這意味著用于annotation的鍵不會(huì)包含在query和過濾資源中。但是節(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)度模式來分配Pod。表達(dá)式requiredDuringSchedulingIgnoredDuringExecutionpreferredDuringSchedulingIgnoredDuringExecution將會(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)上。如果沒有可用的節(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ī)則通過使用NotIn運(yùn)算符來強(qiáng)制執(zhí)行反親和性。這是一個(gè)硬性規(guī)則,它能夠確保沒有pod被分配到運(yùn)行在asia-south2-a空間中的GKE節(jié)點(diǎn)。
 

Pod親和性/反親和性

 

盡管節(jié)點(diǎn)親和性/反親和性能夠處理pod和節(jié)點(diǎn)之間的匹配,但是有些場景下我們需要確保pod在一起運(yùn)行或在相同的節(jié)點(diǎn)上不運(yùn)行2個(gè)pod。Pod親和性/反親和性將幫助我們應(yīng)用強(qiáng)制實(shí)施粒度分配邏輯。

 

與節(jié)點(diǎn)親和性/反親和性中的表達(dá)式類似,pod親和性/反親和性也能夠通過requiredDuringSchedulingIgnoredDuringExecutionpreferredDuringSchedulingIgnoredDuringExecution強(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)行超過1個(gè)緩存pod?;诖饲闆r,我們需要實(shí)施以下策略:每個(gè)節(jié)點(diǎn)僅運(yùn)行1個(gè)且只有1個(gè)緩存Pod的web pod。

 

首先,我們將使用反親和性規(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)過濾節(jié)點(diǎn)的名稱。請注意,我們使用podAntiAffinity表達(dá)式和in運(yùn)算符來應(yīng)用規(guī)則的方式。
 

假設(shè)在集群的某個(gè)節(jié)點(diǎn)上安排了3個(gè)pod緩存,那么現(xiàn)在我們想要在與緩存Pod相同的節(jié)點(diǎn)上部署web pod。我們將使用podAffinity來實(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來定義自定義分配邏輯。此外,我們還能寫自定義調(diào)度程序,它可以從默認(rèn)的調(diào)度程序中接管調(diào)度邏輯。

名稱欄目:影響K8SPod分配和調(diào)度策略的兩大關(guān)鍵特性
本文鏈接:http://www.muchs.cn/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)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站

網(wǎng)站設(shè)計(jì)公司知識(shí)