diff --git a/roles/kubernetes/master/defaults/main.yml b/roles/kubernetes/master/defaults/main.yml
index 9b6e3eff432a6cc5b8d1c68a41ecadd6eafdf238..016df0c647734bf597a5aa78b747372eb276c7c6 100644
--- a/roles/kubernetes/master/defaults/main.yml
+++ b/roles/kubernetes/master/defaults/main.yml
@@ -16,6 +16,9 @@ etcd_cert_dir: "{{ etcd_config_dir }}/ssl"
 # ETCD backend for k8s data
 kube_apiserver_storage_backend: etcd3
 
+# By default, force back to etcd2. Set to true to force etcd3 (experimental!)
+force_etcd3: false
+
 # Limits for kube components
 kube_controller_memory_limit: 512M
 kube_controller_cpu_limit: 250m
diff --git a/roles/kubernetes/master/handlers/main.yml b/roles/kubernetes/master/handlers/main.yml
index 1eb5a48867829dfac60d43534863d3f6e56e45da..94cec7d1b3cc6c50c63a91fe268787bf7caf624e 100644
--- a/roles/kubernetes/master/handlers/main.yml
+++ b/roles/kubernetes/master/handlers/main.yml
@@ -42,5 +42,5 @@
     url: http://localhost:8080/healthz
   register: result
   until: result.status == 200
-  retries: 10
+  retries: 20
   delay: 6
diff --git a/roles/kubernetes/master/tasks/pre-upgrade.yml b/roles/kubernetes/master/tasks/pre-upgrade.yml
index 35d573e9716d87a8fd8ade2b36c43720392f30c7..b42cd06d1c42804c054508962c55c40932542fce 100644
--- a/roles/kubernetes/master/tasks/pre-upgrade.yml
+++ b/roles/kubernetes/master/tasks/pre-upgrade.yml
@@ -42,6 +42,11 @@
   when: kube_apiserver_storage_backend == "etcd3"
   failed_when: false
 
+- name: "Pre-upgrade | etcd3 upgrade | use etcd2 unless forced to etc3"
+  set_fact:
+    kube_apiserver_storage_backend: "etcd2"
+  when: old_data_exists.rc == 0 and not force_etcd3|bool
+
 - name: "Pre-upgrade | etcd3 upgrade | see if data was already migrated"
   command: "{{ bin_dir }}/etcdctl --endpoints={{ etcd_access_addresses }} get --limit=1 --prefix=true /registry/minions"
   environment:
@@ -53,7 +58,7 @@
 
 - name: "Pre-upgrade | etcd3 upgrade | set needs_etcd_migration"
   set_fact:
-    needs_etcd_migration: "{{ kube_apiserver_storage_backend == 'etcd3' and data_migrated.stdout_lines|length == 0 and old_data_exists.rc == 0 }}"
+    needs_etcd_migration: "{{ force_etcd3|default(false) and kube_apiserver_storage_backend == 'etcd3' and data_migrated.stdout_lines|length == 0 and old_data_exists.rc == 0 }}"
 
 - name: "Pre-upgrade | Delete master manifests on all kube-masters"
   file: