From 20947da3f0961ea36ea62cb54ff675c2a60bcffd Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Mon, 15 Aug 2022 22:42:01 +0200 Subject: kubernetes/kubeadm: make k8s node name configureable --- common/kubernetes-cluster-cleanup.yml | 8 ++++++-- inventory/group_vars/k8s-emc/vars.yml | 2 ++ inventory/group_vars/kubernetes-cluster/vars.yml | 2 ++ inventory/hosts.ini | 4 +++- roles/kubernetes/kubeadm/control-plane/tasks/main.yml | 14 +++++++------- roles/kubernetes/kubeadm/control-plane/tasks/primary.yml | 8 ++++---- .../kubeadm/control-plane/templates/kubeadm-init.config.j2 | 2 +- .../kubeadm/control-plane/templates/kubeadm-join.config.j2 | 2 +- roles/kubernetes/kubeadm/prune/tasks/main.yml | 2 +- .../kubernetes/kubeadm/worker/templates/kubeadm.config.j2 | 2 +- 10 files changed, 28 insertions(+), 18 deletions(-) diff --git a/common/kubernetes-cluster-cleanup.yml b/common/kubernetes-cluster-cleanup.yml index 87e59d31..67f6151b 100644 --- a/common/kubernetes-cluster-cleanup.yml +++ b/common/kubernetes-cluster-cleanup.yml @@ -9,7 +9,11 @@ register: kubectl_node_list - name: generate list of nodes to be removed - loop: "{{ kubectl_node_list.stdout_lines | map('replace', 'node/', '') | list | difference(groups['_kubernetes_nodes_']) }}" + 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 }}" + + - 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') }}" add_host: name: "{{ item }}" inventory_dir: "{{ hostvars[item].inventory_dir }}" @@ -17,7 +21,7 @@ changed_when: False - name: drain superflous nodes - loop: "{{ groups['_kubernetes_nodes_prune_'] | default([]) }}" + loop: "{{ kubernetes_nodes_to_delete }}" command: "kubectl drain {{ item }} --delete-local-data --force --ignore-daemonsets" - name: prune superflous nodes from cluster diff --git a/inventory/group_vars/k8s-emc/vars.yml b/inventory/group_vars/k8s-emc/vars.yml index 2a41746b..aa46fb56 100644 --- a/inventory/group_vars/k8s-emc/vars.yml +++ b/inventory/group_vars/k8s-emc/vars.yml @@ -1,4 +1,6 @@ --- +kubernetes_node_name: "{{ inventory_hostname | replace('ele-', '') }}" + kubernetes_version: 1.24.3 kubernetes_cri_tools_pkg_version: 1.24.2-00 kubernetes_container_runtime: containerd diff --git a/inventory/group_vars/kubernetes-cluster/vars.yml b/inventory/group_vars/kubernetes-cluster/vars.yml index edec4e3e..3b91f793 100644 --- a/inventory/group_vars/kubernetes-cluster/vars.yml +++ b/inventory/group_vars/kubernetes-cluster/vars.yml @@ -1,4 +1,6 @@ --- +kubernetes_node_name: "{{ inventory_hostname }}" + kubernetes_network_plugin_replaces_kube_proxy: false kubernetes_network_plugin_variant: default diff --git a/inventory/hosts.ini b/inventory/hosts.ini index 9f1ad97f..1b6fb279 100644 --- a/inventory/hosts.ini +++ b/inventory/hosts.ini @@ -262,7 +262,9 @@ ele-emc-r0 host_name=emc-r0 [elevate-mediachannel-edge] ele-emc-e01 host_name=emc-e01 ele-emc-e02 host_name=emc-e02 -#ele-emc-e03 host_name=emc-e03 + +#[elevate-mediachannel_todelete] +#ele-emc-e03 host_name=emc-e03 kubernetes_node_name=emc-e03 ############################### diff --git a/roles/kubernetes/kubeadm/control-plane/tasks/main.yml b/roles/kubernetes/kubeadm/control-plane/tasks/main.yml index fbfc4027..b6160dab 100644 --- a/roles/kubernetes/kubeadm/control-plane/tasks/main.yml +++ b/roles/kubernetes/kubeadm/control-plane/tasks/main.yml @@ -22,7 +22,7 @@ - name: check if control-plane node is tainted (1/2) - command: "kubectl --kubeconfig /etc/kubernetes/admin.conf get node {{ inventory_hostname }} -o json" + command: "kubectl --kubeconfig /etc/kubernetes/admin.conf get node {{ kubernetes_node_name }} -o json" check_mode: no register: kubectl_get_node changed_when: False @@ -36,22 +36,22 @@ block: - name: remove control-plane taint from node when: "'node-role.kubernetes.io/control-plane' in kube_node_taints" - command: "kubectl --kubeconfig /etc/kubernetes/admin.conf taint nodes {{ inventory_hostname }} node-role.kubernetes.io/control-plane-" + command: "kubectl --kubeconfig /etc/kubernetes/admin.conf taint nodes {{ kubernetes_node_name }} node-role.kubernetes.io/control-plane-" - name: remove deprecated master taint from node when: "'node-role.kubernetes.io/master' in kube_node_taints" - command: "kubectl --kubeconfig /etc/kubernetes/admin.conf taint nodes {{ inventory_hostname }} node-role.kubernetes.io/master-" + command: "kubectl --kubeconfig /etc/kubernetes/admin.conf taint nodes {{ kubernetes_node_name }} node-role.kubernetes.io/master-" - name: add taint from control-plane node when: kubernetes.dedicated_controlplane_nodes block: - name: add control-plane taint to node when: "'node-role.kubernetes.io/control-plane' not in kube_node_taints" - command: "kubectl --kubeconfig /etc/kubernetes/admin.conf taint nodes {{ inventory_hostname }} node-role.kubernetes.io/control-plane='':NoSchedule" + command: "kubectl --kubeconfig /etc/kubernetes/admin.conf taint nodes {{ kubernetes_node_name }} node-role.kubernetes.io/control-plane='':NoSchedule" - name: add deprecated master taint to node when: "'node-role.kubernetes.io/master' not in kube_node_taints" - command: "kubectl --kubeconfig /etc/kubernetes/admin.conf taint nodes {{ inventory_hostname }} node-role.kubernetes.io/master='':NoSchedule" + command: "kubectl --kubeconfig /etc/kubernetes/admin.conf taint nodes {{ kubernetes_node_name }} node-role.kubernetes.io/master='':NoSchedule" - name: prepare kubectl (1/2) file: @@ -66,8 +66,8 @@ - name: add kubectl completion config for shells loop: - - zsh - - bash + - zsh + - bash blockinfile: path: "/root/.{{ item }}rc" create: yes diff --git a/roles/kubernetes/kubeadm/control-plane/tasks/primary.yml b/roles/kubernetes/kubeadm/control-plane/tasks/primary.yml index 4204c07d..cbad58d9 100644 --- a/roles/kubernetes/kubeadm/control-plane/tasks/primary.yml +++ b/roles/kubernetes/kubeadm/control-plane/tasks/primary.yml @@ -71,7 +71,7 @@ kubernetes_current_nodes: "{{ kubectl_node_list.stdout_lines | map('replace', 'node/', '') | list }}" - name: create bootstrap token for existing cluster - when: "groups['_kubernetes_nodes_'] | difference(kubernetes_current_nodes) | length > 0" + when: "groups['_kubernetes_nodes_'] | map('extract', hostvars, 'kubernetes_node_name') | difference(kubernetes_current_nodes) | length > 0" command: kubeadm token create --ttl 42m check_mode: no register: kubeadm_token_create @@ -93,12 +93,12 @@ changed_when: False - name: set variables needed by kubernetes/nodes to join the cluster + loop: "{{ groups['_kubernetes_nodes_'] }}" + delegate_to: "{{ item }}" + delegate_facts: True set_fact: kube_bootstrap_token: "{% if kubeadm_token_generate.stdout is defined %}{{ kubeadm_token_generate.stdout }}{% elif kubeadm_token_create.stdout is defined %}{{ kubeadm_token_create.stdout }}{% endif %}" kube_bootstrap_ca_cert_hash: "sha256:{{ kube_ca_openssl.stdout }}" - delegate_to: "{{ item }}" - delegate_facts: True - loop: "{{ groups['_kubernetes_nodes_'] }}" ## install node-local-dns 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 b6743282..23cd36e6 100644 --- a/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-init.config.j2 +++ b/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-init.config.j2 @@ -16,7 +16,7 @@ skipPhases: - addon/kube-proxy {% endif %} nodeRegistration: - name: "{{ inventory_hostname }}" + name: "{{ kubernetes_node_name }}" criSocket: "{{ kubernetes_cri_socket }}" {% if kubernetes_overlay_node_ip is defined %} kubeletExtraArgs: 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 77ad480b..77da9021 100644 --- a/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-join.config.j2 +++ b/roles/kubernetes/kubeadm/control-plane/templates/kubeadm-join.config.j2 @@ -16,7 +16,7 @@ controlPlane: advertiseAddress: "{{ kubernetes_overlay_node_ip }}" {% endif %} nodeRegistration: - name: "{{ inventory_hostname }}" + name: "{{ kubernetes_node_name }}" criSocket: "{{ kubernetes_cri_socket }}" {% if kubernetes_overlay_node_ip is defined %} kubeletExtraArgs: diff --git a/roles/kubernetes/kubeadm/prune/tasks/main.yml b/roles/kubernetes/kubeadm/prune/tasks/main.yml index 45020963..1c746294 100644 --- a/roles/kubernetes/kubeadm/prune/tasks/main.yml +++ b/roles/kubernetes/kubeadm/prune/tasks/main.yml @@ -3,7 +3,7 @@ run_once: true delegate_to: "{{ groups['_kubernetes_primary_controlplane_node_'] | first }}" loop: "{{ groups['_kubernetes_nodes_prune_'] | default([]) }}" - command: "kubectl delete node {{ item }}" + command: "kubectl 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 451498cd..70314fde 100644 --- a/roles/kubernetes/kubeadm/worker/templates/kubeadm.config.j2 +++ b/roles/kubernetes/kubeadm/worker/templates/kubeadm.config.j2 @@ -9,7 +9,7 @@ discovery: caCertHashes: - "{{ kube_bootstrap_ca_cert_hash }}" nodeRegistration: - name: "{{ inventory_hostname }}" + name: "{{ kubernetes_node_name }}" criSocket: "{{ kubernetes_cri_socket }}" {% if kubernetes_overlay_node_ip is defined %} kubeletExtraArgs: -- cgit v1.2.3