From 6fe2248314fb319563a60ae023b552371e34e148 Mon Sep 17 00:00:00 2001 From: Matthew Mosesohn Date: Fri, 13 Sep 2019 13:40:29 +0300 Subject: [PATCH] Use more native way to update kubeconfigs using kubeadm (#5165) Change-Id: I1076b418f85a26d9896be69910052128afc51cee --- .../master/tasks/kubeadm-fix-apiserver.yml | 54 +++++++++++++++---- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/roles/kubernetes/master/tasks/kubeadm-fix-apiserver.yml b/roles/kubernetes/master/tasks/kubeadm-fix-apiserver.yml index 32a4e0ffb..4200e6d71 100644 --- a/roles/kubernetes/master/tasks/kubeadm-fix-apiserver.yml +++ b/roles/kubernetes/master/tasks/kubeadm-fix-apiserver.yml @@ -1,13 +1,45 @@ --- -- name: Update server field in component kubeconfigs - lineinfile: - dest: "{{ kube_config_dir }}/{{ item }}.conf" - regexp: 'server:' - line: ' server: {{ kube_apiserver_endpoint }}' - backup: yes +- name: Test if correct apiserver is set in all kubeconfigs + shell: >- + grep -Fq "{{ kube_apiserver_endpoint }}" {{ kube_config_dir }}/admin.conf && + grep -Fq "{{ kube_apiserver_endpoint }}" {{ kube_config_dir }}/controller-manager.conf && + grep -Fq "{{ kube_apiserver_endpoint }}" {{ kube_config_dir }}/kubelet.conf && + grep -Fq "{{ kube_apiserver_endpoint }}" {{ kube_config_dir }}/scheduler.conf + register: kubeconfig_correct_apiserver + changed_when: False + failed_when: False + +- name: Create temporary directory + tempfile: + state: directory + register: kubeconfig_temp_dir + when: kubeconfig_correct_apiserver.rc != 0 + +- name: Generate new kubeconfigs with correct apiserver + command: >- + {{ bin_dir }}/kubeadm init phase kubeconfig all + --config {{ kube_config_dir }}/kubeadm-config.yaml + --kubeconfig-dir {{ kubeconfig_temp_dir.path }} + when: kubeconfig_correct_apiserver.rc != 0 + +- name: Copy new kubeconfigs to kube config dir + copy: + src: "{{ kubeconfig_temp_dir.path }}/{{ item }}" + dest: "{{ kube_config_dir }}/{{ item }}" + remote_src: yes + when: kubeconfig_correct_apiserver.rc != 0 with_items: - - controller-manager - - scheduler - when: - - not loadbalancer_apiserver is defined - notify: "Master | Restart kube-{{ item }}" + - admin.conf + - controller-manager.conf + - kubelet.conf + - scheduler.conf + notify: + - "Master | Restart kube-controller-manager" + - "Master | Restart kube-scheduler" + - "Master | reload kubelet" + +- name: Cleanup temporary directory + file: + path: "{{ kubeconfig_temp_dir.path }}" + state: absent + when: kubeconfig_correct_apiserver.rc != 0