調(diào)度應(yīng)用至指定節(jié)點(diǎn)池
您可以給節(jié)點(diǎn)池設(shè)置標(biāo)簽(labels),使得應(yīng)用Pod調(diào)度到對(duì)應(yīng)標(biāo)簽節(jié)點(diǎn)池下的節(jié)點(diǎn)上。
前提條件
已創(chuàng)建Kubernetes托管版集群或創(chuàng)建Kubernetes專(zhuān)有版集群。
已創(chuàng)建無(wú)狀態(tài)工作負(fù)載Deployment或創(chuàng)建有狀態(tài)工作負(fù)載StatefulSet。
操作步驟
給節(jié)點(diǎn)池設(shè)置節(jié)點(diǎn)標(biāo)簽。
您可以在ACK中通過(guò)節(jié)點(diǎn)池管理集群中的一組節(jié)點(diǎn)資源。例如在節(jié)點(diǎn)池中統(tǒng)一管理節(jié)點(diǎn)的標(biāo)簽和污點(diǎn)。有關(guān)創(chuàng)建節(jié)點(diǎn)池的具體步驟,請(qǐng)參見(jiàn)創(chuàng)建節(jié)點(diǎn)池。
登錄容器服務(wù)管理控制臺(tái),在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁(yè)面,單擊目標(biāo)集群名稱(chēng),然后在左側(cè)導(dǎo)航欄,選擇 。
在節(jié)點(diǎn)池頁(yè)面,單擊創(chuàng)建節(jié)點(diǎn)池。
在創(chuàng)建節(jié)點(diǎn)池配置頁(yè),單擊顯示高級(jí)選項(xiàng),然后單擊節(jié)點(diǎn)標(biāo)簽右側(cè)的設(shè)置節(jié)點(diǎn)標(biāo)簽。
本文示例中添加的節(jié)點(diǎn)標(biāo)簽為pod: nginx。
您可以在目標(biāo)節(jié)點(diǎn)池右側(cè)單擊編輯,為節(jié)點(diǎn)更新或者添加標(biāo)簽。
為應(yīng)用設(shè)置調(diào)度策略。
上述步驟已經(jīng)為節(jié)點(diǎn)池中的節(jié)點(diǎn)設(shè)置了pod:nginx的標(biāo)簽。您可以利用nodeSelector或者nodeAffinity保證您的應(yīng)用限定在指定節(jié)點(diǎn)池上運(yùn)行。具體操作步驟如下。
為應(yīng)用設(shè)置nodeSelector。
nodeSelector是spec中的一個(gè)字段。您只需要將上述的pod: nginx標(biāo)簽填充到nodeSelector中。示例如下。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: nodeSelector: pod: nginx #添加節(jié)點(diǎn)池中的標(biāo)簽,以保證您的應(yīng)用只可以運(yùn)行在節(jié)點(diǎn)池的節(jié)點(diǎn)上。 containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
為應(yīng)用設(shè)置nodeAffinity。
nodeAffinity包含以下調(diào)度策略:
- requiredDuringSchedulingIgnoredDuringExecution
表示Pod必須部署到滿(mǎn)足條件的節(jié)點(diǎn)上。如果沒(méi)有滿(mǎn)足條件的節(jié)點(diǎn),調(diào)度操作就會(huì)不停重試。其中IgnoreDuringExecution表示Pod部署之后運(yùn)行時(shí),如果節(jié)點(diǎn)標(biāo)簽發(fā)生了變化,不再滿(mǎn)足Pod指定的條件,Pod也會(huì)繼續(xù)運(yùn)行。
- preferredDuringSchedulingIgnoredDuringExecution
表示優(yōu)先部署到滿(mǎn)足條件的節(jié)點(diǎn)上,如果沒(méi)有滿(mǎn)足條件的節(jié)點(diǎn),則忽略這些條件,按照正常邏輯部署。
本文示例使用requiredDuringSchedulingIgnoredDuringExecution策略保證應(yīng)用始終運(yùn)行在指定的節(jié)點(diǎn)池上。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-with-affinity labels: app: nginx-with-affinity spec: replicas: 2 selector: matchLabels: app: nginx-with-affinity template: metadata: labels: app: nginx-with-affinity spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: pod #節(jié)點(diǎn)標(biāo)簽的鍵,本文示例為pod。 operator: In # 應(yīng)用將運(yùn)行在標(biāo)了pod:nginx的節(jié)點(diǎn)上。 values: - nginx #節(jié)點(diǎn)標(biāo)簽的值,本文示例為nginx。 containers: - name: nginx-with-affinity image: nginx:1.7.9 ports: - containerPort: 80
結(jié)果驗(yàn)證
單擊應(yīng)用名稱(chēng),進(jìn)入應(yīng)用詳情頁(yè)面,查看容器組頁(yè)簽。目標(biāo)應(yīng)用Pod全部被調(diào)度到了xx.xx.33.88和xx.xx.33.92的節(jié)點(diǎn)上,這些節(jié)點(diǎn)正是本文示例中在節(jié)點(diǎn)池中打了標(biāo)簽(pod: nginx)的節(jié)點(diǎn)。
相關(guān)文檔
如果您想了解更多關(guān)于
nodeSelector
、nodeAffinity
的信息,請(qǐng)參見(jiàn)Assigning Pods to Nodes。您可以在應(yīng)用發(fā)布或擴(kuò)容過(guò)程中,自定義資源策略(ResourcePolicy),設(shè)置應(yīng)用被調(diào)度到不同類(lèi)型節(jié)點(diǎn)資源的順序。同時(shí),在縮容過(guò)程中按照原調(diào)度順序逆序縮容。詳細(xì)信息,請(qǐng)參見(jiàn)自定義彈性資源優(yōu)先級(jí)調(diào)度。