kubernetes 高級調(diào)度策略

1、選擇節(jié)點(diǎn)(nodeSelector)

nodeSelector是目前最為簡單的一種pod運(yùn)行時(shí)調(diào)度限制,目前在Kubernetes1.7.x及以下版本可用。Pod.spec.nodeSelector通過kubernetes的label-selector機(jī)制選擇節(jié)點(diǎn),由調(diào)度器調(diào)度策略匹配label,而后調(diào)度pod到目標(biāo)節(jié)點(diǎn),該匹配規(guī)則屬于強(qiáng)制約束。

kubectl label node node1 disktype=ssd

apiVersion: v1

kind: Pod

metadata:

name: nginx

labels:

env: test

spec:

containers:- name: nginx

image: nginx

imagePullPolicy: IfNotPresent

nodeSelector:

disktype: ssd

給node節(jié)點(diǎn)設(shè)置label,然后在pod 啟動(dòng)yaml文件中通過nodeSelector選擇標(biāo)簽選擇對應(yīng)label即可。

2、親和性(Affinity)與非親和性(anti-affinity)

前面提及的nodeSelector,其僅以一種非常簡單的方式、即label強(qiáng)制限制pod調(diào)度到指定節(jié)點(diǎn)。而親和性(Affinity)與非親和性(anti-affinity)則更加靈活的指定pod調(diào)度到預(yù)期節(jié)點(diǎn)上,相比nodeSelector,Affinity與anti-affinity優(yōu)勢體現(xiàn)在:

(1)、表述語法更加多樣化,不再僅受限于強(qiáng)制約束與匹配。

(2)、調(diào)度規(guī)則不再是強(qiáng)制約束(hard),取而代之的是軟限(soft)或偏好(preference)。

(3)、指定pod可以和哪些pod部署在同一個(gè)/不同拓?fù)浣Y(jié)構(gòu)下。

親和性主要分為3種類型:node affinity與inter-pod affinity/anti-affinity,下文會進(jìn)行詳細(xì)說明。

節(jié)點(diǎn)親和性(Node affinity)

Node affinity在Kubernetes 1.2做為alpha引入,其涵蓋了nodeSelector功能,主要分為requiredDuringSchedulingIgnoredDuringExecution 與 preferredDuringSchedulingIgnoredDuringExecution2種類型。前者可認(rèn)為一種強(qiáng)制限制,如果 Node 的標(biāo)簽發(fā)生了變化導(dǎo)致其沒有符合 Pod 的調(diào)度要求節(jié)點(diǎn),那么pod調(diào)度就會失敗。而后者可認(rèn)為理解為軟限或偏好,同樣如果 Node 的標(biāo)簽發(fā)生了變化導(dǎo)致其不再符合 pod 的調(diào)度要求,pod 依然會調(diào)度運(yùn)行。

$ kubectl label nodes node1 cpu=high

node "node1" labeled

$??kubectl label nodes?node1 cpu=mid

node "node1" labeled

$??kubectl label nodes?node1 cpu=low

node "node1" labeled

apiVersion: v1

kind: Pod

metadata:

name: nginx

labels:

env: test

spec:

affinity:

nodeAffinity:

??requiredDuringSchedulingIgnoredDuringExecution:

????nodeSelectorTerms:

????- matchExpressions:

??????- key: role

????????operator: NotIn

????????values:

????????- master

??preferredDuringSchedulingIgnoredDuringExecution:

??- weight: 1

????preference:

??????matchExpressions:

??????- key: cpu

????????operator: In

????????values:

????????- high

containers:- name: nginx

image: nginx

imagePullPolicy: IfNotPresent

pod親和性(Inter-pod affinity)與反親和性(anti-affinity)

inter-pod affinity與anti-affinity由Kubernetes 1.4引入,當(dāng)前處于beta階段,其中podAffinity用于調(diào)度pod可以和哪些pod部署在同一拓?fù)浣Y(jié)構(gòu)之下。而podAntiAffinity相反,其用于規(guī)定pod不可以和哪些pod部署在同一拓?fù)浣Y(jié)構(gòu)下。通過pod affinity與anti-affinity來解決pod和pod之間的關(guān)系。

與Node affinity類似,pod affinity與anti-affinity同樣分為requiredDuringSchedulingIgnoredDuringExecution and preferredDuringSchedulingIgnoredDuringExecution等2種類型,前者被認(rèn)為是強(qiáng)制約束,而后者后者可認(rèn)為理解軟限(soft)或偏好(preference)。

spec:

replicas: 1template:

metadata:

??labels:

????app: is

spec:

??affinity:

????podAffinity:

??????requiredDuringSchedulingIgnoredDuringExecution:

??????- labelSelector:

??????????matchExpressions:

??????????- key: app

????????????operator: NotIn

????????????values:

????????????- solr?? ??? ??? ??? ??? ??? ??? ?? ? --不親和pod? solr,不處于同一臺機(jī)器

????????topologyKey: kubernetes.io/hostname

????podAntiAffinity:

??????preferredDuringSchedulingIgnoredDuringExecution:

