From b2a99f806fba7f7c8083670308721b291d7c34e9 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Tue, 16 Aug 2022 23:37:21 +0200 Subject: kubernetes/kubeadm: fix node pruning by adding a node label for ansible inventroy hostname --- common/kubernetes-cluster-cleanup.yml | 21 ++++++++------------- inventory/hosts.ini | 2 +- .../control-plane/templates/kubeadm-init.config.j2 | 3 ++- .../control-plane/templates/kubeadm-join.config.j2 | 3 ++- roles/kubernetes/kubeadm/prune/tasks/main.yml | 12 +++++++++--- .../kubeadm/worker/templates/kubeadm.config.j2 | 3 ++- 6 files changed, 24 insertions(+), 20 deletions(-) diff --git a/common/kubernetes-cluster-cleanup.yml b/common/kubernetes-cluster-cleanup.yml index 67f6151b..69a9fc7e 100644 --- a/common/kubernetes-cluster-cleanup.yml +++ b/common/kubernetes-cluster-cleanup.yml @@ -3,27 +3,22 @@ hosts: _kubernetes_primary_controlplane_node_ tasks: - name: fetch list of current nodes - command: kubectl get nodes -o name + command: kubectl --kubeconfig /etc/kubernetes/admin.conf get nodes -o jsonpath='{range .items[*]}{.metadata.name}{":"}{.metadata.labels.ansible\.spreadsapce\.org/inventory_hostname}{"\n"}{end}' changed_when: False check_mode: no - register: kubectl_node_list - - - name: generate list of nodes to be removed - set_fact: - kubernetes_nodes_to_delete: "{{ kubectl_node_list.stdout_lines | map('replace', 'node/', '') | list | difference(groups['_kubernetes_nodes_'] | map('extract', hostvars, 'kubernetes_node_name')) | list }}" + register: kubectl_node_list_yaml - name: generate group of nodes to be removed - loop: "{{ hostvars | dict2items | selectattr('value.kubernetes_node_name', 'defined') | selectattr('value.kubernetes_node_name', 'in', kubernetes_nodes_to_delete) | map(attribute='key') }}" + loop: "{{ kubectl_node_list_yaml.stdout_lines | map('split', ':', 1) | rejectattr('1', 'in', groups['_kubernetes_nodes_']) }}" + loop_control: + label: "{{ item[1] }} ({{ item[0] }})" add_host: - name: "{{ item }}" - inventory_dir: "{{ hostvars[item].inventory_dir }}" + name: "{{ item[1] }}" + inventory_dir: "{{ hostvars[item[1]].inventory_dir }}" group: _kubernetes_nodes_prune_ + kubernetes_node_name: "{{ item[0] }}" changed_when: False - - name: drain superflous nodes - loop: "{{ kubernetes_nodes_to_delete }}" - command: "kubectl drain {{ item }} --delete-local-data --force --ignore-daemonsets" - - name: prune superflous nodes from cluster hosts: _kubernetes_nodes_ roles: diff --git a/inventory/hosts.ini b/inventory/hosts.ini index 1b6fb279..f646399f 100644 --- a/inventory/hosts.ini +++ b/inventory/hosts.ini @@ -264,7 +264,7 @@ ele-emc-e01 host_name=emc-e01 ele-emc-e02 host_name=emc-e02 #[elevate-mediachannel_todelete] -#ele-emc-e03 host_name=emc-e03 kubernetes_node_name=emc-e03 +#ele-emc-e03 host_name=emc-e03 ############################### diff --git a/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-init.config.j2 b/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-init.config.j2 index 23cd36e6..e08ea66d 100644 --- a/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-init.config.j2 +++ b/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-init.config.j2 @@ -18,8 +18,9 @@ skipPhases: nodeRegistration: name: "{{ kubernetes_node_name }}" criSocket: "{{ kubernetes_cri_socket }}" -{% if kubernetes_overlay_node_ip is defined %} kubeletExtraArgs: + node-labels: "ansible.spreadsapce.org/inventory_hostname={{ inventory_hostname }}" +{% if kubernetes_overlay_node_ip is defined %} node-ip: "{{ kubernetes_overlay_node_ip }}" {% endif %} --- diff --git a/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-join.config.j2 b/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-join.config.j2 index 77da9021..9f79fbad 100644 --- a/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-join.config.j2 +++ b/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-join.config.j2 @@ -18,7 +18,8 @@ controlPlane: nodeRegistration: name: "{{ kubernetes_node_name }}" criSocket: "{{ kubernetes_cri_socket }}" -{% if kubernetes_overlay_node_ip is defined %} kubeletExtraArgs: + node-labels: "ansible.spreadsapce.org/inventory_hostname={{ inventory_hostname }}" +{% if kubernetes_overlay_node_ip is defined %} node-ip: "{{ kubernetes_overlay_node_ip }}" {% endif %} diff --git a/roles/kubernetes/kubeadm/prune/tasks/main.yml b/roles/kubernetes/kubeadm/prune/tasks/main.yml index 1c746294..88ab7ecd 100644 --- a/roles/kubernetes/kubeadm/prune/tasks/main.yml +++ b/roles/kubernetes/kubeadm/prune/tasks/main.yml @@ -1,9 +1,15 @@ --- -- name: remove nodes from api server +- name: drain and remove superflous nodes run_once: true delegate_to: "{{ groups['_kubernetes_primary_controlplane_node_'] | first }}" - loop: "{{ groups['_kubernetes_nodes_prune_'] | default([]) }}" - command: "kubectl delete node {{ hostvars[item].kubernetes_node_name }}" + block: + - name: drain superflous nodes + loop: "{{ groups['_kubernetes_nodes_prune_'] | default([]) }}" + command: "kubectl --kubeconfig /etc/kubernetes/admin.conf drain {{ hostvars[item].kubernetes_node_name }} --delete-local-data --force --ignore-daemonsets" + + - name: remove nodes from api server + loop: "{{ groups['_kubernetes_nodes_prune_'] | default([]) }}" + command: "kubectl --kubeconfig /etc/kubernetes/admin.conf delete node {{ hostvars[item].kubernetes_node_name }}" - name: prune network plugin include_tasks: "net_{{ kubernetes_network_plugin }}.yml" diff --git a/roles/kubernetes/kubeadm/worker/templates/kubeadm.config.j2 b/roles/kubernetes/kubeadm/worker/templates/kubeadm.config.j2 index 70314fde..302e3e76 100644 --- a/roles/kubernetes/kubeadm/worker/templates/kubeadm.config.j2 +++ b/roles/kubernetes/kubeadm/worker/templates/kubeadm.config.j2 @@ -11,7 +11,8 @@ discovery: nodeRegistration: name: "{{ kubernetes_node_name }}" criSocket: "{{ kubernetes_cri_socket }}" -{% if kubernetes_overlay_node_ip is defined %} kubeletExtraArgs: + node-labels: "ansible.spreadsapce.org/inventory_hostname={{ inventory_hostname }}" +{% if kubernetes_overlay_node_ip is defined %} node-ip: "{{ kubernetes_overlay_node_ip }}" {% endif %} -- cgit v1.2.3