Merge pull request #43 from svc-design/codex/convert-existing-tasks-to-role-structure
Add microk8s node setup role
This commit is contained in:
commit
88955b78a3
3
playbooks/roles/vhosts/k8s-node/defaults/main.yml
Normal file
3
playbooks/roles/vhosts/k8s-node/defaults/main.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
username: "{{ user }}"
|
||||||
|
ssh_public_keys: "{{ ssh_keys }}"
|
||||||
|
enable_gpu: "{{ gpu_enabled | default(false) }}"
|
||||||
65
playbooks/roles/vhosts/k8s-node/tasks/apt_setup.yml
Normal file
65
playbooks/roles/vhosts/k8s-node/tasks/apt_setup.yml
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
- name: Update apt cache
|
||||||
|
apt:
|
||||||
|
update_cache: yes
|
||||||
|
|
||||||
|
- name: Gather package facts
|
||||||
|
package_facts:
|
||||||
|
manager: auto
|
||||||
|
|
||||||
|
- name: Stop and disable unattended upgrades
|
||||||
|
systemd:
|
||||||
|
name: unattended-upgrades
|
||||||
|
state: stopped
|
||||||
|
enabled: no
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Remove old containerd if exists
|
||||||
|
apt:
|
||||||
|
name: containerd.io
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Remove unwanted files in sources.list.d
|
||||||
|
find:
|
||||||
|
paths: /etc/apt/sources.list.d
|
||||||
|
patterns:
|
||||||
|
- "*"
|
||||||
|
excludes:
|
||||||
|
- "ubuntu.sources"
|
||||||
|
- "cuda-*.list"
|
||||||
|
- "deadsnakes.list"
|
||||||
|
- "docker.list"
|
||||||
|
- "nvidia-docker-container.list"
|
||||||
|
file_type: file
|
||||||
|
register: apt_files_to_remove
|
||||||
|
|
||||||
|
- name: Delete found files
|
||||||
|
file:
|
||||||
|
path: "{{ item.path }}"
|
||||||
|
state: absent
|
||||||
|
with_items: "{{ apt_files_to_remove.files }}"
|
||||||
|
|
||||||
|
- name: Remove proxy configuration files
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: absent
|
||||||
|
with_fileglob:
|
||||||
|
- "/etc/apt/apt.conf.d/*proxy*"
|
||||||
|
|
||||||
|
- name: Remove proxy settings from apt.conf
|
||||||
|
lineinfile:
|
||||||
|
path: /etc/apt/apt.conf
|
||||||
|
regexp: "{{ item }}"
|
||||||
|
state: absent
|
||||||
|
with_items:
|
||||||
|
- 'Acquire::http::Proxy'
|
||||||
|
- 'Acquire::https::Proxy'
|
||||||
|
when: ansible_path_apt_conf.stat.exists is defined and ansible_path_apt_conf.stat.exists
|
||||||
|
|
||||||
|
- name: Unset all snap proxy settings
|
||||||
|
command: snap unset system {{ item }}
|
||||||
|
loop:
|
||||||
|
- proxy.http
|
||||||
|
- proxy.https
|
||||||
|
- proxy.no-proxy
|
||||||
|
changed_when: true
|
||||||
|
ignore_errors: true
|
||||||
33
playbooks/roles/vhosts/k8s-node/tasks/containerd.yml
Normal file
33
playbooks/roles/vhosts/k8s-node/tasks/containerd.yml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
- name: Install NVIDIA Container Toolkit
|
||||||
|
apt:
|
||||||
|
name: nvidia-container-toolkit
|
||||||
|
state: present
|
||||||
|
when: gpu_enabled | bool
|
||||||
|
|
||||||
|
- name: Configure NVIDIA Container Toolkit
|
||||||
|
shell: |
|
||||||
|
nvidia-ctk runtime configure --runtime=docker --set-as-default
|
||||||
|
nvidia-ctk runtime configure --runtime=containerd --set-as-default
|
||||||
|
nvidia-ctk runtime configure --runtime=crio --set-as-default --config=/etc/crio/crio.conf.d/99-nvidia.conf
|
||||||
|
register: container_runtime
|
||||||
|
when: gpu_enabled | bool
|
||||||
|
|
||||||
|
- name: Find all microk8s services
|
||||||
|
shell: systemctl list-units --full --all "snap.microk8s.*" --plain --no-legend | awk '{print $1}'
|
||||||
|
register: microk8s_services
|
||||||
|
|
||||||
|
- name: Restart all microk8s services
|
||||||
|
systemd:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: restarted
|
||||||
|
loop: "{{ microk8s_services.stdout_lines }}"
|
||||||
|
when: container_runtime.changed
|
||||||
|
|
||||||
|
- name: Fix containerd
|
||||||
|
shell: |
|
||||||
|
DISABLED=$(egrep 'disabled_plugins' /etc/containerd/config.toml | grep -v 'disabled_plugins = []')
|
||||||
|
if [ ! -z "$PKGS" ]; then
|
||||||
|
perl -pi -e 's/^\s*disabled_plugins\s*=.*/##disabled_plugins = []/g' /etc/containerd/config.toml
|
||||||
|
systemctl restart containerd
|
||||||
|
fi
|
||||||
|
|
||||||
74
playbooks/roles/vhosts/k8s-node/tasks/gpu.yml
Normal file
74
playbooks/roles/vhosts/k8s-node/tasks/gpu.yml
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
- name: Check CUDA installation
|
||||||
|
apt:
|
||||||
|
name: cuda-toolkit-{{ cuda_version }}
|
||||||
|
state: present
|
||||||
|
check_mode: yes
|
||||||
|
register: cuda_check
|
||||||
|
ignore_errors: yes
|
||||||
|
when: enable_gpu | bool
|
||||||
|
|
||||||
|
- name: Purge existing NVIDIA/CUDA packages
|
||||||
|
shell: |
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
export NEEDRESTART_SUSPEND=y
|
||||||
|
PKGS=$(dpkg --list | egrep -i 'cuda|nvidia' | egrep -v 'nvidia-kernel|linux-(nvidia|modules|headers|image)' | awk '{print $2}' )
|
||||||
|
if [ ! -z "$PKGS" ]; then
|
||||||
|
echo "$PKGS" | xargs apt -y remove --allow-change-held-packages
|
||||||
|
echo "$PKGS" | xargs dpkg --purge
|
||||||
|
fi
|
||||||
|
ignore_errors: yes
|
||||||
|
register: gpu_setup
|
||||||
|
when: not skip_cuda | bool and (gpu_enabled | bool) and (cuda_check.failed or cuda_check.changed)
|
||||||
|
|
||||||
|
- name: Download and install CUDA keyring
|
||||||
|
block:
|
||||||
|
- get_url:
|
||||||
|
url: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu{{ ubuntu_major }}{{ ubuntu_minor }}/x86_64/cuda-keyring_1.1-1_all.deb
|
||||||
|
dest: /tmp/cuda-keyring.deb
|
||||||
|
- apt:
|
||||||
|
deb: /tmp/cuda-keyring.deb
|
||||||
|
when: gpu_enabled | bool
|
||||||
|
|
||||||
|
- name: Update apt cache
|
||||||
|
apt:
|
||||||
|
update_cache: yes
|
||||||
|
when: gpu_enabled | bool
|
||||||
|
|
||||||
|
- name: GPU Setup Tasks
|
||||||
|
when: enable_gpu | bool and not skip_cuda | bool
|
||||||
|
block:
|
||||||
|
- name: Install NVIDIA packages
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- cuda-toolkit-{{ cuda_version }}
|
||||||
|
- nvidia-open
|
||||||
|
- nvidia-fabricmanager-{{ nvidia_version }}
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Configure NVIDIA Fabric Manager
|
||||||
|
systemd:
|
||||||
|
name: nvidia-fabricmanager
|
||||||
|
enabled: yes
|
||||||
|
masked: no
|
||||||
|
|
||||||
|
- name: Set NVIDIA device permissions
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
mode: '0666'
|
||||||
|
with_fileglob:
|
||||||
|
- /dev/nvidia*
|
||||||
|
- /dev/nvidiactl
|
||||||
|
- /dev/nvidia-uvm
|
||||||
|
- /dev/nvidia-uvm-tools
|
||||||
|
|
||||||
|
- name: Create NVIDIA character device symlinks
|
||||||
|
when: gpu_enabled | bool
|
||||||
|
shell: |
|
||||||
|
ls /dev/nvidia? | egrep 'nvidia[0-9]' | while read i
|
||||||
|
do
|
||||||
|
N=$(echo $i | sed 's#/dev/nvidia##');
|
||||||
|
MAJ=$(ls -l $i | awk '{print $5}' | cut -d, -f1)
|
||||||
|
MIN=$(ls -l $i | awk '{print $6}')
|
||||||
|
mkdir -p /dev/char/$MAJ:$MIN
|
||||||
|
ln -sf $i /dev/char/$MAJ:$MIN
|
||||||
|
done
|
||||||
23
playbooks/roles/vhosts/k8s-node/tasks/main.yml
Normal file
23
playbooks/roles/vhosts/k8s-node/tasks/main.yml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
- name: Include apt setup
|
||||||
|
import_tasks: apt_setup.yml
|
||||||
|
|
||||||
|
- name: Include user setup
|
||||||
|
import_tasks: user_setup.yml
|
||||||
|
|
||||||
|
- name: Include base packages
|
||||||
|
import_tasks: packages.yml
|
||||||
|
|
||||||
|
- name: Include GPU configuration
|
||||||
|
import_tasks: gpu.yml
|
||||||
|
|
||||||
|
- name: Include system configuration
|
||||||
|
import_tasks: system_config.yml
|
||||||
|
|
||||||
|
- name: Include reboot logic
|
||||||
|
import_tasks: reboot.yml
|
||||||
|
|
||||||
|
- name: Configure container runtime
|
||||||
|
import_tasks: containerd.yml
|
||||||
|
|
||||||
|
- name: Configure networking
|
||||||
|
import_tasks: network.yml
|
||||||
46
playbooks/roles/vhosts/k8s-node/tasks/network.yml
Normal file
46
playbooks/roles/vhosts/k8s-node/tasks/network.yml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
- name: Install iptables-persistent
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- iptables-persistent
|
||||||
|
- netfilter-persistent
|
||||||
|
state: present
|
||||||
|
when: is_primary | bool
|
||||||
|
|
||||||
|
- name: Add forwarding rule
|
||||||
|
iptables:
|
||||||
|
chain: FORWARD
|
||||||
|
in_interface: wg0
|
||||||
|
jump: ACCEPT
|
||||||
|
state: present
|
||||||
|
when: is_primary | bool
|
||||||
|
|
||||||
|
- name: Get network interface information
|
||||||
|
ansible.builtin.shell: |
|
||||||
|
ip -o link show | awk '$2 !~ /^(docker|cali|cilium|veth|vxlan|lo|wg)/ && $2 ~ /^en/ {gsub(/:/, "", $2); print $2}'
|
||||||
|
register: ethernet_interfaces
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Add NAT masquerade rules for ethernet interfaces
|
||||||
|
iptables:
|
||||||
|
table: nat
|
||||||
|
chain: POSTROUTING
|
||||||
|
out_interface: "{{ item }}"
|
||||||
|
jump: MASQUERADE
|
||||||
|
state: present
|
||||||
|
loop: "{{ ethernet_interfaces.stdout_lines }}"
|
||||||
|
when: is_primary | bool
|
||||||
|
|
||||||
|
- name: Save iptables rules
|
||||||
|
shell: |
|
||||||
|
netfilter-persistent save
|
||||||
|
netfilter-persistent reload
|
||||||
|
when: is_primary | bool
|
||||||
|
|
||||||
|
- name: Enable IP forwarding
|
||||||
|
sysctl:
|
||||||
|
name: net.ipv4.ip_forward
|
||||||
|
value: '1'
|
||||||
|
state: present
|
||||||
|
sysctl_set: yes
|
||||||
|
reload: yes
|
||||||
|
when: is_primary | bool
|
||||||
60
playbooks/roles/vhosts/k8s-node/tasks/packages.yml
Normal file
60
playbooks/roles/vhosts/k8s-node/tasks/packages.yml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
- name: Install basic system prerequisites
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- socat
|
||||||
|
- vim
|
||||||
|
- jq
|
||||||
|
- bc
|
||||||
|
- libclang-dev
|
||||||
|
- npm
|
||||||
|
- clang
|
||||||
|
- libssl-dev
|
||||||
|
- llvm
|
||||||
|
- libudev1
|
||||||
|
- protobuf-compiler
|
||||||
|
- python3
|
||||||
|
- python3-pip
|
||||||
|
- python3-venv
|
||||||
|
- docker.io
|
||||||
|
- docker-compose
|
||||||
|
- build-essential
|
||||||
|
- nginx
|
||||||
|
- redis
|
||||||
|
- net-tools
|
||||||
|
- ffmpeg
|
||||||
|
- rsyslog
|
||||||
|
- libpq-dev
|
||||||
|
- snapd
|
||||||
|
- iputils-ping
|
||||||
|
- systemd-timesyncd
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Set vim as default editor
|
||||||
|
alternatives:
|
||||||
|
name: editor
|
||||||
|
path: /usr/bin/vim
|
||||||
|
priority: 1
|
||||||
|
|
||||||
|
- name: Get list of installed lambda packages
|
||||||
|
shell: dpkg --list | grep lambda | awk '{print $2}'
|
||||||
|
register: lambda_packages
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Check if lambda version file exists
|
||||||
|
stat:
|
||||||
|
path: /etc/lambda-version
|
||||||
|
register: lambda_version_file
|
||||||
|
|
||||||
|
- name: Check if another lambda package file exists, backup
|
||||||
|
stat:
|
||||||
|
path: /etc/systemd/system/lambda-jupyter.service
|
||||||
|
register: lambda_file_backup
|
||||||
|
|
||||||
|
- name: Remove lambda packages
|
||||||
|
apt:
|
||||||
|
name: "{{ lambda_packages.stdout_lines }}"
|
||||||
|
state: absent
|
||||||
|
purge: yes
|
||||||
|
when:
|
||||||
|
- lambda_version_file.stat.exists or lambda_file_backup.stat.exists
|
||||||
|
- lambda_packages.stdout_lines | length > 0
|
||||||
33
playbooks/roles/vhosts/k8s-node/tasks/reboot.yml
Normal file
33
playbooks/roles/vhosts/k8s-node/tasks/reboot.yml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
- name: Reboot
|
||||||
|
reboot:
|
||||||
|
msg: "Rebooting..."
|
||||||
|
reboot_command: "reboot"
|
||||||
|
connect_timeout: 5
|
||||||
|
reboot_timeout: 900
|
||||||
|
pre_reboot_delay: 0
|
||||||
|
post_reboot_delay: 30
|
||||||
|
test_command: uptime
|
||||||
|
when: gpu_setup.changed or ipv6_disabled.changed
|
||||||
|
register: rebooted
|
||||||
|
|
||||||
|
- name: Wait for system to be ready
|
||||||
|
wait_for_connection:
|
||||||
|
timeout: 600
|
||||||
|
when: rebooted.changed
|
||||||
|
|
||||||
|
- name: Set hostname again just in case
|
||||||
|
systemd:
|
||||||
|
name: set-hostname
|
||||||
|
enabled: yes
|
||||||
|
state: restarted
|
||||||
|
daemon_reload: yes
|
||||||
|
when: rebooted.changed
|
||||||
|
|
||||||
|
- name: Wait for microk8s to be ready
|
||||||
|
shell: microk8s status | grep -E "microk8s is running|acting as a node in a cluster"
|
||||||
|
register: result
|
||||||
|
until: result.rc == 0
|
||||||
|
retries: 30
|
||||||
|
delay: 10
|
||||||
|
ignore_errors: yes
|
||||||
|
when: rebooted.changed
|
||||||
103
playbooks/roles/vhosts/k8s-node/tasks/system_config.yml
Normal file
103
playbooks/roles/vhosts/k8s-node/tasks/system_config.yml
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
- name: Configure file limits
|
||||||
|
blockinfile:
|
||||||
|
path: /etc/security/limits.conf
|
||||||
|
block: |
|
||||||
|
* soft nofile 40000
|
||||||
|
* hard nofile 40001
|
||||||
|
|
||||||
|
- name: Configure PAM limits
|
||||||
|
lineinfile:
|
||||||
|
path: "{{ item }}"
|
||||||
|
line: "session required pam_limits.so"
|
||||||
|
with_items:
|
||||||
|
- /etc/pam.d/common-session
|
||||||
|
- /etc/pam.d/common-session-noninteractive
|
||||||
|
|
||||||
|
- name: Set hostname
|
||||||
|
hostname:
|
||||||
|
name: "{{ inventory_hostname }}"
|
||||||
|
use: systemd
|
||||||
|
|
||||||
|
- name: Update /etc/hostname
|
||||||
|
copy:
|
||||||
|
content: "{{ inventory_hostname }}"
|
||||||
|
dest: /etc/hostname
|
||||||
|
|
||||||
|
- name: Ensure preserve_hostname is set to true
|
||||||
|
lineinfile:
|
||||||
|
path: /etc/cloud/cloud.cfg
|
||||||
|
regexp: '^preserve_hostname:'
|
||||||
|
line: 'preserve_hostname: true'
|
||||||
|
create: true
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Create hostname script
|
||||||
|
copy:
|
||||||
|
dest: /usr/local/bin/set-hostname.sh
|
||||||
|
mode: '0755'
|
||||||
|
content: |
|
||||||
|
#!/bin/bash
|
||||||
|
hostnamectl set-hostname "{{ inventory_hostname }}"
|
||||||
|
hostname "{{ inventory_hostname }}"
|
||||||
|
echo -n "{{ inventory_hostname }}" > /etc/hostname
|
||||||
|
|
||||||
|
- name: Create systemd service
|
||||||
|
copy:
|
||||||
|
dest: /etc/systemd/system/set-hostname.service
|
||||||
|
content: |
|
||||||
|
[Unit]
|
||||||
|
Description=Set system hostname on boot
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/usr/local/bin/set-hostname.sh
|
||||||
|
RemainAfterExit=yes
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
|
||||||
|
- name: Enable and start hostname service
|
||||||
|
systemd:
|
||||||
|
name: set-hostname
|
||||||
|
enabled: yes
|
||||||
|
state: started
|
||||||
|
daemon_reload: yes
|
||||||
|
|
||||||
|
- name: Configure and ensure time synchronization
|
||||||
|
block:
|
||||||
|
- name: Ensure timesyncd is installed and enabled
|
||||||
|
systemd:
|
||||||
|
name: systemd-timesyncd
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: Configure NTP servers
|
||||||
|
lineinfile:
|
||||||
|
path: /etc/systemd/timesyncd.conf
|
||||||
|
regexp: '^#?NTP='
|
||||||
|
line: 'NTP=pool.ntp.org'
|
||||||
|
|
||||||
|
- name: Force time synchronization
|
||||||
|
shell: |
|
||||||
|
timedatectl set-ntp true
|
||||||
|
systemctl restart systemd-timesyncd
|
||||||
|
|
||||||
|
- name: Disable IPv6
|
||||||
|
block:
|
||||||
|
- name: Set sysctl parameters for IPv6
|
||||||
|
sysctl:
|
||||||
|
name: "{{ item.key }}"
|
||||||
|
value: "{{ item.value }}"
|
||||||
|
state: present
|
||||||
|
sysctl_file: /etc/sysctl.d/99-disable-ipv6.conf
|
||||||
|
reload: yes
|
||||||
|
with_items:
|
||||||
|
- { key: "net.ipv6.conf.all.disable_ipv6", value: "1" }
|
||||||
|
- { key: "net.ipv6.conf.default.disable_ipv6", value: "1" }
|
||||||
|
- { key: "net.ipv6.conf.lo.disable_ipv6", value: "1" }
|
||||||
|
register: ipv6_disabled
|
||||||
|
become: yes
|
||||||
|
when: not ipv6_enabled | bool
|
||||||
36
playbooks/roles/vhosts/k8s-node/tasks/user_setup.yml
Normal file
36
playbooks/roles/vhosts/k8s-node/tasks/user_setup.yml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
- name: Create user
|
||||||
|
user:
|
||||||
|
name: "{{ username }}"
|
||||||
|
shell: /bin/bash
|
||||||
|
create_home: yes
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Create SSH directories
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
mode: '0700'
|
||||||
|
with_items:
|
||||||
|
- "/home/{{ username }}/.ssh"
|
||||||
|
- "/root/.ssh"
|
||||||
|
|
||||||
|
- name: Add authorized SSH keys
|
||||||
|
authorized_key:
|
||||||
|
user: "{{ user }}"
|
||||||
|
state: present
|
||||||
|
key: "{{ item }}"
|
||||||
|
with_items: "{{ ssh_public_keys }}"
|
||||||
|
become: yes
|
||||||
|
|
||||||
|
- name: Set correct ownership for user home
|
||||||
|
file:
|
||||||
|
path: "/home/{{ username }}"
|
||||||
|
owner: "{{ username }}"
|
||||||
|
group: "{{ username }}"
|
||||||
|
recurse: yes
|
||||||
|
|
||||||
|
- name: Add user to sudoers
|
||||||
|
lineinfile:
|
||||||
|
path: /etc/sudoers
|
||||||
|
line: '{{ username }} ALL=(ALL) NOPASSWD:ALL'
|
||||||
|
validate: 'visudo -cf %s'
|
||||||
1
playbooks/roles/vhosts/sealos-k8s/defaults/main.yml
Normal file
1
playbooks/roles/vhosts/sealos-k8s/defaults/main.yml
Normal file
@ -0,0 +1 @@
|
|||||||
|
microk8s_channel: "1.31/stable"
|
||||||
115
playbooks/roles/vhosts/sealos-k8s/tasks/main.yml
Normal file
115
playbooks/roles/vhosts/sealos-k8s/tasks/main.yml
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
- name: Install MicroK8s
|
||||||
|
community.general.snap:
|
||||||
|
name: microk8s
|
||||||
|
channel: "{{ microk8s_channel }}"
|
||||||
|
classic: yes
|
||||||
|
|
||||||
|
- name: Start MicroK8s
|
||||||
|
shell: microk8s status | grep "microk8s is running" || microk8s start
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Configure wireguard IP for k8s comms
|
||||||
|
block:
|
||||||
|
- name: Get current kubelet args
|
||||||
|
slurp:
|
||||||
|
src: /var/snap/microk8s/current/args/kubelet
|
||||||
|
register: kubelet_args
|
||||||
|
|
||||||
|
- name: Get current kube-apiserver args
|
||||||
|
slurp:
|
||||||
|
src: /var/snap/microk8s/current/args/kube-apiserver
|
||||||
|
register: kubeapi_args
|
||||||
|
|
||||||
|
- name: Check if node-ip is already configured
|
||||||
|
set_fact:
|
||||||
|
has_node_ip: "{{ (kubelet_args.content | b64decode) is regex('--node-ip=') }}"
|
||||||
|
|
||||||
|
- name: Check if advertise-addr is already configured
|
||||||
|
set_fact:
|
||||||
|
has_adv_ip: "{{ (kubeapi_args.content | b64decode) is regex('--advertise-address=') }}"
|
||||||
|
|
||||||
|
- name: Add node-ip to kubelet args
|
||||||
|
lineinfile:
|
||||||
|
path: /var/snap/microk8s/current/args/kubelet
|
||||||
|
line: "--node-ip={{ wireguard_ip }}"
|
||||||
|
create: yes
|
||||||
|
when: not has_node_ip
|
||||||
|
register: kubelet_modified
|
||||||
|
|
||||||
|
- name: Add advertise-address to kubeapi args
|
||||||
|
lineinfile:
|
||||||
|
path: /var/snap/microk8s/current/args/kube-apiserver
|
||||||
|
line: "--advertise-address={{ wireguard_ip }}"
|
||||||
|
create: yes
|
||||||
|
when: not has_adv_ip
|
||||||
|
register: kubeapi_modified
|
||||||
|
|
||||||
|
- name: Restart kubelet if config changed
|
||||||
|
systemd:
|
||||||
|
name: snap.microk8s.daemon-kubelite
|
||||||
|
state: restarted
|
||||||
|
when: kubelet_modified.changed or kubeapi_modified.changed
|
||||||
|
|
||||||
|
- name: Setup Kubernetes access for user
|
||||||
|
block:
|
||||||
|
- name: Add user to microk8s group
|
||||||
|
user:
|
||||||
|
name: "{{ item }}"
|
||||||
|
groups: microk8s
|
||||||
|
append: yes
|
||||||
|
with_items:
|
||||||
|
- "{{ username }}"
|
||||||
|
- "{{ ansible_user }}"
|
||||||
|
|
||||||
|
- name: Ensure .kube directory exists for user
|
||||||
|
file:
|
||||||
|
path: "/home/{{ username }}/.kube"
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
owner: "{{ username }}"
|
||||||
|
group: "{{ username }}"
|
||||||
|
|
||||||
|
- name: Generate kubeconfig from microk8s
|
||||||
|
shell: microk8s config > /home/{{ username }}/.kube/config
|
||||||
|
args:
|
||||||
|
creates: "/home/{{ username }}/.kube/config"
|
||||||
|
|
||||||
|
- name: Set kubeconfig permissions
|
||||||
|
file:
|
||||||
|
path: "/home/{{ username }}/.kube/config"
|
||||||
|
mode: '0600'
|
||||||
|
owner: "{{ username }}"
|
||||||
|
group: "{{ username }}"
|
||||||
|
|
||||||
|
- name: Create containerd config directory
|
||||||
|
file:
|
||||||
|
path: /var/snap/microk8s/current/args/certs.d
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Set registry hostname
|
||||||
|
set_fact:
|
||||||
|
registry_hostname: "{{ validator | lower }}.localregistry.chutes.ai"
|
||||||
|
|
||||||
|
- name: Create certs.d directory for registry
|
||||||
|
file:
|
||||||
|
path: "/var/snap/microk8s/current/args/certs.d/{{ registry_hostname }}:{{ registry_port }}"
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Create hosts.toml for registry
|
||||||
|
template:
|
||||||
|
src: hosts.toml.j2
|
||||||
|
dest: "/var/snap/microk8s/current/args/certs.d/{{ registry_hostname }}:{{ registry_port }}/hosts.toml"
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Update DNS resolution config
|
||||||
|
template:
|
||||||
|
src: resolved.conf.j2
|
||||||
|
dest: "/etc/systemd/resolved.conf"
|
||||||
|
mode: '0644'
|
||||||
|
|
||||||
|
- name: Restart systemd-resolved
|
||||||
|
systemd:
|
||||||
|
name: systemd-resolved
|
||||||
|
state: restarted
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
server = "https://{{ registry_hostname }}:{{ registry_port }}"
|
||||||
|
[host."https://{{ registry_hostname }}:{{ registry_port }}"]
|
||||||
|
capabilities = ["pull", "resolve", "push"]
|
||||||
|
skip_verify = true
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
[Resolve]
|
||||||
|
DNS=8.8.8.8
|
||||||
|
FallbackDNS=8.8.4.4
|
||||||
|
DNSStubListener=yes
|
||||||
Loading…
Reference in New Issue
Block a user