fix(k3s-server): serialize master joins and capture diagnostics

- validate host-only connectivity before cluster bootstrap\n- materialize per-host join arguments and wait for sequential registration\n- collect bounded network diagnostics when k3s initialization fails
This commit is contained in:
Timothy Stewart
2026-07-31 19:05:35 -05:00
committed by Techno Tim
parent a0d78ff317
commit 9b220c1629
4 changed files with 177 additions and 46 deletions
+3 -19
View File
@@ -1,34 +1,18 @@
---
- name: Verify primary Kubernetes API is reachable from {{ joining_master }}
ansible.builtin.wait_for:
host: "{{ hostvars[groups[group_name_master | default('master')][0]].k3s_node_ip | split(',') | first }}"
port: 6443
connect_timeout: 5
timeout: "{{ retry_count | default(20) * 2 }}"
delegate_to: "{{ joining_master }}"
- name: Join transient k3s-init service for {{ joining_master }}
ansible.builtin.command:
cmd: >-
systemd-run -p RestartSec=2 -p Restart=on-failure --unit=k3s-init
k3s server {{ joining_server_args }}
k3s server {{ hostvars[joining_master].k3s_server_init_args }}
creates: "{{ systemd_dir }}/k3s-init.service"
delegate_to: "{{ joining_master }}"
no_log: true
vars:
primary_master: "{{ groups[group_name_master | default('master')][0] }}"
primary_master_api: >-
{{ hostvars[primary_master].k3s_node_ip | split(',') | first | ansible.utils.ipwrap }}
joining_server_args: >-
{{ hostvars[joining_master].server_init_args | default('--server https://' +
primary_master_api + ':6443 --token ' +
(hostvars[joining_master].k3s_token | default(k3s_token)) + ' ' +
(hostvars[joining_master].extra_server_args | default(''))) }}
- name: Wait for primary registration of {{ joining_master }}
ansible.builtin.command:
cmd: >-
{{ k3s_kubectl_binary | default('k3s kubectl') }} get node {{ joining_master }}
{{ k3s_kubectl_binary | default('k3s kubectl') }} get node
{{ hostvars[joining_master].ansible_hostname }}
delegate_to: "{{ groups[group_name_master | default('master')][0] }}"
register: joined_master
until: joined_master.rc == 0