diff --git a/roles/kubernetes/kubeadm/tasks/main.yml b/roles/kubernetes/kubeadm/tasks/main.yml
index ba399151540c9df66b124738993068972d65a32a..c849002b226bd4a6287cbb515d46d4d9dc6929ef 100644
--- a/roles/kubernetes/kubeadm/tasks/main.yml
+++ b/roles/kubernetes/kubeadm/tasks/main.yml
@@ -65,14 +65,38 @@
     kubeadm_token: "{{ temp_token.stdout }}"
 
 - name: Join to cluster if needed
-  command: >-
-    {{ bin_dir }}/kubeadm join
-    --config {{ kube_config_dir}}/kubeadm-client.conf
-    --ignore-preflight-errors=all
-  register: kubeadm_join
-  when: not is_kube_master and (not kubelet_conf.stat.exists)
   environment:
     PATH: "{{ bin_dir }}:{{ ansible_env.PATH }}"
+  when: not is_kube_master and (not kubelet_conf.stat.exists)
+  block:
+
+    - name: Join to cluster
+      command: >-
+        {{ bin_dir }}/kubeadm join
+        --config {{ kube_config_dir}}/kubeadm-client.conf
+      register: kubeadm_join
+      async: 60
+      poll: 15
+
+  rescue:
+
+    - name: Join to cluster with ignores
+      command: >-
+        {{ bin_dir }}/kubeadm join
+        --config {{ kube_config_dir}}/kubeadm-client.conf
+        --ignore-preflight-errors=all
+      register: kubeadm_join
+      async: 60
+      poll: 15
+
+  always:
+
+    - name: Display kubeadm join stderr if any
+      when: kubeadm_join is failed
+      debug:
+        message: |
+          Joined with warnings
+          {{ kubeadm_join.stderr_lines }}
 
 - name: Wait for kubelet bootstrap to create config
   wait_for: