diff --git a/roles/upgrade/post-upgrade/tasks/main.yml b/roles/upgrade/post-upgrade/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b576b094733269b6cceab64489e6f772355e4bb4
--- /dev/null
+++ b/roles/upgrade/post-upgrade/tasks/main.yml
@@ -0,0 +1,5 @@
+---
+
+- name: Uncordon node
+  command: kubectl uncordon {{ ansible_hostname }}
+  delegate_to: "{{ groups['kube-master'][0] }}"
diff --git a/roles/upgrade/pre-upgrade/tasks/main.yml b/roles/upgrade/pre-upgrade/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..25f665a8623c3066f96ac4da8115ede7a9204c54
--- /dev/null
+++ b/roles/upgrade/pre-upgrade/tasks/main.yml
@@ -0,0 +1,12 @@
+---
+
+- name: Cordon node
+  command: kubectl cordon {{ ansible_hostname }}
+  delegate_to: "{{ groups['kube-master'][0] }}"
+
+- name: Drain node
+  command: kubectl drain --force --ignore-daemonsets --delete-local-data {{ ansible_hostname }}
+  delegate_to: "{{ groups['kube-master'][0] }}"
+
+- name: Sleep for grace period for draining
+  pause: seconds=30
\ No newline at end of file
diff --git a/upgrade-cluster.yml b/upgrade-cluster.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d7089fc493b925bc0bd09ff4a405ae341521ebfd
--- /dev/null
+++ b/upgrade-cluster.yml
@@ -0,0 +1,33 @@
+---
+- hosts: all
+  any_errors_fatal: true
+  gather_facts: true
+
+- hosts: all:!network-storage
+  any_errors_fatal: true
+  roles:
+    - { role: kubernetes/preinstall, tags: preinstall }
+
+- hosts: etcd:!k8s-cluster
+  any_errors_fatal: true
+  serial: 1
+  roles:
+    - { role: etcd, tags: etcd }
+
+- hosts: kube-node
+  any_errors_fatal: true
+  serial: 1
+  roles:
+    - { role: etcd, tags: etcd }
+    - { role: upgrade/pre-upgrade, tags: upgrade/pre-upgrade }
+    - { role: kubernetes/node, tags: node }
+    - { role: network_plugin, tags: network }
+    - { role: upgrade/post-upgrade, tags: upgrade/post-upgrade }
+
+- hosts: kube-master
+  any_errors_fatal: true
+  serial: 1
+  roles:
+    - { role: etcd, tags: etcd }
+    - { role: kubernetes/node, tags: node }
+    - { role: kubernetes/master, tags: master }
\ No newline at end of file