You need to enable JavaScript to run this app.
导航
调度策略配置
最近更新时间:2025.11.19 21:07:14首次发布时间:2025.11.19 14:56:05
复制全文
我的收藏
有用
有用
无用
无用

创建虚拟集群和运行中虚拟集群添加服务时(如创建RayCluster)支持将EMR服务 Pod 调度到具有特定标签的节点上。本文介绍如何对调度策略进行配置。

使用场景和限制

  1. 将服务Pod调度到期望的服务器节点上,如本地盘服务器。
  2. 配置不同服务Pod的亲和性和反亲和性。当前仅支持JSON方式配置。

操作说明

场景一:创建虚拟集群时配置调度策略

说明

创建虚拟集群时,仅资源类型为已有 VKE 资源的场景支持配置调度策略。

  1. 登录 EMR 控制台
  2. 从左侧导航栏中,进入资源管理 > on VKE 页签
  3. 点击 创建虚拟集群 , 进入创建虚拟集群详情页面
  4. 选择部署EMR的VKE集群、待部署服务,在配置Pod部署表格调度策略列中点击设置, 进入调度策略配置页

场景二:添加服务时配置调度策略

  1. 登录 EMR 控制台
  2. 从左侧导航栏中,进入资源管理 > on VKE > 虚拟集群详情 > 服务列表 页签
  3. 点击 添加服务, 进入添加服务详情页面
  4. 选择待部署服务,在配置Pod部署表格调度策略列中点击设置, 进入调度策略配置页

常见配置策略

{
    "nodeAffinity": { 
        "requiredDuringSchedulingIgnoredDuringExecution": {
            "nodeSelectorTerms": [
                {
                    "matchExpressions": [
                        {
                            "key": "emr-local-disk",
                            "operator": "Exists"
                        }
                    ]
                }
            ]
        }
    }
}

EMR 默认调度策略

不同的服务默认调度策略不一样,本章节详细列出 EMR各核心服务组件的默认 Pod 调度策略。

RAY

"affinity": {
    "nodeAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "preference": {
            "matchExpressions": [
              {
                "key": "emr-local-disk",
                "operator": "DoesNotExist",
                "values": null
              }
            ],
            "matchFields": null
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    },
    "podAffinity": null,
    "podAntiAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/name",
                  "operator": "In",
                  "values": [
                    "celeborn-worker"
                  ]
                },
                {
                  "key": "app.kubernetes.io/role",
                  "operator": "In",
                  "values": [
                    "worker"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    }

Spark

"affinity": {
    "nodeAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "preference": {
            "matchExpressions": [
              {
                "key": "emr-local-disk",
                "operator": "DoesNotExist",
                "values": null
              }
            ],
            "matchFields": null
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    },
    "podAffinity": null,
    "podAntiAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/name",
                  "operator": "In",
                  "values": [
                    "celeborn-worker"
                  ]
                },
                {
                  "key": "app.kubernetes.io/role",
                  "operator": "In",
                  "values": [
                    "worker"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    }
  }

Celeborn

"affinity": {
    "nodeAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "preference": {
            "matchExpressions": [
              {
                "key": "emr-local-disk",
                "operator": "DoesNotExist",
                "values": null
              }
            ],
            "matchFields": null
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    },
    "podAffinity": null,
    "podAntiAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/name",
                  "operator": "In",
                  "values": [
                    "celeborn-worker"
                  ]
                },
                {
                  "key": "app.kubernetes.io/role",
                  "operator": "In",
                  "values": [
                    "worker"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 1
        },
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/cluster-role",
                  "operator": "In",
                  "values": [
                    "proton-data-server"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": [
        {
          "labelSelector": {
            "matchExpressions": [
              {
                "key": "app.kubernetes.io/name",
                "operator": "In",
                "values": [
                  "celeborn-master"
                ]
              },
              {
                "key": "app.kubernetes.io/role",
                "operator": "In",
                "values": [
                  "master"
                ]
              }
            ],
            "matchLabels": null
          },
          "namespaceSelector": null,
          "namespaces": null,
          "topologyKey": "kubernetes.io/hostname"
        }
      ]
    }
  }

Hive

