ACK One艦隊可以通過PropagationPolicy根據子叢集的可用資源對工作負載(如 Deployment、StatefulSet和Job)進行副本的切分。同時ACK One艦隊預設開啟重調度能力,由於子叢集的可用資源會隨著時間變化,原本在子叢集中的工作負載可能會存在無法調度的副本。ACK One艦隊每兩分鐘進行一次自動檢測,當Pod處於不可調度狀態超過30秒時,將觸發該副本的重調度。
前提條件
操作步驟
步驟一:在艦隊中建立應用
使用以下內容,建立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執行以下命令部署應用。
kubectl apply -f web-demo.yaml
步驟二:建立分發策略
建立基於動態權重的分發策略,該策略會根據子叢集所有節點的可用資源自動分配副本比例。
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執行以下命令,查看應用分髮狀態。
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狀態的情境。
執行以下命令,為所有節點打上NoSchedule的汙點。
kubectl --kubeconfig=<cluster1.config> taint nodes foo=bar:NoSchedule --all=true執行以下命令,重啟原本的工作負載,預期工作負載將無法正常運行。
kubectl --kubeconfig=<cluster1.config> rollout restart deploy web-demo等待約三分鐘後,執行如下命令,查看調度結果。
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。