Статья-заметка по настройке рабочей (worker) ноды Kubernetes на WSL2 (Windows 10).
Введение
Инсталляция необычная и я вижу мало сценариев когда это может пригодиться. Но сама возможность это сделать есть.
Какие есть проблемы?
- WSL2 это виртуальная машина. У неё есть своя сеть на базе Hyper-V, которая работает как NAT. Обойти это можно или режимом моста (bridge) или поднимать VPN.
- Не хватает модулей в ядре, а именно overlay и br_netfilter. Нужно собирать их руками.
- Работать будет только в WSL2 с включенным systemd. Обязательно надо включать.
Будем устанавливать:
- Ubuntu 22.04
- Containerd
- Компоненты Kubernetes
Настройки в Windows 10
Установка WSL2 (через powershell или pwsh)
1 |
wsl --install |
Нужно создать файл .wslconfig с содержимым (по пути %HOMEPATH%\.wslconfig)
1 2 |
[wsl2] swap=0 |
Данная опция отключит swap (файл подкачки).
Запуск WSL2 (через powershell или pwsh)
1 |
wsl |
Настройки в WSL2 (Ubuntu)
Рекомендую переключиться на пользователя root
Выполним обновление системы
1 |
apt update && apt upgrade -y |
Активируем systemd
1 2 3 4 5 6 |
tee /etc/wsl.conf <<EOF [boot] systemd=true EOF reboot |
Добавим в загрузку нужные нам модули
1 2 3 4 |
tee /etc/modules-load.d/containerd.conf <<EOF overlay br_netfilter EOF |
Сборка и установка модулей overlay и br_netfilter
1 2 3 4 5 6 7 8 9 10 |
apt install build-essential flex bison dwarves libssl-dev libelf-dev bc libncurses-dev unzip WSL_RELEASE="linux-msft-wsl-$(echo $(uname -r) | cut -d"-" -f1)" curl -LO https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/${WSL_RELEASE}.zip unzip ${WSL_RELEASE}.zip cd WSL2-Linux-Kernel-${WSL_RELEASE} zcat /proc/config.gz > .config sed -i "s/CONFIG_X86_X32=y/CONFIG_X86_X32=n/g" .config make prepare modules_prepare -j $(nproc) make modules -j $(nproc) make modules_install -j $(nproc) |
Проверим и активируем модули
1 2 3 4 5 6 7 8 9 10 |
modprobe br_netfilter modprobe overlay tee /etc/sysctl.d/kubernetes.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system |
Установка containerd
1 2 3 |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" apt update && apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates containerd.io |
Настройка containerd
1 2 3 4 5 6 |
mv /etc/containerd/config.toml /etc/containerd/config.toml.orig containerd config default > /etc/containerd/config.toml sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml systemctl restart containerd systemctl enable containerd |
Установка компонентов Kubernetes
1 2 3 4 |
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main" apt update && apt install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl |
Теперь можно присоединять ноду к кластеру (при условии то вы решили вопрос с сетью) и нода (worker) будет полноценно работать!
Опционально. Очистка системы
1 2 3 4 5 6 7 |
apt --purge remove build-essential flex bison dwarves libssl-dev libelf-dev bc libncurses-dev snapd apport apport-symptoms motd-news-config pastebinit xauth vim shared-mime-info apparmor unattended-upgrades sosreport -y apt autoremove --purge -y apt autoclean -y apt clean -y rm -rf /var/log history -c history -w |