147 lines
5.3 KiB
YAML
147 lines
5.3 KiB
YAML
---
|
||
# 单文件化说明:
|
||
# - 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
|
||
|