动态分发和重调度

更新时间:2025-03-18 01:37:16

ACK One舰队可以通过PropagationPolicy根据子集群的可用资源对工作负载(如 Deployment、StatefulSetJob)进行副本的切分。同时ACK One舰队默认开启重调度能力,由于子集群的可用资源会随着时间变化,原本在子集群中的工作负载可能会存在无法调度的副本。ACK One舰队每两分钟进行一次自动检测,当Pod处于不可调度状态超过30秒时,将触发该副本的重调度。

前提条件

操作步骤

步骤一:在舰队中创建应用

  1. 使用以下内容,创建web-demo.yaml文件。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-demo
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: web-demo
      template:
        metadata:
          labels:
            app: web-demo
        spec:
          containers:
          - name: nginx
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
            ports:
            - containerPort: 80
  2. 执行以下命令部署应用。

    kubectl apply -f web-demo.yaml

步骤二:创建分发策略

  1. 创建基于动态权重的分发策略,该策略会根据子集群所有节点的可用资源自动分配副本比例。

    apiVersion: policy.one.alibabacloud.com/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: web-demo
    spec:
      resourceSelectors:
      - apiVersion: apps/v1
        kind: Deployment
        name: web-demo
      placement:
        clusterAffinity:
          clusterNames:
          - ${cluster1-id} # 您的集群ID。
          - ${cluster2-id} 
        replicaScheduling:
          replicaSchedulingType: Divided
          replicaDivisionPreference: Weighted
          weightPreference:
            dynamicWeight: AvailableReplicas
  2. 执行以下命令,查看应用分发状态。

    kubectl amc get deploy web-demo -M

    预期输出如下,根据您的子集群可用资源比例,结果会有所不同。

    NAME       CLUSTER      READY   UP-TO-DATE   AVAILABLE   AGE   ADOPTION
    web-demo   cxxxxxxxx1   2/2     2            2           11s   Y
    web-demo   cxxxxxxxx2   3/3     3            3           11s   Y

步骤三:验证重调度能力

通过给节点打污点并重启原有的Deployment,您可以模拟资源不足导致工作负载处于Pending状态的场景。

  1. 执行以下命令,为所有节点打上NoSchedule的污点。

    kubectl --kubeconfig=<cluster1.config> taint nodes foo=bar:NoSchedule --all=true
  2. 执行以下命令,重启原本的工作负载,预期工作负载将无法正常运行。

    kubectl --kubeconfig=<cluster1.config> rollout restart deploy web-demo
  3. 等待约三分钟后,执行如下命令,查看调度结果。

    kubectl amc get deploy web-demo -M

    预期输出:

    NAME       CLUSTER      READY   UP-TO-DATE   AVAILABLE   AGE   ADOPTION
    web-demo   cxxxxxxxx2   5/5     5            5           11s   Y

    通过预期输出可以看到Cluster1的工作负载的副本被重调度到Cluster2。

  • 本页导读 (1)
  • 前提条件
  • 操作步骤
  • 步骤一:在舰队中创建应用
  • 步骤二:创建分发策略
  • 步骤三:验证重调度能力