基于集群级别的多集群优先级弹性调度

更新时间:
复制为 MD 格式

ACK One舰队支持AI推理服务。在跨地域多ACK集群和混合云多集群场景下,可定义集群优先级,实现优先使用IDC集群或主区资源,同时以阿里云上资源或者备用区资源作为算力补充,结合库存感知的调度,保障业务连续性。

工作原理

ACK One舰队的多集群优先级弹性调度适用于下列场景。

  • 跨地域多ACK集群场景:将地域A作为AI推理服务主区,地域B作为备用区,处于地域A集群的优先级更高。当GPU资源无法满足业务需求,需要进行业务扩容时,ACK One舰队会按照集群优先级,优先调度推理服务到地域A,资源不足时则调度到地域B。缩容时,优先缩容优先级更低的地域B推理服务副本,之后再缩容地域A中的副本。

  • 混合云多集群场景:通过舰队同时管理本地IDC和云上ACK资源,将云上资源作为本地IDC的资源补充。在业务扩容时,ACK One舰队优先调度推理服务到IDC集群,IDC资源不足时调度到ACK集群使用云上算力。缩容时,优先缩容云上的推理服务副本,之后再缩容IDC中的副本。

下方的示例操作适用于混合云多集群场景。

image

适用范围

步骤一:在舰队中部署Demo服务

下方示例中使用的模型是qwen3-0.6b,从modelscope下载,并通过vllm使用该模型,测试时可以使用T4、A10来运行下列Deployment。
  1. 在舰队中创建test namespace,并确保所有子集群也有该namespace。

    kubectl create ns test
  2. 创建并保存名为demo.yaml的文件,在舰队中执行kubectl apply -f demo.yaml部署Demo服务(DeploymentService)。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: qwen3
      namespace: test
    spec:
      progressDeadlineSeconds: 600
      replicas: 2
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: qwen3
      template:
        metadata:
          labels:
            app: qwen3
        spec:
          containers:
          # 使用qwen3-0.6b模型,模型从modelscope下载
          - command:
            - sh
            - -c
            - export VLLM_USE_MODELSCOPE=True; vllm serve Qwen/Qwen3-0.6B --served-model-name
              qwen3-0.6b --port 8000 --trust-remote-code --tensor_parallel_size=1 --max-model-len
              2048 --gpu-memory-utilization 0.8
            image: kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm-openai:v0.9.1
            imagePullPolicy: IfNotPresent
            name: vllm
            ports:
            - containerPort: 8000
              name: restful
              protocol: TCP
            readinessProbe:
              failureThreshold: 3
              initialDelaySeconds: 30
              periodSeconds: 10
              successThreshold: 1
              tcpSocket:
                port: 8000
              timeoutSeconds: 1
            resources:
              limits:
                nvidia.com/gpu: "1"
              requests:
                nvidia.com/gpu: "1"
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: qwen3
      namespace: test
      labels:
        app: qwen3
    spec:
      ports:
      - port: 8000
      selector:
        app: qwen3

步骤二:在舰队部署分发策略,实现混合云多集群弹性调度

在如下PropagationPolicy中,开启库存感知调度,并配置集群间优先级,优先调度到IDC,IDC资源不足时,再调度到云上进行节点弹性。

替换下方示例中的${注册集群ID}${ACK Cluster ID}为实际集群ID,创建并保存名为demo-pp.yaml的文件,然后在舰队中执行kubectl apply -f demo-pp.yaml部署PropagationPolicy。

下方示例中的spec.resourceSelectors中填入了步骤一:在舰队中部署Demo服务中创建的示例资源,在生产环境中请使用实际资源信息。
apiVersion: policy.one.alibabacloud.com/v1alpha1
kind: PropagationPolicy
metadata:
  name: vllm-deploy-pp
  namespace: test
spec:
  autoScaling:
    ecsProvision: true
  placement:
    clusterAffinities:
      - affinityName: idc
        clusterNames:
          - ${注册集群ID}
      - affinityName: ack
        clusterNames:
          - ${ACK Cluster ID}
    replicaScheduling:
      replicaSchedulingType: Divided
      replicaDivisionPreference: Weighted
      weightPreference:
        dynamicWeight: AvailableReplicas
  preserveResourcesOnDeletion: false
  resourceSelectors:
  - apiVersion: apps/v1
    kind: Deployment
    namespace: test
  schedulerName: default-scheduler
