--- - name: Create the directory for the kubernetes_config_file file: path: "{{ kubernetes_kubeadm_kubelet_config_file_path | dirname }}" state: directory - name: Deploy the config-file for kubeadm and kubelet template: src: "kubeadm-kubelet-config.j2" dest: "{{ kubernetes_kubeadm_kubelet_config_file_path }}" - name: Initialize Kubernetes control plane with kubeadm init command: > kubeadm init --config {{ kubernetes_kubeadm_kubelet_config_file_path }} {{ kubernetes_kubeadm_init_extra_opts }} register: kubeadmin_init when: (not kubernetes_init_stat.stat.exists) and (kubernetes_ignore_preflight_errors is not defined) - name: Initialize Kubernetes control plane with kubeadm init and ignore_preflight_errors command: > kubeadm init --config {{ kubernetes_kubeadm_kubelet_config_file_path }} --ignore-preflight-errors={{ kubernetes_ignore_preflight_errors }} {{ kubernetes_kubeadm_init_extra_opts }} register: kubeadmin_init when: (not kubernetes_init_stat.stat.exists) and (kubernetes_ignore_preflight_errors is defined) - name: Print the init output to screen. debug: var: kubeadmin_init.stdout verbosity: 2 when: not kubernetes_init_stat.stat.exists - name: Ensure .kube directory exists. file: path: ~/.kube state: directory mode: 0755 - name: Symlink the kubectl admin.conf to ~/.kube/conf. file: src: /etc/kubernetes/admin.conf dest: ~/.kube/config state: link mode: 0644 - name: Configure Flannel networking. command: "kubectl apply -f {{ kubernetes_flannel_manifest_file }}" register: flannel_result changed_when: "'created' in flannel_result.stdout" when: kubernetes_pod_network.cni == 'flannel' - name: Configure Calico networking. command: "kubectl apply -f {{ kubernetes_calico_manifest_file }}" register: calico_result changed_when: "'created' in calico_result.stdout" when: kubernetes_pod_network.cni == 'calico' - name: Get Kubernetes version for Weave installation. shell: kubectl version | base64 | tr -d '\n' changed_when: false register: kubectl_version when: kubernetes_pod_network.cni == 'weave' - name: Configure Weave networking. command: "{{ item }}" with_items: - "kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version={{ kubectl_version.stdout_lines[0] }}" register: weave_result changed_when: "'created' in weave_result.stdout" when: kubernetes_pod_network.cni == 'weave' # Get the current taint status from the control-plane node # add/remove the taint according to kubernetes_allow_pods_on_control_plane - name: Get node spec command: kubectl get nodes {{ ansible_hostname }} -o=jsonpath='{.spec}' register: node_spec - name: Store node spec as JSON set_fact: node_spec_json: "{{ node_spec.stdout | from_json }}" - name: Get current taint status set_fact: taint_status: true when: - node_spec_json.taints is defined - item.effect == "NoSchedule" - item.key == "node-role.kubernetes.io/control-plane" with_items: "{{ node_spec_json.taints }}" - name: Allow pods on the control plane command: kubectl taint nodes {{ ansible_hostname }} node-role.kubernetes.io/control-plane- when: - kubernetes_allow_pods_on_control_plane | bool - taint_status is defined - name: Deny pods on the control plane command: kubectl taint nodes {{ ansible_hostname }} node-role.kubernetes.io/control-plane:NoSchedule when: - not kubernetes_allow_pods_on_control_plane | bool - taint_status is not defined