diff --git a/roles/container-engine/containerd/tasks/main.yml b/roles/container-engine/containerd/tasks/main.yml
index 4a76a192acbf8f5959fdf2062920dd4dc540a957..7088f340d736b4ccd1c362a2dc23a1e563e62628 100644
--- a/roles/container-engine/containerd/tasks/main.yml
+++ b/roles/container-engine/containerd/tasks/main.yml
@@ -57,6 +57,19 @@
       - --strip-components=1
   notify: restart containerd
 
+- name: containerd | Remove orphaned binary
+  file:
+    path: "/usr/bin/{{ item }}"
+    state: absent
+  when: containerd_bin_dir != "/usr/bin"
+  ignore_errors: true  # noqa ignore-errors
+  with_items:
+    - containerd
+    - containerd-shim
+    - containerd-shim-runc-v1
+    - containerd-shim-runc-v2
+    - ctr
+
 - name: containerd | Generate systemd service for containerd
   template:
     src: containerd.service.j2
diff --git a/roles/container-engine/runc/defaults/main.yml b/roles/container-engine/runc/defaults/main.yml
index 9c2fafffdf6648259d704922f082b4e14973a3bd..af8aa0837d7ec00a50a3e8308e597573bdfde1ef 100644
--- a/roles/container-engine/runc/defaults/main.yml
+++ b/roles/container-engine/runc/defaults/main.yml
@@ -1,5 +1,5 @@
 ---
 
-runc_bin_dir: /usr/bin/
+runc_bin_dir: "{{ bin_dir }}"
 
 runc_package_name: runc
diff --git a/roles/container-engine/runc/tasks/main.yml b/roles/container-engine/runc/tasks/main.yml
index be1014d7924ddac49281252e1dc48e4da22d58ec..94f97c0baf1afe24a141248d1347894d92279d88 100644
--- a/roles/container-engine/runc/tasks/main.yml
+++ b/roles/container-engine/runc/tasks/main.yml
@@ -1,8 +1,14 @@
 ---
+- name: runc | set is_ostree
+  set_fact:
+    is_ostree: "{{ ostree.stat.exists }}"
+
 - name: runc | Uninstall runc package managed by package manager
   package:
     name: "{{ runc_package_name }}"
     state: absent
+  when:
+    - not (is_ostree or (ansible_distribution == "Flatcar Container Linux by Kinvolk") or (ansible_distribution == "Flatcar"))
 
 - name: runc | Download runc binary
   include_tasks: "../../../download/tasks/download_file.yml"
@@ -15,3 +21,10 @@
     dest: "{{ runc_bin_dir }}/runc"
     mode: 0755
     remote_src: true
+
+- name: runc | Remove orphaned binary
+  file:
+    path: /usr/bin/runc
+    state: absent
+  when: runc_bin_dir != "/usr/bin"
+  ignore_errors: true  # noqa ignore-errors
diff --git a/roles/kubespray-defaults/defaults/main.yaml b/roles/kubespray-defaults/defaults/main.yaml
index bb00672845fcb2110fe838b1c6a9bd4c2065c466..282cc6507aa9144f02227b07a20b281f2aad7b83 100644
--- a/roles/kubespray-defaults/defaults/main.yaml
+++ b/roles/kubespray-defaults/defaults/main.yaml
@@ -67,7 +67,7 @@ haproxy_config_dir: "/etc/haproxy"
 # Directory where the binaries will be installed
 bin_dir: /usr/local/bin
 docker_bin_dir: /usr/bin
-containerd_bin_dir: /usr/bin
+containerd_bin_dir: "{{ bin_dir }}"
 etcd_data_dir: /var/lib/etcd
 # Where the binaries will be downloaded.
 # Note: ensure that you've enough disk space (about 1G)