---
apiVersion: policy.one.alibabacloud.com/v1alpha1 
kind: PropagationPolicy
metadata:
  name: demo-svc
  namespace: test
spec:
  preserveResourcesOnDeletion: false
  resourceSelectors:
  - apiVersion: v1
    kind: Service
    name: qwen3
  placement:
    replicaScheduling:
      replicaSchedulingType: Duplicated

步骤三:验证弹性扩缩容

  1. 执行kubectl amc get pod -ntest -M,查看部署情况。

    初始情况下,IDC集群资源充足时,Pod优先部署在IDC集群中:

    NAME                     CLUSTER        CLUSTER_ALIAS      READY   STATUS    RESTARTS      AGE
    qwen3-5665b88779-7k***   c6b4********   cluster-idc-demo   1/1     Running   0             18m
    qwen3-5665b88779-ds***   c6b4********   cluster-idc-demo   1/1     Running   0             18m
  2. 在舰队扩容推理服务的副本数量:

    kubectl scale deploy qwen3 -ntest --replicas=4

    等待扩容完成后,执行kubectl amc get pod -ntest -M查看Pod部署情况。

    新建Pod会调度到ACK集群中,并且有2Pending Pod,说明ACK集群资源不足:

    NAME                     CLUSTER         CLUSTER_ALIAS      READY   STATUS    RESTARTS   AGE     IP              NODE       NOMINATED NODE   READINESS GATES   ADOPTION
    qwen3-5665b88779-7k***   c043********    cluster-bj-demo    0/1     Pending   0          33s     <none>          <none>     <none>           <none>            N
    qwen3-5665b88779-ds***   c043********    cluster-bj-demo    0/1     Pending   0          33s     <none>          <none>     <none>           <none>            N
    qwen3-5665b88779-7k***   c6b4********    cluster-idc-demo   1/1     Running   0          18m     172.20.245.125  x.x.x.x    <none>           <none>            N
    qwen3-5665b88779-ds***   c6b4********    cluster-idc-demo   1/1     Running   0          18m     172.19.8.159    x.x.x.x    <none>           <none>            N

    通过kubectl amc get node -M查看节点情况,可以发现已经弹性扩容出来2个新的Node,正在加入ACK集群:

    缩容推理服务后,弹性扩容的节点在十分钟后会自动缩容。
    NAME                       CLUSTER        CLUSTER_ALIAS      STATUS     ROLES    AGE     VERSION            ADOPTION
    cn-beijing.172.19.8.***    c043********   cluster-bj-demo    NotReady   <none>   20s                        N
    cn-beijing.172.20.245.**   c043********   cluster-bj-demo    Ready      <none>   18h     v1.34.1-aliyun.1   N
    cn-beijing.172.21.3.***    c043********   cluster-bj-demo    NotReady   <none>   20s                        N
    cn-beijing.172.21.3.**     c043********   cluster-bj-demo    Ready      <none>   18h     v1.34.1-aliyun.1   N
    cn-beijing.172.20.245.**   c6b4********   cluster-idc-demo   Ready      <none>   3h14m   v1.34.1-aliyun.1   N
    cn-beijing.172.21.3.**     c6b4********   cluster-idc-demo   Ready      <none>   3h16m   v1.34.1-aliyun.1   N
    cn-beijing.172.21.3.**     c6b4********   cluster-idc-demo   Ready      <none>   3h13m   v1.34.1-aliyun.1   N
  3. 缩容时,将会根据PropagationPolicy定义的集群优先级,按优先级从低到高进行缩容。

    在舰队缩容推理服务的副本数量:

    kubectl scale deploy qwen3 -ntest --replicas=2

    执行kubectl amc get pod -ntest -M查看Pod部署情况,可以观察到ACK集群上的2个副本被缩容了:

    NAME                     CLUSTER        CLUSTER_ALIAS      READY   STATUS    RESTARTS      AGE
    qwen3-5665b88779-7k***   c6b4********   cluster-idc-demo   1/1     Running   0             18m
    qwen3-5665b88779-ds***   c6b4********   cluster-idc-demo   1/1     Running   0             18m