"affinity": {
    "nodeAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "preference": {
            "matchExpressions": [
              {
                "key": "emr-local-disk",
                "operator": "DoesNotExist",
                "values": null
              }
            ],
            "matchFields": null
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    },
    "podAffinity": null,
    "podAntiAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/name",
                  "operator": "In",
                  "values": [
                    "celeborn-worker"
                  ]
                },
                {
                  "key": "app.kubernetes.io/role",
                  "operator": "In",
                  "values": [
                    "worker"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 1
        },
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/name",
                  "operator": "In",
                  "values": [
                    "hive-metastore"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 100
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    }
  }

Zookeeper

"affinity": {
    "nodeAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "preference": {
            "matchExpressions": [
              {
                "key": "emr-local-disk",
                "operator": "DoesNotExist",
                "values": null
              }
            ],
            "matchFields": null
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    },
    "podAffinity": null,
    "podAntiAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/name",
                  "operator": "In",
                  "values": [
                    "celeborn-worker"
                  ]
                },
                {
                  "key": "app.kubernetes.io/role",
                  "operator": "In",
                  "values": [
                    "worker"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": [
        {
          "labelSelector": {
            "matchExpressions": [
              {
                "key": "app",
                "operator": "In",
                "values": [
                  "zk"
                ]
              }
            ],
            "matchLabels": null
          },
          "namespaceSelector": null,
          "namespaces": null,
          "topologyKey": "kubernetes.io/hostname"
        }
      ]
    }
  }

Kyuubi

"affinity": {
    "nodeAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "preference": {
            "matchExpressions": [
              {
                "key": "emr-local-disk",
                "operator": "DoesNotExist",
                "values": null
              }
            ],
            "matchFields": null
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    },
    "podAffinity": null,
    "podAntiAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/name",
                  "operator": "In",
                  "values": [
                    "celeborn-worker"
                  ]
                },
                {
                  "key": "app.kubernetes.io/role",
                  "operator": "In",
                  "values": [
                    "worker"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 1
        },
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/name",
                  "operator": "In",
                  "values": [
                    "kyuubi"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 100
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    }
  }

Volcano

"affinity": {
    "nodeAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "preference": {
            "matchExpressions": [
              {
                "key": "emr-local-disk",
                "operator": "DoesNotExist",
                "values": null
              }
            ],
            "matchFields": null
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    },
    "podAffinity": null,
    "podAntiAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/name",
                  "operator": "In",
                  "values": [
                    "celeborn-worker"
                  ]
                },
                {
                  "key": "app.kubernetes.io/role",
                  "operator": "In",
                  "values": [
                    "worker"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 1
        },
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/name",
                  "operator": "In",
                  "values": [
                    "volcano-admission"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 100
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": null
    }
  }

Proton

"affinity": {
    "nodeAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": null,
      "requiredDuringSchedulingIgnoredDuringExecution": {
        "nodeSelectorTerms": [
          {
            "matchExpressions": [
              {
                "key": "emr-local-disk",
                "operator": "Exists",
                "values": null
              }
            ],
            "matchFields": null
          }
        ]
      }
    },
    "podAffinity": null,
    "podAntiAffinity": {
      "preferredDuringSchedulingIgnoredDuringExecution": [
        {
          "podAffinityTerm": {
            "labelSelector": {
              "matchExpressions": [
                {
                  "key": "app.kubernetes.io/name",
                  "operator": "In",
                  "values": [
                    "celeborn-master"
                  ]
                },
                {
                  "key": "app.kubernetes.io/cluster-role",
                  "operator": "In",
                  "values": [
                    "proton-meta-server"
                  ]
                }
              ],
              "matchLabels": null
            },
            "namespaceSelector": null,
            "namespaces": null,
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 1
        }
      ],
      "requiredDuringSchedulingIgnoredDuringExecution": [
        {
          "labelSelector": {
            "matchExpressions": [
              {
                "key": "app.kubernetes.io/name",
                "operator": "In",
                "values": [
                  "celeborn-worker"
                ]
              },
              {
                "key": "app.kubernetes.io/cluster-role",
                "operator": "In",
                "values": [
                  "proton-data-server"
                ]
              }
            ],
            "matchLabels": null
          },
          "namespaceSelector": null,
          "namespaces": null,
          "topologyKey": "kubernetes.io/hostname"
        }
      ]
    }
  }