您可以給節點池設定標籤(labels),使得應用Pod調度到對應標籤節點池下的節點上。
前提條件
操作步驟
給節點池設定節點標籤。
您可以在ACK中通過節點池管理叢集中的一組節點資源。例如在節點池中統一管理節點的標籤和汙點。有關建立節點池的具體步驟,請參見建立節點池。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在節點池頁面,單擊建立節點池。
在建立節點池配置頁,單擊顯示進階選項,然後單擊節點標籤右側的設定節點標籤。
本文樣本中添加的節點標籤為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),設定應用被調度到不同類型節點資源的順序。同時,在縮容過程中按照原調度順序逆序縮容。詳細資料,請參見自訂彈性資源優先順序調度。