--- # 单文件化说明: # - 01-06.yml 默认仍做“最小 verify”(kube-system pods) # - 如需“准备数据盘/安装 K3s”,必须显式开启开关: # -e k3s_do_prepare_storage=true # 内联原 01-06-prepare-storage.yml # -e k3s_do_install=true # 内联原 01-06-install.yml - name: Prepare data disk and mount to k3s_data_dir (opt-in) hosts: k3s_nodes become: true vars: k3s_do_prepare_storage: "{{ k3s_do_prepare_storage | default(false) | bool }}" pre_tasks: - name: Gate - skip prepare storage when k3s_do_prepare_storage=false when: not k3s_do_prepare_storage block: - ansible.builtin.debug: msg: "[GATE] skipped doc_id=01-06 action=prepare-storage var=k3s_do_prepare_storage" - meta: end_play tasks: - name: Skip notice when storage prep disabled ansible.builtin.debug: msg: "k3s_prepare_storage is false — skipping (see group_vars/all.yml)" when: not (k3s_prepare_storage | default(false) | bool) - name: Prepare block storage for k3s_data_dir when: k3s_prepare_storage | default(false) | bool block: - name: Require k3s_data_disk_device when k3s_prepare_storage is true ansible.builtin.assert: that: - k3s_data_disk_device is defined - (k3s_data_disk_device | string | length) > 0 fail_msg: "Set k3s_data_disk_device (e.g. /dev/vdb) in group_vars or host_vars" - name: Verify k3s_data_disk_device is a block device ansible.builtin.command: test -b {{ k3s_data_disk_device }} changed_when: false - name: Check whether k3s_data_dir is already a mountpoint ansible.builtin.command: mountpoint -q {{ k3s_data_dir }} register: mp_k3s changed_when: false failed_when: false - name: Skip when k3s_data_dir already mounted ansible.builtin.debug: msg: "{{ k3s_data_dir }} already mounted — skipping partitioning on {{ inventory_hostname }}" when: mp_k3s.rc == 0 - name: Install partitioning and filesystem tools ansible.builtin.package: name: - parted - e2fsprogs state: present when: mp_k3s.rc != 0 - name: Compute first partition path (nvme*n* -> p1, else 1) ansible.builtin.set_fact: k3s_data_partition: >- {{ k3s_data_disk_device }}{{ 'p1' if (k3s_data_disk_device | regex_search('nvme[0-9]+n[0-9]+$')) else '1' }} when: mp_k3s.rc != 0 - name: Create GPT and single ext4 partition ansible.builtin.command: >- parted -s {{ k3s_data_disk_device }} mklabel gpt mkpart primary ext4 0% 100% args: creates: "{{ k3s_data_partition }}" when: mp_k3s.rc != 0 - name: Wait for partition node in /dev ansible.builtin.wait_for: path: "{{ k3s_data_partition }}" state: present timeout: 60 when: mp_k3s.rc != 0 - name: Detect existing filesystem on partition ansible.builtin.command: blkid -s TYPE -o value {{ k3s_data_partition }} register: fs_type changed_when: false failed_when: false when: mp_k3s.rc != 0 - name: Create ext4 on partition ansible.builtin.command: mkfs.ext4 -F {{ k3s_data_partition }} when: - mp_k3s.rc != 0 - (fs_type.stdout | default('') | trim | length) == 0 - name: Read UUID of partition ansible.builtin.command: blkid -s UUID -o value {{ k3s_data_partition }} register: blk_uuid changed_when: false when: mp_k3s.rc != 0 - name: Ensure mount directory exists ansible.builtin.file: path: "{{ k3s_data_dir }}" state: directory mode: "0755" when: mp_k3s.rc != 0 - name: Add fstab entry for k3s_data_dir ansible.builtin.lineinfile: path: /etc/fstab regexp: "^UUID={{ blk_uuid.stdout | trim }}\\s" line: "UUID={{ blk_uuid.stdout | trim }} {{ k3s_data_dir }} ext4 defaults,nofail 0 2" create: true mode: "0644" when: mp_k3s.rc != 0 - name: Mount all from fstab ansible.builtin.command: mount -a changed_when: true when: mp_k3s.rc != 0 - name: Install K3s (opt-in) hosts: k3s_nodes become: true vars: k3s_do_install: "{{ k3s_do_install | default(false) | bool }}" pre_tasks: - name: Gate - skip install when k3s_do_install=false when: not k3s_do_install block: - ansible.builtin.debug: msg: "[GATE] skipped doc_id=01-06 action=install var=k3s_do_install" - meta: end_play tasks: - name: Placeholder (install content inlined in following plays) ansible.builtin.debug: msg: "[RUN] doc_id=01-06 action=install-start" - name: "01-06 k3s baseline verify (kube-system pods)" hosts: k3s_server become: true run_once: true vars: k3s_kubeconfig: /etc/rancher/k3s/k3s.yaml tasks: - name: kube-system pods summary ansible.builtin.shell: KUBECONFIG={{ k3s_kubeconfig }} kubectl get pods -n kube-system -o wide changed_when: false