diff --git a/cluster.yml b/cluster.yml
index 14a4a6d373a62a692c0ec6abcac0127727dd6ab1..4fc852d973df5e0000987ef56d03fd9e8ce4fe1e 100644
--- a/cluster.yml
+++ b/cluster.yml
@@ -33,8 +33,8 @@
   roles:
     - { role: kubespray-defaults}
     - { role: kubernetes/preinstall, tags: preinstall }
-    - { role: docker, tags: docker, when: manage_docker|default(true) }
-    - { role: cri-o, tags: crio, when: manage_crio }
+    - { role: docker, tags: docker, when: container_manager == 'docker' }
+    - { role: cri-o, tags: crio, when: container_manager == 'crio' }
     - role: rkt
       tags: rkt
       when: "'rkt' in [etcd_deployment_type, kubelet_deployment_type, vault_deployment_type]"
diff --git a/docs/cri-o.md b/docs/cri-o.md
index ef37d7a7f81c5e104d0418d5df8ff0efa4e3b92e..796b7513a1f71c5dae90da462bd8ac6da9aff458 100644
--- a/docs/cri-o.md
+++ b/docs/cri-o.md
@@ -26,7 +26,6 @@ skip_downloads: false
 ```
 etcd_deployment_type: host
 kubelet_deployment_type: host
-manage_docker: false
-manage_crio: true
+container_manager: crio
 ```
 
diff --git a/inventory/sample/group_vars/k8s-cluster.yml b/inventory/sample/group_vars/k8s-cluster.yml
index 627b92e72a5e202e187054bb36181518777ec1bf..eb1d01cb9a8b929aedb5a58ab09af79b64567a60 100644
--- a/inventory/sample/group_vars/k8s-cluster.yml
+++ b/inventory/sample/group_vars/k8s-cluster.yml
@@ -135,13 +135,9 @@ skydns_server_secondary: "{{ kube_service_addresses|ipaddr('net')|ipaddr(4)|ipad
 dnsmasq_dns_server: "{{ kube_service_addresses|ipaddr('net')|ipaddr(2)|ipaddr('address') }}"
 dns_domain: "{{ cluster_name }}"
 
-# Use docker as container runtime
-# If you set manage_crio true, set manage_docker false.
-manage_docker: true
-
-# Use cri-o as container runtime
-# If you set manage_docker true, set manage_crio false.
-manage_crio: false
+# Container runtime
+# docker for docker and crio for cri-o.
+container_manager: docker
 
 # Path used to store Docker data
 docker_daemon_graph: "/var/lib/docker"
diff --git a/roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1alpha2.j2 b/roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1alpha2.j2
index 1b0ab9c40dbba0afe2ce503618dccc30531191c7..35ed7a3e6318a4d061f389206983b8f181d155e1 100644
--- a/roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1alpha2.j2
+++ b/roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1alpha2.j2
@@ -15,6 +15,6 @@ discoveryTokenAPIServers:
 discoveryTokenUnsafeSkipCAVerification: true
 nodeRegistration:
   name: {{ inventory_hostname  }}
-{% if manage_crio %}
+{% if container_manager == 'crio' %}
   criSocket: /var/run/crio/crio.sock
 {% endif %}
diff --git a/roles/kubernetes/master/templates/kubeadm-config.v1alpha2.yaml.j2 b/roles/kubernetes/master/templates/kubeadm-config.v1alpha2.yaml.j2
index 4ee15a181bbe7ff99d7ddefcc2a6bbb884e90b9b..3f123b24db4ab406d7526dfa7c4c3121d645195d 100644
--- a/roles/kubernetes/master/templates/kubeadm-config.v1alpha2.yaml.j2
+++ b/roles/kubernetes/master/templates/kubeadm-config.v1alpha2.yaml.j2
@@ -138,6 +138,6 @@ nodeRegistration:
   taints:
   - effect: NoSchedule
     key: node-role.kubernetes.io/master
-{% if manage_crio %}
+{% if container_manager == 'crio' %}
   criSocket: /var/run/crio/crio.sock
 {% endif %}
diff --git a/roles/kubernetes/node/templates/kubelet.kubeadm.env.j2 b/roles/kubernetes/node/templates/kubelet.kubeadm.env.j2
index b2a27d58c68df804a876a1ae504732e31102de61..7597fd9ae44266ff0ae71b3dd4a7c4cfaa9b3f84 100644
--- a/roles/kubernetes/node/templates/kubelet.kubeadm.env.j2
+++ b/roles/kubernetes/node/templates/kubelet.kubeadm.env.j2
@@ -34,10 +34,10 @@ KUBELET_HOSTNAME="--hostname-override={{ kube_override_hostname }}"
 --node-status-update-frequency={{ kubelet_status_update_frequency }} \
 --cgroup-driver={{ kubelet_cgroup_driver|default(kubelet_cgroup_driver_detected) }} \
 --max-pods={{ kubelet_max_pods }} \
-{% if manage_docker %}
+{% if container_manager == 'docker' %}
 --docker-disable-shared-pid={{ kubelet_disable_shared_pid }} \
 {% endif %}
-{% if manage_crio %}
+{% if container_manager == 'crio' %}
 --container-runtime=remote \
 --container-runtime-endpoint=/var/run/crio/crio.sock \
 {% endif %}
diff --git a/roles/kubernetes/node/templates/kubelet.standard.env.j2 b/roles/kubernetes/node/templates/kubelet.standard.env.j2
index 0c5dd0122c9859b8cb6ac5d477e6b90c7efa97ca..ae4654424be1f2a31c068831396a3042301c03e3 100644
--- a/roles/kubernetes/node/templates/kubelet.standard.env.j2
+++ b/roles/kubernetes/node/templates/kubelet.standard.env.j2
@@ -15,7 +15,7 @@ KUBELET_HOSTNAME="--hostname-override={{ kube_override_hostname }}"
 --cadvisor-port={{ kube_cadvisor_port }} \
 --pod-infra-container-image={{ pod_infra_image_repo }}:{{ pod_infra_image_tag }} \
 --node-status-update-frequency={{ kubelet_status_update_frequency }} \
-{% if manage_docker %}
+{% if container_manager == 'docker' %}
 --docker-disable-shared-pid={{ kubelet_disable_shared_pid }} \
 {% endif %}
 --client-ca-file={{ kube_cert_dir }}/ca.pem \
@@ -28,7 +28,7 @@ KUBELET_HOSTNAME="--hostname-override={{ kube_override_hostname }}"
 {% if kube_version | version_compare('v1.7', '<') %}
 --enable-cri={{ kubelet_enable_cri }} \
 {% endif %}
-{% if manage_crio %}
+{% if container_manager == 'crio' %}
 --container-runtime=remote \
 --container-runtime-endpoint=/var/run/crio/crio.sock \
 {% endif %}
diff --git a/roles/kubespray-defaults/defaults/main.yaml b/roles/kubespray-defaults/defaults/main.yaml
index c676598bc0c7bbe929a559d9f9e5e267b7a7b876..54986fe253401f56c004165cc065ac7c48c85bca 100644
--- a/roles/kubespray-defaults/defaults/main.yaml
+++ b/roles/kubespray-defaults/defaults/main.yaml
@@ -131,13 +131,8 @@ kube_apiserver_insecure_port: 8080
 # Aggregator
 kube_api_aggregator_routing: false
 
-# Docker options
-# Optionally do not run docker role
-manage_docker: true
-
-# cri-o options
-# Optionally run cri-o role
-manage_crio: false
+# Container for runtime
+container_manager: docker
 
 # Path used to store Docker data
 docker_daemon_graph: "/var/lib/docker"
diff --git a/roles/reset/tasks/main.yml b/roles/reset/tasks/main.yml
index 9c0d994f54ed9978230c1bc0a9a35180e829ec01..88dec8d7a5ae74e2a7b1e97208ad94cf83dc1bfc 100644
--- a/roles/reset/tasks/main.yml
+++ b/roles/reset/tasks/main.yml
@@ -68,7 +68,7 @@
   delay: 5
   tags:
     - crio
-  when: manage_crio
+  when: container_manager == 'crio'
 
 - name: reset | gather mounted kubelet dirs
   shell: mount | grep /var/lib/kubelet/ | awk '{print $3}' | tac
diff --git a/scale.yml b/scale.yml
index ff027d6c077acddaaf8ec67c45d1a7ebac2fc3d4..c4cd117f00cd07cd3ffcccda8787c9cb7554b14f 100644
--- a/scale.yml
+++ b/scale.yml
@@ -35,8 +35,9 @@
   roles:
     - { role: kubespray-defaults}
     - { role: kubernetes/preinstall, tags: preinstall }
-    - { role: docker, tags: docker, when: manage_docker|default(true) }
-    - { role: cri-o, tags: crio, when: manage_crio }
+
+    - { role: docker, tags: docker, when: container_manager == 'docker' }
+    - { role: cri-o, tags: crio, when: container_manager == 'crio' }
     - role: rkt
       tags: rkt
       when: "'rkt' in [etcd_deployment_type, kubelet_deployment_type, vault_deployment_type]"
diff --git a/upgrade-cluster.yml b/upgrade-cluster.yml
index 4e4cfb654f66961e11583be037ce813db00016ea..7d8534d782c82a7e2d64ef0613b13c9f7b003ae0 100644
--- a/upgrade-cluster.yml
+++ b/upgrade-cluster.yml
@@ -34,8 +34,8 @@
   roles:
     - { role: kubespray-defaults}
     - { role: kubernetes/preinstall, tags: preinstall }
-    - { role: docker, tags: docker, when: manage_docker|default(true) }
-    - { role: cri-o, tags: crio, when: manage_crio }
+    - { role: docker, tags: docker, when: container_manager == 'docker' }
+    - { role: cri-o, tags: crio, when: container_manager == 'crio' }
     - role: rkt
       tags: rkt
       when: "'rkt' in [etcd_deployment_type, kubelet_deployment_type, vault_deployment_type]"