forked from tim/k3s-ansible
9b220c1629
- 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
147 lines
3.8 KiB
YAML
147 lines
3.8 KiB
YAML
---
|
|
# Download logs of k3s-init.service from the nodes to localhost.
|
|
# Note that log_destination must be set.
|
|
|
|
- name: Fetch k3s-init.service logs
|
|
ansible.builtin.command:
|
|
cmd: >-
|
|
timeout --signal=TERM --kill-after=5s 30s journalctl --no-pager
|
|
--unit=k3s-init.service --since=-30min --lines=5000
|
|
changed_when: false
|
|
failed_when: false
|
|
no_log: true
|
|
register: k3s_init_log
|
|
|
|
- name: Fetch k3s-init.service status
|
|
ansible.builtin.command:
|
|
cmd: >-
|
|
timeout --signal=TERM --kill-after=5s 15s systemctl status
|
|
k3s-init.service --no-pager --full
|
|
changed_when: false
|
|
failed_when: false
|
|
no_log: true
|
|
register: k3s_init_status
|
|
|
|
- name: Fetch IP address state
|
|
ansible.builtin.command:
|
|
cmd: ip -br address
|
|
changed_when: false
|
|
failed_when: false
|
|
no_log: true
|
|
register: k3s_ip_address_state
|
|
|
|
- name: Fetch IP route state
|
|
ansible.builtin.command:
|
|
cmd: ip route show
|
|
changed_when: false
|
|
failed_when: false
|
|
no_log: true
|
|
register: k3s_ip_route_state
|
|
|
|
- name: Fetch IP neighbor state
|
|
ansible.builtin.command:
|
|
cmd: ip neigh show
|
|
changed_when: false
|
|
failed_when: false
|
|
no_log: true
|
|
register: k3s_ip_neighbor_state
|
|
|
|
- name: Fetch IP rule state
|
|
ansible.builtin.command:
|
|
cmd: ip rule show
|
|
changed_when: false
|
|
failed_when: false
|
|
no_log: true
|
|
register: k3s_ip_rule_state
|
|
|
|
- name: Fetch listening TCP sockets
|
|
ansible.builtin.command:
|
|
cmd: ss -ltn
|
|
changed_when: false
|
|
failed_when: false
|
|
no_log: true
|
|
register: k3s_tcp_listener_state
|
|
|
|
- name: Ping the primary Kubernetes API address from {{ ansible_hostname }}
|
|
ansible.builtin.command:
|
|
argv:
|
|
- ping
|
|
- -c
|
|
- "1"
|
|
- -W
|
|
- "1"
|
|
- "{{ hostvars[groups[group_name_master | default('master')][0]].k3s_node_ip | split(',') | first }}"
|
|
changed_when: false
|
|
failed_when: false
|
|
no_log: true
|
|
register: k3s_primary_api_ping
|
|
|
|
- name: Probe primary Kubernetes API from {{ ansible_hostname }}
|
|
ansible.builtin.wait_for:
|
|
host: "{{ hostvars[groups[group_name_master | default('master')][0]].k3s_node_ip | split(',') | first }}"
|
|
port: 6443
|
|
connect_timeout: 1
|
|
timeout: 2
|
|
changed_when: false
|
|
failed_when: false
|
|
no_log: true
|
|
register: k3s_primary_api_probe
|
|
|
|
- name: Create {{ log_destination }}
|
|
delegate_to: localhost
|
|
run_once: true
|
|
become: false
|
|
ansible.builtin.file:
|
|
path: "{{ log_destination }}"
|
|
state: directory
|
|
mode: "0755"
|
|
|
|
- name: Store logs to {{ log_destination }}
|
|
delegate_to: localhost
|
|
become: false
|
|
ansible.builtin.template:
|
|
src: content.j2
|
|
dest: "{{ log_destination }}/k3s-init@{{ ansible_hostname }}.log"
|
|
mode: "0644"
|
|
vars:
|
|
content: |
|
|
=== k3s-init.service status ===
|
|
{{ k3s_init_status.stdout | regex_replace('--token(?:=| +)[^ ]+', '--token ***') }}
|
|
|
|
=== k3s-init.service journal ===
|
|
{{ k3s_init_log.stdout | regex_replace('--token(?:=| +)[^ ]+', '--token ***') }}
|
|
|
|
- name: Store network diagnostics to {{ log_destination }}
|
|
delegate_to: localhost
|
|
become: false
|
|
ansible.builtin.template:
|
|
src: content.j2
|
|
dest: "{{ log_destination }}/network@{{ ansible_hostname }}.log"
|
|
mode: "0644"
|
|
vars:
|
|
content: |
|
|
=== ip -br address ===
|
|
{{ k3s_ip_address_state.stdout }}
|
|
|
|
=== ip route show ===
|
|
{{ k3s_ip_route_state.stdout }}
|
|
|
|
=== ip neigh show ===
|
|
{{ k3s_ip_neighbor_state.stdout }}
|
|
|
|
=== ip rule show ===
|
|
{{ k3s_ip_rule_state.stdout }}
|
|
|
|
=== ss -ltn ===
|
|
{{ k3s_tcp_listener_state.stdout }}
|
|
|
|
=== primary API ping ===
|
|
rc={{ k3s_primary_api_ping.rc }}
|
|
{{ k3s_primary_api_ping.stdout }}
|
|
{{ k3s_primary_api_ping.stderr }}
|
|
|
|
=== primary API probe ===
|
|
failed={{ k3s_primary_api_probe.failed | default(false) }}
|
|
elapsed={{ k3s_primary_api_probe.elapsed | default('unknown') }}
|
|
msg={{ k3s_primary_api_probe.msg | default('connected') }}
|