diff --git a/roles/kubernetes/node/defaults/main.yml b/roles/kubernetes/node/defaults/main.yml
index 7f1e6f4a018271fd83c7020a8a6491502a7a997f..7ef6d01e04c8a44febb63945d1c4c8afad301ea3 100644
--- a/roles/kubernetes/node/defaults/main.yml
+++ b/roles/kubernetes/node/defaults/main.yml
@@ -1,3 +1,6 @@
+# Valid options: docker (default), rkt, or host
+kubelet_deployment_type: docker
+
 # change to 0.0.0.0 to enable insecure access from anywhere (not recommended)
 kube_apiserver_insecure_bind_address: 127.0.0.1
 
@@ -47,4 +50,4 @@ kube_apiserver_node_port_range: "30000-32767"
 kubelet_load_modules: false
 
 ##Support custom flags to be passed to kubelet
-kubelet_custom_flags: []
\ No newline at end of file
+kubelet_custom_flags: []
diff --git a/roles/kubernetes/node/tasks/install_host.yml b/roles/kubernetes/node/tasks/install_host.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e80b204986cb4a8bf5d16f34ab401e9b8e327d52
--- /dev/null
+++ b/roles/kubernetes/node/tasks/install_host.yml
@@ -0,0 +1,10 @@
+---
+- name: install | Copy kubelet from hyperkube container
+  command: "{{ docker_bin_dir }}/docker run --rm -v {{ bin_dir }}:/systembindir {{ hyperkube_image_repo }}:{{ hyperkube_image_tag }} /bin/cp -f /hyperkube /systembindir/kubelet"
+  register: kubelet_task_result
+  until: kubelet_task_result.rc == 0
+  retries: 4
+  delay: "{{ retry_stagger | random + 3 }}"
+  changed_when: false
+  tags: [hyperkube, upgrade]
+  notify: restart kubelet
diff --git a/roles/kubernetes/node/templates/kubelet.docker.service.j2 b/roles/kubernetes/node/templates/kubelet.docker.service.j2
index e3bf408782a116138e12dcf12697aca235ada76f..cf79f6fa41b6420d2cc2d4d8e31b065a84b6adca 100644
--- a/roles/kubernetes/node/templates/kubelet.docker.service.j2
+++ b/roles/kubernetes/node/templates/kubelet.docker.service.j2
@@ -23,10 +23,11 @@ ExecStart={{ bin_dir }}/kubelet \
 		$DOCKER_SOCKET \
 		$KUBELET_NETWORK_PLUGIN \
 		$KUBELET_CLOUDPROVIDER
-ExecStartPre=-{{ docker_bin_dir }}/docker rm -f kubelet
-ExecReload={{ docker_bin_dir }}/docker restart kubelet
 Restart=always
 RestartSec=10s
+ExecStartPre=-{{ docker_bin_dir }}/docker rm -f kubelet
+ExecReload={{ docker_bin_dir }}/docker restart kubelet
+
 
 [Install]
 WantedBy=multi-user.target
diff --git a/roles/kubernetes/node/templates/kubelet.host.service.j2 b/roles/kubernetes/node/templates/kubelet.host.service.j2
new file mode 100644
index 0000000000000000000000000000000000000000..71a9da8c3b1eef0610ee4d0866e5b9ac1e4cbf05
--- /dev/null
+++ b/roles/kubernetes/node/templates/kubelet.host.service.j2
@@ -0,0 +1,30 @@
+[Unit]
+Description=Kubernetes Kubelet Server
+Documentation=https://github.com/GoogleCloudPlatform/kubernetes
+{% if kube_network_plugin is defined and kube_network_plugin == "calico" %}
+After=docker.service docker.socket calico-node.service
+Wants=docker.socket calico-node.service
+{% else %}
+After=docker.service
+Wants=docker.socket
+{% endif %}
+
+[Service]
+EnvironmentFile={{kube_config_dir}}/kubelet.env
+ExecStart={{ bin_dir }}/kubelet \
+		$KUBE_LOGTOSTDERR \
+		$KUBE_LOG_LEVEL \
+		$KUBELET_API_SERVER \
+		$KUBELET_ADDRESS \
+		$KUBELET_PORT \
+		$KUBELET_HOSTNAME \
+		$KUBE_ALLOW_PRIV \
+		$KUBELET_ARGS \
+		$DOCKER_SOCKET \
+		$KUBELET_NETWORK_PLUGIN \
+		$KUBELET_CLOUDPROVIDER
+Restart=always
+RestartSec=10s
+
+[Install]
+WantedBy=multi-user.target