You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.3 KiB

  1. ---
  2. - name: Set kubeadm_discovery_address
  3. set_fact:
  4. kubeadm_discovery_address: >-
  5. {%- if "127.0.0.1" or "localhost" in kube_apiserver_endpoint -%}
  6. {{ first_kube_master }}:{{ kube_apiserver_port }}
  7. {%- else -%}
  8. {{ kube_apiserver_endpoint }}
  9. {%- endif %}
  10. when: not is_kube_master
  11. tags:
  12. - facts
  13. - name: Check if kubelet.conf exists
  14. stat:
  15. path: "{{ kube_config_dir }}/kubelet.conf"
  16. register: kubelet_conf
  17. - name: Calculate kubeadm CA cert hash
  18. shell: openssl x509 -pubkey -in {{ kube_config_dir }}/ssl/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
  19. register: kubeadm_ca_hash
  20. delegate_to: "{{ groups['kube-master'][0] }}"
  21. run_once: true
  22. - name: Create kubeadm token for joining nodes with 24h expiration (default)
  23. command: "{{ bin_dir }}/kubeadm token create"
  24. run_once: true
  25. register: temp_token
  26. delegate_to: "{{ groups['kube-master'][0] }}"
  27. - name: Create kubeadm client config
  28. template:
  29. src: kubeadm-client.conf.j2
  30. dest: "{{ kube_config_dir }}/kubeadm-client.conf"
  31. backup: yes
  32. when: not is_kube_master
  33. vars:
  34. kubeadm_token: "{{ temp_token.stdout }}"
  35. register: kubeadm_client_conf
  36. - name: Join to cluster if needed
  37. command: >-
  38. {{ bin_dir }}/kubeadm join
  39. --config {{ kube_config_dir}}/kubeadm-client.conf
  40. --ignore-preflight-errors=all
  41. register: kubeadm_join
  42. when: not is_kube_master and (kubeadm_client_conf.changed or not kubelet_conf.stat.exists)
  43. - name: Wait for kubelet bootstrap to create config
  44. wait_for:
  45. path: "{{ kube_config_dir }}/kubelet.conf"
  46. delay: 1
  47. timeout: 60
  48. - name: Update server field in kubelet kubeconfig
  49. replace:
  50. path: "{{ kube_config_dir }}/kubelet.conf"
  51. regexp: '(\s+)https://{{ first_kube_master }}:{{ kube_apiserver_port }}(\s+.*)?$'
  52. replace: '\1{{ kube_apiserver_endpoint }}\2'
  53. backup: yes
  54. when: not is_kube_master and kubeadm_discovery_address != kube_apiserver_endpoint
  55. notify: restart kubelet
  56. # FIXME(mattymo): Reconcile kubelet kubeconfig filename for both deploy modes
  57. - name: Symlink kubelet kubeconfig for calico/canal
  58. file:
  59. src: "{{ kube_config_dir }}//kubelet.conf"
  60. dest: "{{ kube_config_dir }}/node-kubeconfig.yaml"
  61. state: link
  62. force: yes
  63. when: kube_network_plugin in ['calico','canal']