Подготовка Debian VPS для k0s: sysctl, модули ядра и установка
Published: 2026-04-05
Всё начинается с чистого образа Debian 12 Minimal. Скрипт 01-prepare-vm.sh превращает его в хост, готовый к k0s, примерно за 10 минут.
Swap
bashswapoff -a
sed -i '/\sswap\s/d' /etc/fstab
Планировщик Kubernetes считает лимиты памяти жёсткими. При включённом swap под, исчерпавший память, может уйти в своп вместо завершения — это вызывает непредсказуемые всплески задержек и делает учёт ресурсов бессмысленным. k0s предупреждает при запуске, если swap включён.
Тюнинг sysctl
Записывается в /etc/sysctl.d/99-k0s.conf:
# Обязательно для сетевого стека Kubernetes
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
# Для strongSwan IKEv2 VPN
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.ip_no_pmtu_disc = 1
# Производительность
net.core.somaxconn = 32768
fs.inotify.max_user_watches = 524288
fs.inotify.max_user_instances = 512
Без ip_forward поды не смогут выходить в интернет. Без bridge-nf-call-iptables правила iptables kube-proxy не будут срабатывать для мостового трафика (pod-to-pod).
Лимиты inotify важны для k0s: контроллер следит за большим количеством файлов и ConfigMap. Стандартный лимит Linux (8192) приводит к незаметным сбоям на нагруженных кластерах.
Применить:
bashsysctl --system
Модули ядра
Загружаются при старте через /etc/modules-load.d/k0s.conf:
br_netfilter
overlay
ip_tables
iptable_nat
iptable_filter
nf_conntrack
br_netfilter— позволяет iptables видеть мостовой трафикoverlay— нужен для overlayfs в containerdip_tables,iptable_nat,iptable_filter— зависимости kube-proxynf_conntrack— отслеживание соединений для NAT
Без overlay containerd упадёт или перейдёт на более медленный драйвер.
Загрузить немедленно:
bashmodprobe br_netfilter overlay ip_tables iptable_nat iptable_filter nf_conntrack
Системные пакеты
bashapt-get install -y \
curl wget gnupg2 ca-certificates \
iptables ipset \
nftables \
socat \
conntrack \
ipvsadm
ipvsadm — для IPVS-режима (если используется). conntrack — утилита для netfilter.
Установка k0s
bashcurl -sSLf https://get.k0s.sh | sh
k0s install controller --single
--single — нода запускает и контроллер, и воркер. k0s устанавливается как systemd-сервис k0scontroller и запускает etcd, API-сервер и kubelet в одном дереве процессов.
Сохранить публичный IP для следующих скриптов:
bashcurl -s https://api.ipify.org > /root/.k0s_public_ip
Запустить:
bashsystemctl start k0scontroller
systemctl enable k0scontroller
Доступ к kubectl
bashk0s kubectl config view --raw > /root/.kube/config
chmod 600 /root/.kube/config
С этого момента kubectl и helm работают в штатном режиме. Последующие скрипты используют k0s kubectl (встроенный kubectl) — чтобы не требовать отдельной установки kubectl на сервере.
Проверка готовности кластера
bashk0s status
kubectl get nodes
kubectl get pods -A
Ожидаемый результат: нода в состоянии Ready, системные поды в Running через 2–3 минуты.
Частые проблемы
Нода остаётся в NotReady: проверить k0s status и journalctl -u k0scontroller -f. Частая причина — не загружен модуль br_netfilter.
Поды зависли в ContainerCreating: отсутствует модуль overlay. Выполнить modprobe overlay и перезапустить containerd.
Ошибки inotify в логах: увеличить fs.inotify.max_user_watches до 1048576 для больших кластеров.