diff --git a/roles/kubernetes/master/tasks/pre-upgrade.yml b/roles/kubernetes/master/tasks/pre-upgrade.yml
index 244c8b13e06b664675e890bfb21d39390bc4f91e..adafe80aefb6f00156061f275aa775a094dd3c77 100644
--- a/roles/kubernetes/master/tasks/pre-upgrade.yml
+++ b/roles/kubernetes/master/tasks/pre-upgrade.yml
@@ -93,3 +93,5 @@
   delegate_to: "{{item}}"
   with_items: "{{groups['etcd']}}"
   when: needs_etcd_migration|bool
+  notify: "Master | reload kubelet"
+
diff --git a/roles/upgrade/post-upgrade/tasks/main.yml b/roles/upgrade/post-upgrade/tasks/main.yml
index d8243d04d1b56e05ca47f6c4a20e0806ca554424..bff9983ffc8b7ae6184c2c172af048189432f824 100644
--- a/roles/upgrade/post-upgrade/tasks/main.yml
+++ b/roles/upgrade/post-upgrade/tasks/main.yml
@@ -3,3 +3,4 @@
 - name: Uncordon node
   command: "{{ bin_dir }}/kubectl uncordon {{ ansible_hostname }}"
   delegate_to: "{{ groups['kube-master'][0] }}"
+  when: needs_cordoning|default(false)
diff --git a/roles/upgrade/pre-upgrade/tasks/main.yml b/roles/upgrade/pre-upgrade/tasks/main.yml
index 9b47c845bb3af11b0a1f25df54792fd07fd4f3f7..e0e5ded8144d481620f6901b1ccf2278415f8daf 100644
--- a/roles/upgrade/pre-upgrade/tasks/main.yml
+++ b/roles/upgrade/pre-upgrade/tasks/main.yml
@@ -1,8 +1,21 @@
 ---
+- name: See if node is in ready state
+  command: "kubectl get nodes | grep {{ inventory_hostname }}"
+  register: kubectl_nodes
+  ignore_errors: true
+
+- set_fact:
+    needs_cordoning: >-
+      {% if " Ready" in kubectl_nodes.stdout %}
+      true
+      {% else %}
+      false
+      {% endif %}
 
 - name: Cordon node
   command: "{{ bin_dir }}/kubectl cordon {{ ansible_hostname }}"
   delegate_to: "{{ groups['kube-master'][0] }}"
+  when: needs_cordoning
 
 - name: Drain node
   command: >-
@@ -13,6 +26,4 @@
       --timeout {{ drain_timeout }}
       --delete-local-data {{ ansible_hostname }}
   delegate_to: "{{ groups['kube-master'][0] }}"
-
-- name: Sleep for grace period for draining
-  pause: seconds=30
+  when: needs_cordoning