全部產品
Search
文件中心

Container Service for Kubernetes:調度應用至指定節點池

更新時間:Jun 19, 2024

您可以給節點池設定標籤(labels),使得應用Pod調度到對應標籤節點池下的節點上。

前提條件

操作步驟

  1. 給節點池設定節點標籤。

    您可以在ACK中通過節點池管理叢集中的一組節點資源。例如在節點池中統一管理節點的標籤和汙點。有關建立節點池的具體步驟,請參見建立節點池

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池

    3. 節點池頁面,單擊建立節點池

    4. 在建立節點池配置頁,單擊顯示進階選項,然後單擊節點標籤右側的節點池設定節點標籤。

      本文樣本中添加的節點標籤為pod: nginx。

    您可以在目標節點池右側單擊編輯,為節點更新或者添加標籤。Podnginx

  2. 為應用設定調度策略。

    上述步驟已經為節點池中的節點設定了pod:nginx的標籤。您可以利用nodeSelector或者nodeAffinity保證您的應用限定在指定節點池上運行。具體操作步驟如下。

    • 為應用設定nodeSelector

      nodeSelectorspec中的一個欄位。您只需要將上述的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)的節點。2.jpg

相關文檔

  • 如果您想瞭解更多關於nodeSelectornodeAffinity的資訊,請參見Assigning Pods to Nodes

  • 您可以在應用發布或擴容過程中,自訂資源策略(ResourcePolicy),設定應用被調度到不同類型節點資源的順序。同時,在縮容過程中按照原調度順序逆序縮容。詳細資料,請參見自訂彈性資源優先順序調度