调度应用至指定节点池

您可以给节点池设置标签(labels),使得应用Pod调度到对应标签节点池下的节点上。

前提条件

操作步骤

  1. 给节点池设置节点标签。

    您可以在ACK中通过节点池管理集群中的一组节点资源。例如在节点池中统一管理节点的标签和污点。有关创建节点池的具体步骤,请参见创建节点池

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    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),设置应用被调度到不同类型节点资源的顺序。同时,在缩容过程中按照原调度顺序逆序缩容。详细信息,请参见自定义弹性资源优先级调度