diff --git a/roles/upgrade/pre-upgrade/defaults/main.yml b/roles/upgrade/pre-upgrade/defaults/main.yml
index ddff1ea55bfbd9c033b5cf374813654556b01c5c..642c4cb81f37d966059b1e3e12c895420ce5e7f2 100644
--- a/roles/upgrade/pre-upgrade/defaults/main.yml
+++ b/roles/upgrade/pre-upgrade/defaults/main.yml
@@ -6,6 +6,7 @@ drain_nodes: true
 drain_retries: 3
 drain_retry_delay_seconds: 10
 
+upgrade_node_always_cordon: false
 upgrade_node_uncordon_after_drain_failure: true
 upgrade_node_fail_if_drain_fails: true
 
diff --git a/roles/upgrade/pre-upgrade/tasks/main.yml b/roles/upgrade/pre-upgrade/tasks/main.yml
index d969175e3d60c5c4eb80253bb8d45c67cfafdeb7..64e01d901fc3464849e9abdfed4c647db2c91a4b 100644
--- a/roles/upgrade/pre-upgrade/tasks/main.yml
+++ b/roles/upgrade/pre-upgrade/tasks/main.yml
@@ -39,7 +39,7 @@
 - name: Set if node needs cordoning
   set_fact:
     needs_cordoning: >-
-      {% if kubectl_node_ready.stdout == "True" and not kubectl_node_schedulable.stdout -%}
+      {% if (kubectl_node_ready.stdout == "True" and not kubectl_node_schedulable.stdout) or upgrade_node_always_cordon -%}
       true
       {%- else -%}
       false