从旧工作区 chore/recover-old-workspace 清理时保存,内容与 2026-09-17
stash@{0} 快照中的版本一致;未合并、未在 main 上使用,仅作参考,不开 PR。
被 gitignore 的 tfstate 与凭据文件不在此分支,仍留在本地工作区。
Co-Authored-By: Claude Opus 5.5 <[email protected]>
138 lines
4.3 KiB
YAML
138 lines
4.3 KiB
YAML
---
|
|
- name: Create the disposable Kata LXC worker
|
|
hosts: pve2
|
|
gather_facts: false
|
|
vars:
|
|
kata_lxc_id: 147
|
|
kata_lxc_template: laptop:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst
|
|
tasks:
|
|
- name: Check whether the LXC already exists
|
|
ansible.builtin.stat:
|
|
path: /etc/pve/lxc/{{ kata_lxc_id }}.conf
|
|
register: kata_lxc_config
|
|
|
|
- name: Create privileged LXC with Kata host devices
|
|
ansible.builtin.command:
|
|
argv:
|
|
- pct
|
|
- create
|
|
- "{{ kata_lxc_id }}"
|
|
- "{{ kata_lxc_template }}"
|
|
- --hostname
|
|
- kata-lxc-lab
|
|
- --ostype
|
|
- ubuntu
|
|
- --rootfs
|
|
- local-lvm:12
|
|
- --cores
|
|
- "4"
|
|
- --memory
|
|
- "8192"
|
|
- --swap
|
|
- "0"
|
|
- --net0
|
|
- name=eth0,bridge=vmbr0,ip=dhcp
|
|
- --features
|
|
- nesting=1,keyctl=1,fuse=1,mknod=1,force_rw_sys=1
|
|
- --unprivileged
|
|
- "0"
|
|
- --onboot
|
|
- "0"
|
|
- --ssh-public-keys
|
|
- /root/.ssh/authorized_keys
|
|
- --dev0
|
|
- path=/dev/kvm,mode=0660
|
|
- --dev1
|
|
- path=/dev/vhost-net,mode=0660
|
|
- --dev2
|
|
- path=/dev/vhost-vsock,mode=0660
|
|
- --dev3
|
|
- path=/dev/kmsg,mode=0660
|
|
- --dev4
|
|
- path=/dev/net/tun,mode=0666
|
|
- --tags
|
|
- disposable;kata;lxc;ansible
|
|
when: not kata_lxc_config.stat.exists
|
|
|
|
- name: Read LXC status
|
|
ansible.builtin.command:
|
|
cmd: pct status {{ kata_lxc_id }}
|
|
register: kata_lxc_status
|
|
changed_when: false
|
|
|
|
- name: Read current LXC configuration
|
|
ansible.builtin.command:
|
|
cmd: pct config {{ kata_lxc_id }}
|
|
register: kata_lxc_current_config
|
|
changed_when: false
|
|
|
|
- name: Ensure kubelet kernel log device is present
|
|
ansible.builtin.command:
|
|
cmd: pct set {{ kata_lxc_id }} --dev3 path=/dev/kmsg,mode=0660
|
|
register: kata_lxc_kmsg
|
|
when: "'/dev/kmsg' not in kata_lxc_current_config.stdout"
|
|
|
|
- name: Enable writable sysctls required by kubelet
|
|
ansible.builtin.command:
|
|
cmd: >-
|
|
pct set {{ kata_lxc_id }} --features
|
|
nesting=1,keyctl=1,fuse=1,mknod=1,force_rw_sys=1
|
|
register: kata_lxc_rw_sys
|
|
when: "'force_rw_sys=1' not in kata_lxc_current_config.stdout"
|
|
|
|
- name: Ensure TUN device required by Kata networking is present
|
|
ansible.builtin.command:
|
|
cmd: pct set {{ kata_lxc_id }} --dev4 path=/dev/net/tun,mode=0666
|
|
register: kata_lxc_tun
|
|
when: "'/dev/net/tun' not in kata_lxc_current_config.stdout"
|
|
|
|
- name: Configure privileged nested-runtime LXC directives
|
|
ansible.builtin.lineinfile:
|
|
path: /etc/pve/lxc/{{ kata_lxc_id }}.conf
|
|
regexp: "^{{ item.key | regex_escape }}:"
|
|
line: "{{ item.key }}: {{ item.value }}"
|
|
loop:
|
|
- key: lxc.apparmor.profile
|
|
value: unconfined
|
|
- key: lxc.cgroup2.devices.allow
|
|
value: a
|
|
- key: lxc.cap.drop
|
|
value: ""
|
|
- key: lxc.mount.auto
|
|
value: proc:rw sys:rw
|
|
register: kata_lxc_raw_config
|
|
|
|
- name: Restart LXC after device configuration change
|
|
ansible.builtin.command:
|
|
cmd: pct reboot {{ kata_lxc_id }}
|
|
when: >-
|
|
kata_lxc_kmsg.changed or kata_lxc_rw_sys.changed or kata_lxc_tun.changed or
|
|
kata_lxc_raw_config.changed
|
|
|
|
- name: Start LXC
|
|
ansible.builtin.command:
|
|
cmd: pct start {{ kata_lxc_id }}
|
|
when: "'status: stopped' in kata_lxc_status.stdout"
|
|
|
|
- name: Wait for systemd in LXC
|
|
ansible.builtin.command:
|
|
cmd: pct exec {{ kata_lxc_id }} -- systemctl is-system-running --wait
|
|
register: kata_lxc_systemd
|
|
retries: 30
|
|
delay: 2
|
|
until: kata_lxc_systemd.rc in [0, 1]
|
|
changed_when: false
|
|
failed_when: kata_lxc_systemd.rc not in [0, 1]
|
|
|
|
- name: Show LXC address and Kata devices
|
|
ansible.builtin.command:
|
|
cmd: >-
|
|
pct exec {{ kata_lxc_id }} -- sh -c
|
|
'hostname -I; ls -l /dev/kvm /dev/vhost-net /dev/vhost-vsock /dev/net/tun'
|
|
register: kata_lxc_facts
|
|
changed_when: false
|
|
|
|
- name: Report LXC address and devices
|
|
ansible.builtin.debug:
|
|
var: kata_lxc_facts.stdout_lines
|