diff --git a/roles/kubernetes-apps/ansible/tasks/netchecker.yml b/roles/kubernetes-apps/ansible/tasks/netchecker.yml
index c28d921b6b8de1aeab9060f205ae678ff102a2f2..0413e4bb694c175d194285639f6ea51e0c450d3a 100644
--- a/roles/kubernetes-apps/ansible/tasks/netchecker.yml
+++ b/roles/kubernetes-apps/ansible/tasks/netchecker.yml
@@ -8,6 +8,18 @@
   register: manifests
   when: inventory_hostname == groups['kube-master'][0]
 
+#FIXME: remove if kubernetes/features#124 is implemented
+- name: Kubernetes Apps | Purge old Netchecker daemonsets
+  kube:
+    name: "{{item.item.name}}"
+    namespace: "{{netcheck_namespace}}"
+    kubectl: "{{bin_dir}}/kubectl"
+    resource: "{{item.item.type}}"
+    filename: "{{kube_config_dir}}/{{item.item.file}}"
+    state: absent
+  with_items: "{{ manifests.results }}"
+  when: inventory_hostname == groups['kube-master'][0] and item.item.type == "ds" and item.changed
+
 - name: Kubernetes Apps | Start Netchecker Resources
   kube:
     name: "{{item.item.name}}"
diff --git a/roles/kubernetes-apps/efk/fluentd/tasks/main.yml b/roles/kubernetes-apps/efk/fluentd/tasks/main.yml
index eebdaed738694bd4a06c51fe9c974335250d1241..728bf156d2e4bb34e51995ba1e93ecca84fc14e1 100644
--- a/roles/kubernetes-apps/efk/fluentd/tasks/main.yml
+++ b/roles/kubernetes-apps/efk/fluentd/tasks/main.yml
@@ -1,10 +1,21 @@
 ---
 - name: "Fluentd | Write fluentd daemonset"
-  template: 
+  template:
     src: fluentd-ds.yml.j2
     dest: "{{ kube_config_dir }}/fluentd-ds.yaml"
   register: fluentd_ds_manifest
 
+#FIXME: remove if kubernetes/features#124 is implemented
+- name: "Fluentd | Purge old fluentd daemonset"
+  kube:
+    filename: "{{kube_config_dir}}/fluentd-ds.yaml"
+    kubectl: "{{bin_dir}}/kubectl"
+    name: "fluentd-es-v{{ fluentd_version }}"
+    namespace: "{{system_namespace}}"
+    resource: "ds"
+    state: absent
+  when: inventory_hostname == groups['kube-master'][0] and fluentd_ds_manifest.changed
+
 - name: "Fluentd | Create fluentd daemonset"
   kube:
     filename: "{{kube_config_dir}}/fluentd-ds.yaml"
diff --git a/roles/kubernetes-apps/network_plugin/canal/tasks/main.yaml b/roles/kubernetes-apps/network_plugin/canal/tasks/main.yaml
index 1b8de999a3edebc5cc5f20d4b098773126fcef88..2133e85fb086d1d35e38223ec418ef593fb5a647 100644
--- a/roles/kubernetes-apps/network_plugin/canal/tasks/main.yaml
+++ b/roles/kubernetes-apps/network_plugin/canal/tasks/main.yaml
@@ -7,6 +7,18 @@
     resource: "configmap"
     namespace: "{{system_namespace}}"
 
+#FIXME: remove if kubernetes/features#124 is implemented
+- name: Purge old flannel and canal-node
+  run_once: true
+  kube:
+    name: "canal-node"
+    kubectl: "{{ bin_dir }}/kubectl"
+    filename: "{{ kube_config_dir }}/canal-node.yml"
+    resource: "ds"
+    namespace: "{{system_namespace}}"
+    state: absent
+  when: inventory_hostname == groups['kube-master'][0] and canal_node_manifest.changed
+
 - name: Start flannel and calico-node
   run_once: true
   kube:
@@ -15,3 +27,6 @@
     filename: "{{kube_config_dir}}/canal-node.yaml"
     resource: "ds"
     namespace: "{{system_namespace}}"
+    state: "{{ item | ternary('latest','present') }}"
+  with_items: "{{ canal_node_manifest.changed }}"
+
diff --git a/roles/kubernetes-apps/network_plugin/weave/tasks/main.yml b/roles/kubernetes-apps/network_plugin/weave/tasks/main.yml
index 9dcfde4945affe20dc4cfb9a7c61696b35afa820..f900e8b09d0730567a0a1a2bde5a825709dee79a 100644
--- a/roles/kubernetes-apps/network_plugin/weave/tasks/main.yml
+++ b/roles/kubernetes-apps/network_plugin/weave/tasks/main.yml
@@ -1,3 +1,16 @@
+#FIXME: remove if kubernetes/features#124 is implemented
+- name: Weave | Purge old weave daemonset
+  run_once: true
+  kube:
+    name: "weave-net"
+    kubectl: "{{ bin_dir }}/kubectl"
+    filename: "{{ kube_config_dir }}/weave-net.yml"
+    resource: "ds"
+    namespace: "{{system_namespace}}"
+    state: absent
+  when: inventory_hostname == groups['kube-master'][0] and weave_manifest.changed
+
+
 - name: Weave | Start Resources
   run_once: true
   kube:
diff --git a/roles/network_plugin/canal/tasks/main.yml b/roles/network_plugin/canal/tasks/main.yml
index 7ccbcdf2ef0e2675a751eb57cbff55f15440f865..9402d390cb82c93d503934578ac8eb3b8048ca3e 100644
--- a/roles/network_plugin/canal/tasks/main.yml
+++ b/roles/network_plugin/canal/tasks/main.yml
@@ -41,6 +41,7 @@
   template:
     src: canal-node.yml.j2
     dest: "{{kube_config_dir}}/canal-node.yaml"
+  register: canal_node_manifest
 
 - name: Canal | Copy cni plugins from hyperkube
   command: "{{ docker_bin_dir }}/docker run --rm -v /opt/cni/bin:/cnibindir {{ hyperkube_image_repo }}:{{ hyperkube_image_tag }} /usr/bin/rsync -a /opt/cni/bin/ /cnibindir/"