apiVersion: kubeadm.k8s.io/{{ kubeadm_config_api_version }} kind: JoinConfiguration discovery: {% if kubeadm_use_file_discovery %} file: kubeConfigPath: {{ kube_config_dir }}/cluster-info-discovery-kubeconfig.yaml {% else %} bootstrapToken: {% if kubeadm_config_api_fqdn is defined %} apiServerEndpoint: "{{ kubeadm_config_api_fqdn }}:{{ loadbalancer_apiserver.port | default(kube_apiserver_port) }}" {% else %} apiServerEndpoint: "{{ kubeadm_discovery_address }}" {% endif %} token: {{ kubeadm_token }} unsafeSkipCAVerification: true {% endif %} tlsBootstrapToken: {{ kubeadm_token }} {# TODO: drop the if when we drop support for k8s<1.31 #} {% if kubeadm_config_api_version == 'v1beta3' %} timeout: {{ discovery_timeout }} {% else %} timeouts: discovery: {{ discovery_timeout }} {% endif %} controlPlane: localAPIEndpoint: advertiseAddress: {{ kube_apiserver_address }} bindPort: {{ kube_apiserver_port }} certificateKey: {{ kubeadm_certificate_key }} nodeRegistration: name: {{ kube_override_hostname | default(inventory_hostname) }} criSocket: {{ cri_socket }} {% if 'kube_control_plane' in group_names and 'kube_node' not in group_names %} taints: - effect: NoSchedule key: node-role.kubernetes.io/control-plane {% else %} taints: [] {% endif %} {% if kubeadm_patches | length > 0 %} patches: directory: {{ kubeadm_patches_dir }} {% endif %}