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。
该文章对您有帮助吗?
- 本页导读 (1)
- 前提条件
- 操作步骤
- 步骤一:在舰队中创建应用
- 步骤二:创建分发策略
- 步骤三:验证重调度能力