全部產品
Search
文件中心

Container Service for Kubernetes:動態分發和重調度

更新時間:Mar 19, 2025

ACK One艦隊可以通過PropagationPolicy根據子叢集的可用資源對工作負載(如 Deployment、StatefulSet和Job)進行副本的切分。同時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。