<p>There is a known limitation in this feature that when pods scale down there topology spread may not be even. How does one overcome this limitation to keep there pods spread across multiple availability zones. This can be a huge issue for apps that need to be highly available.</p>
<p>As per documentation:</p>
<p>“There’s no guarantee that the constraints remain satisfied when Pods are removed. For example, scaling down a Deployment may result in imbalanced Pods distribution. You can use Descheduler to rebalance the Pods distribution.”</p>

user10869670
<p>In Topology Spread Constraint, scaling down a Deployment may result in imbalanced Pods distribution. To maintain the balanced pods distribution we need to use a tool such as the <a href="https://github.com/kubernetes-sigs/descheduler" rel="nofollow noreferrer">Descheduler</a> to rebalance the Pods distribution. This Descheduler allows you to kill off certain workloads based on user requirements, and let the default kube-scheduler reschedule killed pods. It can be installed easily with manifests or Helm and run on a schedule. It can even be triggered manually when the topology changes, which will be implemented to suit our needs. Refer to this <a href="https://github.com/kubernetes-sigs/descheduler#compatibility-matrix" rel="nofollow noreferrer">Compatibility Matrix</a> to install the suitable Deschedular version compatible with your kubernetes version.</p>
<p>As per Question tags you are using <a href="https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html" rel="nofollow noreferrer">AWS EKS</a> and for multiple zones, so you can also use <a href="https://kubernetes.io/docs/concepts/services-networking/topology-aware-hints/" rel="nofollow noreferrer">Topology Aware Hints</a> to indicate your preference for keeping traffic in different availability zones when cluster worker nodes are deployed across multiple availability zones. This will allow your pods to be spread across multiple availability zones, even when scaling down.</p>
<p>You can also use <a href="https://kubernetes.io/docs/setup/best-practices/multiple-zones/#node-behavior" rel="nofollow noreferrer">node labels in conjunction</a> with Pod topology spread constraints to control how Pods are distributed across zones. This will help ensure that your pods are spread across multiple availability zones when scaling down, and will help keep your application highly available.</p>