??????- weight: 1

????????podAffinityTerm:

??????????labelSelector:

????????????matchExpressions:

????????????- key: app

??????????????operator: In

??????????????values:

??????????????- oltp?? ??? ??? ??? ??? ??? ?? ? --親和pod oltp,會處于同一臺機(jī)器

? ? ? ? ?topologyKey: beta.kubernetes.io/os

3、污點(diǎn)(Taints)與容忍(tolerations)

對于Node affinity,無論是強(qiáng)制約束(hard)或偏好(preference)方式,都是調(diào)度pod到預(yù)期節(jié)點(diǎn)上,而Taints恰好與之相反,如果一個(gè)節(jié)點(diǎn)標(biāo)記為 Taints ,除非 Pod也被標(biāo)識為可以耐受污點(diǎn)節(jié)點(diǎn),否則該Taints節(jié)點(diǎn)不會被調(diào)度pod。Taints與tolerations當(dāng)前處于beta階段。

Taints節(jié)點(diǎn)應(yīng)用場景比如用戶希望把Kubernetes Master節(jié)點(diǎn)保留給 Kubernetes 系統(tǒng)組件使用,或者把一組具有特殊資源預(yù)留給某些 pod。pod不會再被調(diào)度到taint標(biāo)記過的節(jié)點(diǎn)。

#應(yīng)用場景:

(1)、針對擁有特定資源的節(jié)點(diǎn),允許對資源有特殊要求的pod在上面運(yùn)行

(2)、針對不同環(huán)境進(jìn)行區(qū)分,比如,將node1、node2分配給部分1或者項(xiàng)目1。將node3、node4分配給其他部門或者其他項(xiàng)目

#給node1節(jié)點(diǎn)設(shè)置污點(diǎn)

kubectl taint node node1 node-type=production:NoSchedule

node/node1 tainted

#去除污點(diǎn)

kubectl taint nodes node_name key:[effect]-????#(這里的key不用指定value)

kubectl taint node node1?node-type:NoSchedule-

#describe node1節(jié)點(diǎn)可以發(fā)現(xiàn)如下配置

tolerations:

- key: "key"

operator: "Equal"

value: "value"

effect: "NoSchedule"

#創(chuàng)建污點(diǎn)之后,對于已經(jīng)處于運(yùn)行中的pod是沒有任何影響的,但是對與新創(chuàng)建的pod如果沒有設(shè)置容忍則無法在對應(yīng)節(jié)點(diǎn)上創(chuàng)建pod

#修改部署yaml,添加容忍相關(guān)配置(在containers同級部分添加如下標(biāo)紅配置),只有配置容忍的pod才能被成功調(diào)度到設(shè)置污點(diǎn)的節(jié)點(diǎn)

????spec:

??????tolerations:

??????- key: node-type

????????operator: Equal

????????value: production

????????effect: NoSchedule

??????containers:

????????- name: nginx

??????????image: nginx:latest

??????????imagePullPolicy: Never

??????????ports:

????????????- containerPort: 80

#有污點(diǎn)無容忍不可以創(chuàng)建pod,有容忍無污點(diǎn)可以創(chuàng)建pod,兩種情況對已經(jīng)創(chuàng)建的pod都無影響。

effect 共有三個(gè)可選項(xiàng),可按實(shí)際需求進(jìn)行設(shè)置:

(1)、NoSchedule:pod不會被調(diào)度到標(biāo)記為taints節(jié)點(diǎn)。

(2)、PreferNoSchedule:NoSchedule的“preference”或“soft”版本。

(3)、NoExecute:該選項(xiàng)意味著一旦Taint 生效,如該節(jié)點(diǎn)內(nèi)正在運(yùn)行的 Pod 沒有對應(yīng) Tolerate 設(shè)置,會直接被逐出。

更多內(nèi)容請關(guān)注我的知乎賬號:https://www.zhihu.com/people/dengjiabo/activities

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Kubernetes Scheduling Kubernetes作為一個(gè)容器編排調(diào)度引擎,資源調(diào)度是它的最基本也是...
    SetZero閱讀 2,536評論 0 1
  • Label Label是附著到object上(例如Pod)的鍵值對。可以在創(chuàng)建object的時(shí)候指定,也可以在ob...
    陳靖_7314閱讀 3,997評論 0 3
  • 1、基礎(chǔ)架構(gòu) 1.1 Master Master節(jié)點(diǎn)上面主要由四個(gè)模塊組成:APIServer、scheduler...
    阿斯蒂芬2閱讀 11,157評論 0 44
  • Assigning Pods to Nodes 可以限制Pods在特定節(jié)點(diǎn)上運(yùn)行,也可以優(yōu)先調(diào)度到特定節(jié)點(diǎn)。有幾種...
    iCaptain閱讀 11,896評論 0 11
  • 短信風(fēng)波 劉家云 大年初一,拜年微信響爆了手機(jī)。來而無往非禮也。人家給你拜年,是看得起你,你就得回復(fù)。即便人家是群...
    勸人為仁閱讀 235評論 0 0

友情鏈接更多精彩內(nèi)容