您可以給節點池設置標簽(labels),使得應用Pod調度到對應標簽節點池下的節點上。
前提條件
操作步驟
給節點池設置節點標簽。
您可以在ACK中通過節點池管理集群中的一組節點資源。例如在節點池中統一管理節點的標簽和污點。有關創建節點池的具體步驟,請參見創建節點池。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在節點池頁面,單擊創建節點池。
在創建節點池配置頁,單擊顯示高級選項,然后單擊節點標簽右側的設置節點標簽。
本文示例中添加的節點標簽為pod: nginx。
您可以在目標節點池右側單擊編輯,為節點更新或者添加標簽。
為應用設置調度策略。
上述步驟已經為節點池中的節點設置了pod:nginx的標簽。您可以利用nodeSelector或者nodeAffinity保證您的應用限定在指定節點池上運行。具體操作步驟如下。
為應用設置nodeSelector。
nodeSelector是spec中的一個字段。您只需要將上述的pod: nginx標簽填充到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 #添加節點池中的標簽,以保證您的應用只可以運行在節點池的節點上。 containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
為應用設置nodeAffinity。
nodeAffinity包含以下調度策略:
- requiredDuringSchedulingIgnoredDuringExecution
表示Pod必須部署到滿足條件的節點上。如果沒有滿足條件的節點,調度操作就會不停重試。其中IgnoreDuringExecution表示Pod部署之后運行時,如果節點標簽發生了變化,不再滿足Pod指定的條件,Pod也會繼續運行。
- preferredDuringSchedulingIgnoredDuringExecution
表示優先部署到滿足條件的節點上,如果沒有滿足條件的節點,則忽略這些條件,按照正常邏輯部署。
本文示例使用requiredDuringSchedulingIgnoredDuringExecution策略保證應用始終運行在指定的節點池上。
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 #節點標簽的鍵,本文示例為pod。 operator: In # 應用將運行在標了pod:nginx的節點上。 values: - nginx #節點標簽的值,本文示例為nginx。 containers: - name: nginx-with-affinity image: nginx:1.7.9 ports: - containerPort: 80
結果驗證
單擊應用名稱,進入應用詳情頁面,查看容器組頁簽。目標應用Pod全部被調度到了xx.xx.33.88和xx.xx.33.92的節點上,這些節點正是本文示例中在節點池中打了標簽(pod: nginx)的節點。
相關文檔
如果您想了解更多關于
nodeSelector
、nodeAffinity
的信息,請參見Assigning Pods to Nodes。您可以在應用發布或擴容過程中,自定義資源策略(ResourcePolicy),設置應用被調度到不同類型節點資源的順序。同時,在縮容過程中按照原調度順序逆序縮容。詳細信息,請參見自定義彈性資源優先級調度。