diff --git a/roles/kubernetes-apps/ansible/tasks/coredns.yml b/roles/kubernetes-apps/ansible/tasks/coredns.yml
index d8f85477486420e0e5fa4ab13c31588f5ba3333c..a5f7b198cae172842acbf3627b75090237d49e4a 100644
--- a/roles/kubernetes-apps/ansible/tasks/coredns.yml
+++ b/roles/kubernetes-apps/ansible/tasks/coredns.yml
@@ -21,6 +21,7 @@
   when:
     - dns_mode in ['coredns', 'coredns_dual']
     - inventory_hostname == groups['kube_control_plane'][0]
+    - enable_dns_autoscaler or item.name != 'dns-autoscaler'
   tags:
     - coredns
 
@@ -40,5 +41,6 @@
   when:
     - dns_mode == 'coredns_dual'
     - inventory_hostname == groups['kube_control_plane'][0]
+    - enable_dns_autoscaler or item.name != 'dns-autoscaler'
   tags:
     - coredns
diff --git a/roles/kubespray-defaults/defaults/main/main.yml b/roles/kubespray-defaults/defaults/main/main.yml
index 611947595a52ab4b78e7801a6b7328c6f8c366b5..a18505bcb3f274334ac08b3ec8a90606a9c248b5 100644
--- a/roles/kubespray-defaults/defaults/main/main.yml
+++ b/roles/kubespray-defaults/defaults/main/main.yml
@@ -99,6 +99,9 @@ docker_dns_options:
 # Can be coredns, coredns_dual, manual, or none
 dns_mode: coredns
 
+# Enable dns autoscaler
+enable_dns_autoscaler: true
+
 # Enable nodelocal dns cache
 enable_nodelocaldns: true
 enable_nodelocaldns_secondary: false