diff --git a/cluster.yml b/cluster.yml
index faf0fea1816b00406484a87bba465902f26cec3d..c0e23169a1123b1c15b24c3dce134d3a39e55a78 100644
--- a/cluster.yml
+++ b/cluster.yml
@@ -1,6 +1,7 @@
 ---
 - hosts: k8s-cluster
   roles:
+    - { role: adduser, tags: adduser }
     - { role: download, tags: download }
     - { role: kubernetes/preinstall, tags: preinstall }
     - { role: docker, tags: docker }
diff --git a/roles/adduser/defaults/main.yml b/roles/adduser/defaults/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6c5888827ccb04bf99716f749d07717716bd1cea
--- /dev/null
+++ b/roles/adduser/defaults/main.yml
@@ -0,0 +1,15 @@
+---
+addusers:
+  - name: etcd
+    comment: "Etcd user"
+    createhome: yes
+    home: "/var/lib/etcd"
+    system: yes
+    shell: /bin/nologin
+
+  - name: kube
+    comment: "Kubernetes user"
+    shell: /sbin/nologin
+    system: yes
+    group: "{{ kube_cert_group }}"
+    createhome: no
\ No newline at end of file
diff --git a/roles/adduser/tasks/main.yml b/roles/adduser/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e082c7d2ff68039e04f5db1b991a05def7946b59
--- /dev/null
+++ b/roles/adduser/tasks/main.yml
@@ -0,0 +1,13 @@
+- name: User | Create User Group
+  group: name={{item.group|default(item.name)}} system={{item.system|default(omit)}}
+  with_items: addusers
+
+- name: User | Create User
+  user:
+    comment: "{{item.comment|default(omit)}}"
+    createhome: "{{item.create_home|default(omit)}}"
+    group: "{{item.group|default(item.name)}}"
+    home: "{{item.home|default(omit)}}"
+    name: "{{item.name}}"
+    system: "{{item.system|default(omit)}}"
+  with_items: addusers
diff --git a/roles/apps/k8s-kubedns b/roles/apps/k8s-kubedns
index b5015aed8ff5eed9c325911205cfbb23ad0e57be..d6df09a89721d98e2969a8abf29b4eb5e787fca6 160000
--- a/roles/apps/k8s-kubedns
+++ b/roles/apps/k8s-kubedns
@@ -1 +1 @@
-Subproject commit b5015aed8ff5eed9c325911205cfbb23ad0e57be
+Subproject commit d6df09a89721d98e2969a8abf29b4eb5e787fca6
diff --git a/roles/download/tasks/main.yml b/roles/download/tasks/main.yml
index d83470bedd8fc1a1f8caaa6459eacb4dd7aed276..86271120f184ecfe9d8b2d38b136e2da43c1e81d 100644
--- a/roles/download/tasks/main.yml
+++ b/roles/download/tasks/main.yml
@@ -1,22 +1,4 @@
 ---
-- name: certs | create system kube-cert groups
-  group: name={{ kube_cert_group }} state=present system=yes
-
-- name: Create system kube user
-  user:
-    name=kube
-    comment="Kubernetes user"
-    shell=/sbin/nologin
-    state=present
-    system=yes
-    groups={{ kube_cert_group }}
-
-- name: Create etcd user
-  user:
-    name: etcd
-    shell: /bin/nologin
-    home: /var/lib/etcd
-
 - name: Create dest directories
   file: path={{local_release_dir}}/{{item.dest|dirname}} state=directory recurse=yes
   with_items: downloads