Системные требования
Прежде чем устанавливать кластер, убедитесь, что ваше железо соответствует требованиям. Хорошая новость: для домашнего Kubernetes они весьма скромные. Плохая новость: если не уложиться в минимум по памяти, кластер будет падать самыми неочевидными способами.
Общие требования к узлам
Вот сводная таблица. «Минимум» — кластер установится и будет работать, но впритык. «Рекомендация» — комфортная работа с запасом на десятки сервисов.
| Ресурс | Control-plane (минимум) | Control-plane (рекомендация) | Worker (минимум) | Worker (рекомендация) |
|---|---|---|---|---|
| Процессор | 2 ядра / 2 потока | 4 ядра / 8 потоков | 2 ядра / 2 потока | 4+ ядра |
| Оперативная память | 2 ГБ (k3s) / 4 ГБ (kubeadm) | 8 ГБ | 1 ГБ (k3s) / 2 ГБ (kubeadm) | 8–16 ГБ |
| Диск (система) | 20 ГБ | 40+ ГБ, SSD | 20 ГБ | 40+ ГБ, SSD |
| Диск (данные) | — | по потребности | — | HDD/SSD от 100 ГБ под тома |
| Сеть | 100 Мбит/с | 1 Гбит/с | 100 Мбит/с | 1 Гбит/с |
Если у вас один сервер, совмещающий роли control-plane и worker (типичная схема для дома и поведение k3s по умолчанию), складывайте требования обеих ролей: комфортный минимум такого комбайна — 4 потока ЦП, 8 ГБ ОЗУ и 40 ГБ SSD.
Control-plane
Управляющий узел держит на себе:
- kube-apiserver — единая точка входа, все команды kubectl идут сюда. Прожорлив по памяти при большом числе объектов;
- etcd — база состояния кластера. Критична к скорости диска: etcd чувствительна к задержкам записи (fsync). Медленная microSD-карта — худшее, что можно ей предложить;
- kube-scheduler и kube-controller-manager — лёгкие, почти незаметны на домашних масштабах.
В домашнем кластере на 1–5 узлов control-plane обычно потребляет 1–2 ГБ ОЗУ и малую долю одного ядра. Но etcd требует SSD: на HDD кластер будет работать, на microSD — мучиться.
Один узел или три?
В «взрослых» кластерах control-plane делают отказоустойчивым из трёх узлов (кворум etcd). Дома это почти всегда избыточно: один управляющий узел плюс регулярные снапшоты etcd (см. «Советы») покрывают 99% домашних сценариев. Если управляющий узел умер — поды на рабочих узлах продолжат работать, просто вы временно не сможете управлять кластером.
Worker-узлы
Рабочий узел держит:
- kubelet — агент, который запускает и контролирует поды. Сам по себе скромный: 100–300 МБ ОЗУ;
- контейнерный рантайм (containerd) — ещё немного памяти и место под образы;
- системные поды — сетевой плагин, kube-proxy, CoreDNS: суммарно 200–500 МБ;
- ваши приложения — вот тут и уходит вся память.
Правило простое: посчитайте, сколько памяти хотят ваши сервисы, прибавьте 1 ГБ на систему и 20% запаса. Примерный «аппетит» популярных домашних сервисов:
| Сервис | Типичное потребление ОЗУ |
|---|---|
| Home Assistant | 300–500 МБ |
| Jellyfin (без транскодинга) | 300–600 МБ |
| Jellyfin (транскодинг видео) | 1–2 ГБ + нагрузка на ЦП |
| Nextcloud | 500 МБ – 1 ГБ |
| Gitea | 150–300 МБ |
| Kubernetes Dashboard | 100–200 МБ |
| Prometheus + Grafana | 1–2 ГБ |
Отсюда видно: узел с 8 ГБ ОЗУ спокойно несёт 5–8 таких сервисов одновременно.
Как посчитать память под свой набор сервисов
Практическая формула для планирования узла:
память узла = 1.5 ГБ (система k8s) + сумма сервисов + 25% запаса
Пример: Jellyfin (1 ГБ) + Nextcloud с БД (1.5 ГБ) + Home Assistant (0.5 ГБ) + Gitea (0.3 ГБ) = 3.3 ГБ сервисов. Итого: 1.5 + 3.3 + ~1.2 запаса ≈ 6 ГБ — узел с 8 ГБ ОЗУ справится, но уже без места для мониторинга. С Prometheus (+1.5 ГБ) и будущими экспериментами разумный выбор — 16 ГБ.
Точные цифры появятся только в работе: запустите сервисы, дайте им поработать неделю и посмотрите реальное потребление командой kubectl top pods -A --sort-by=memory (metrics-server входит в состав k3s). Живые измерения всегда точнее любых таблиц.
Дисковая подсистема
Диски в домашнем кластере делятся на две категории:
- Системный диск — ОС, containerd, образы контейнеров, etcd. Требования: SSD (любой), от 40 ГБ. Образы контейнеров занимают больше места, чем кажется: десяток приложений — это легко 10–20 ГБ.
- Диски данных — файлы Nextcloud, медиатека Jellyfin, базы данных. Тут уместны и HDD: для медиатеки скорость не важна, важна ёмкость.
Сколько места реально нужно
| Что занимает место | Типичный объём |
|---|---|
| Debian / Ubuntu Server (чистая) | 3–5 ГБ |
| k3s + containerd + системные образы | 2–4 ГБ |
| Образы ваших приложений | 10–30 ГБ |
| etcd и логи | 1–5 ГБ |
| Запас под обновления и временные файлы | 10 ГБ |
| Итого комфортный минимум | 40 ГБ |
Сеть
Требования к сети скромные, но есть три важных пункта:
- Статические IP-адреса для узлов. Узлы должны жить на фиксированных адресах: если IP узла изменится, кластер может потерять его из виду. Настройка описана на странице «Подготовка».
- Кабель лучше Wi-Fi. Wi-Fi работает, но домашний кластер по беспроводной сети — источник странных таймаутов. Сервер — по кабелю, одноплатники в идеале тоже.
- Гигабит не обязателен, но приятен. Для API и веб-интерфейсов хватит и 100 Мбит/с, но переливка файлов в NFS-хранилище и стриминг медиа заметно веселее на гигабите.
Гигабитная сеть и диски данных
Если планируете NFS-хранилище (страница «Хранение») или медиасервер с 4K-контентом, гигабитный Ethernet становится заметным улучшением: переливка 100 ГБ файлов по 100 Мбит/с займёт около двух с половиной часов, по гигабиту — минут пятнадцать. Проверьте, что и сетевая карта сервера, и роутер, и кабель (категория 5e и выше) гигабитные — скорость цепочки определяется самым медленным звеном. Проверить скорость линка:
sudo ethtool enp3s0 | grep -i speed
# Speed: 1000Mb/s — то, что нужно
Сетевые порты, которые должны быть свободны
Если на узле включён файрвол (или узлы стоят в разных сетях), между ними должны быть открыты порты Kubernetes. Для домашней сети с доверенными машинами проще всего не трогать файрвол вовсе — но понимать, какие порты используются, полезно:
| Порт | Кто слушает | Зачем |
|---|---|---|
| 6443/tcp | kube-apiserver | API кластера: kubectl, доступ агентов к серверу |
| 10250/tcp | kubelet на каждом узле | Управление подами, логи, exec |
| 2379–2380/tcp | etcd | Состояние кластера (между узлами control-plane) |
| 8472/udp | flannel (VXLAN) | Оверлейная сеть подов между узлами |
| 51820/udp | flannel (WireGuard, если включён) | Шифрованный вариант оверлея |
| 30000–32767/tcp | NodePort-сервисы | Доступ к сервисам извне (см. «Сеть») |
| 53/tcp и 53/udp | CoreDNS | DNS внутри кластера |
На одноузловом кластере всё это работает локально, и о портах можно не думать вовсе.
Проверка поддержки виртуализации
Самому Kubernetes аппаратная виртуализация не нужна — контейнеры работают на уровне ядра ОС. Но она понадобится, если вы захотите запускать узлы кластера как виртуальные машины (удобный способ сделать «трёхузловой кластер» на одном мощном сервере) или держать рядом с k8s классическую виртуализацию (Proxmox).
Проверить, что виртуализация включена в BIOS (VT-x для Intel, AMD-V для AMD):
# должна быть строка с vmx (Intel) или svm (AMD)
grep -E -c "(vmx|svm)" /proc/cpuinfo
# 0 = виртуализация выключена или не поддерживается
# подробнее про процессор
lscpu | grep -i virt
Если команда вернула 0 — зайдите в BIOS/UEFI и включите Intel VT-x / AMD-V (в китайских платах на X99 пункт обычно называется «Intel Virtualization Technology» в разделе Advanced → CPU Configuration).
Требования: k3s против kubeadm
Два дистрибутива, которые мы используем на этом сайте, отличаются по «весу»:
| Параметр | k3s | Классический k8s (kubeadm) |
|---|---|---|
| Минимум ОЗУ на сервер-узел | 512 МБ – 1 ГБ | 2 ГБ (реально 4 ГБ) |
| Минимум ОЗУ на агент-узел | 512 МБ | 1–2 ГБ |
| Минимум ЦП | 1 ядро | 2 ядра |
| Место на диске | ~1 ГБ на бинарники и образы системы | ~2–3 ГБ |
| База состояния | Встроенный etcd или SQLite (одиночный узел) | Только etcd |
| Что в комплекте | containerd, flannel, Traefik, local-path-provisioner, ServiceLB — из коробки | Только база: CNI, Ingress и provisioner ставите сами |
| Архитектуры | x86_64, arm64, armhf | x86_64, arm64 и др. |
Вывод простой: для дома и слабого железа k3s подходит лучше — он легче, ставится одной командой и несёт всё нужное в комплекте. kubeadm имеет смысл, если цель — именно учиться собирать «ванильный» кластер руками. Оба пути подробно разобраны на странице «Установка».
Примеры готовых конфигураций
| Конфигурация | Состав | Что потянет |
|---|---|---|
| Минимальная | 1 узел: 2 ядра, 4 ГБ, 40 ГБ SSD | k3s, 3–5 лёгких сервисов (Gitea, AdGuard, пара своих приложений) |
| Комфортная | 1 узел: 4–6 ядер, 16 ГБ, 128 ГБ SSD + HDD под данные | Весь набор со страницы «Примеры» с запасом |
| Лаборатория | 3 узла: мини-ПК по 4 ядра / 16 ГБ каждый | Настоящий многоузловой кластер, отказоустойчивость, миграция подов |
| «На вырост» | 1 сервер: 12–14 ядер Xeon, 64 ГБ ECC, 480+ ГБ SSD | Всё сразу: сервисы, виртуализация рядом, сборки, базы данных |
Операционная система
Все инструкции сайта проверены на:
- Debian 12 (bookworm) — рекомендуемый выбор: стабильный, лёгкий, предсказуемый;
- Ubuntu Server 24.04 LTS — тоже отличный выбор, чуть больше «из коробки».
Также k3s официально поддерживает множество других систем, включая RHEL-подобные и even Raspberry Pi OS. Но для новичка лучше держаться Debian/Ubuntu: все команды на сайте будут совпадать с вашей системой один в один.
Итоговый чек-лист перед установкой
Проверка 1. Память
На единственном узле — от 4 ГБ, лучше 8+. На отдельном control-plane — от 2 ГБ для k3s и от 4 ГБ для kubeadm. Проверить можно командой:
# сколько памяти в системе
free -h
Проверка 2. Диск
Системный раздел — от 40 ГБ, желательно SSD. Смотрим:
# свободное место и тип дисков
df -h /
lsblk -d -o NAME,ROTA,SIZE
В выводе lsblk колонка ROTA = 0 означает SSD, 1 — HDD.
Проверка 3. Сеть
Узел должен иметь статический IP и выход в интернет (для скачивания образов):
# адрес машины и проверка связи
ip -4 addr show
ping -c 3 1.1.1.1
Проверка 4. swap отключён
Kubernetes требует отключённый swap. Как это сделать навсегда — в инструкции «Подготовка», а проверить можно так:
# должно быть пусто / нули
swapon --show
free -h | grep -i swap