Собственная инфраструктура: строим домашний Kubernetes-кластер на Raspberry Pi
Большинство разработчиков и системных администраторов привыкли взаимодействовать с оркестратором контейнеров Kubernetes исключительно в облаке. Они управляют кластерами удаленно, используя веб-панели или терминальные команды, что отделяет их от физического оборудования. Однако развертывание собственного кластера на «голом железе» (bare-metal) в домашних условиях обеспечивает принципиально иной уровень понимания технологии. Это дает глубокое практическое знание сетевого взаимодействия, планирования нагрузок и отказоустойчивости. Самый увлекательный момент такого проекта — физически отключить один из рабочих узлов от питания и наблюдать в консоли, как распределенная система самостоятельно обнаруживает потерю и начинает перенаправлять сетевой трафик и перезапускать поды на оставшихся узлах.
Инфраструктурные требования и бюджет
Создание домашнего кластера — это доступный проект. Его суммарная стоимость составляет около 300 евро, в зависимости от того, какое оборудование у вас уже есть и какие именно платы вы решите приобрести.
Для полноценного стенда вам понадобятся:
- Одноплатные компьютеры: Рекомендуется использовать 4 платы Raspberry Pi 4 или Raspberry Pi 5. Каждая плата должна иметь на борту не менее 4 ГБ оперативной памяти (RAM) для комфортного размещения системных компонентов и прикладных задач. Модель с 8 ГБ RAM дает дополнительный запас, но не является строго обязательной.
- Накопители: Понадобятся 4 карты памяти microSD объемом от 32 ГБ для размещения операционной системы и бинарных файлов. Однако база данных etcd производит частые и интенсивные операции записи, что быстро выводит карты microSD из строя. Для долговечной работы настоятельно рекомендуется использовать внешние SSD-накопители, подключенные через порт USB 3.0.
- Питание: Каждая плата под нагрузкой может потреблять до 15 Вт. Вместо четырех отдельных блоков лучше приобрести одно многопортовое GaN-зарядное устройство мощностью от 60 Вт с поддержкой USB-C Power Delivery (PD), способное стабильно выдавать требуемый ток на каждый порт.
- Сеть: Проводной коммутатор (ethernet-свитч) на 5 или 8 портов для надежной связи с низкой задержкой, а также комплект патч-кордов.
- Охлаждение: Акриловый или металлический многоярусный кластерный корпус, оснащенный радиаторами и вентиляторами. Без активного охлаждения процессоры Raspberry Pi под нагрузкой будут сбрасывать частоту (throttling) или отключаться.
Сетевая архитектура и шлюз
Для изоляции тестовой среды от домашней локальной сети и защиты от лишней нагрузки на домашний роутер настраивается топология с выделенным шлюзом.
Управляющая плата (master node) выступает в роли NAT-шлюза (транслятора сетевых адресов). Она подключается к домашнему роутеру по Wi-Fi для выхода в интернет, а через свой Ethernet-порт соединяется с коммутатором кластера. Все рабочие узлы (worker nodes) подключаются только к коммутатору через кабели. На управляющем узле настраивается DHCP-сервер (например, dnsmasq), который раздает воркерам IP-адреса в изолированном диапазоне приватной подсети 10.0.0.0/24. С помощью правил iptables на мастере включается NAT masquerade, чтобы воркеры могли скачивать образы контейнеров из интернета через шлюз. Домашний роутер при этом видит только одну плату шлюза, что предотвращает конфликты адресов.
Подготовка и установка ОС
В качестве операционной системы рекомендуется использовать чистый дистрибутив Ubuntu Server (версии 22.04 LTS или 24.04 LTS) под архитектуру arm64/aarch64.
Пошаговое руководство по подготовке системы:
- Прошивка накопителей: С помощью утилиты Raspberry Pi Imager запишите образ Ubuntu Server на microSD-карты или SSD. На этапе настройки укажите уникальные hostname для плат (например,
k8s-master,k8s-worker-1,k8s-worker-2,k8s-worker-3), активируйте SSH-сервер и импортируйте свой публичный SSH-ключ для беспарольного доступа. - Отключение файла подкачки (Swap): Это обязательное условие для работы планировщика Kubernetes. Выполните на каждом узле:
sudo swapoff -aЗатем откройте файл/etc/fstabи закомментируйте строку, содержащую swap. - Активация cgroups: По умолчанию лимиты ресурсов контейнеров в ОС могут не работать. Откройте файл
/boot/firmware/cmdline.txt(или/boot/cmdline.txt) и добавьте в конец единственной строки параметры:cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memoryПосле этого перезагрузите все платы:sudo reboot - Сетевые проверки: Убедитесь, что платы синхронизируют время по NTP и видят друг друга по именам. Для работы кластера должны быть открыты порт API
6443и внутренний порт агента10250. При использовании сетевого плагина Flannel убедитесь, что порт VXLAN8472открыт внутри кластера, но закрыт для входящих запросов из внешней домашней сети.
Развертывание K3s кластера
Классический Kubernetes слишком требователен к ресурсам. Для Raspberry Pi идеально подходит K3s — сертифицированный легковесный дистрибутив от Rancher, упакованный в один бинарный файл размером менее 100 МБ.
Установка и запуск кластера K3s:
- Установка мастера: На управляющей плате запустите официальный скрипт:
curl -sfL https://get.k3s.io | sh -После завершения убедитесь, что мастер работает:sudo k3s kubectl get nodes - Получение токена: Прочитайте секретный токен на мастере:
sudo cat /var/lib/rancher/k3s/server/node-token - Подключение воркеров: На каждой рабочей плате выполните команду установки агента, указав IP-адрес мастера и токен:
curl -sfL https://get.k3s.io | K3S_URL=https://10.0.0.1:6443 K3S_TOKEN=<TOKEN> sh - - Проверка: На мастере запустите
kubectl get nodes -o wide. Все четыре узла должны перейти в статусReady.
Тестирование отказоустойчивости
Чтобы убедиться в работоспособности механизмов самовосстановления кластера, проведите простой эксперимент. Запустите тестовое приложение с несколькими репликами:
kubectl create deployment nginx-test --image=nginx --replicas=3
Дождитесь запуска подов и проверьте их распределение по узлам с помощью команды kubectl get pods -o wide. Затем физически выдерните кабель питания из платы k8s-worker-1. В течение короткого времени мастер обнаружит потерю связи с узлом, переведет его в статус NotReady и автоматически перепланирует запущенные на нем поды на оставшиеся здоровые узлы, поддерживая заданное число реплик и доступность сервиса.
Использование K3s на Raspberry Pi отлично подходит для учебных целей, тестирования архитектурных концепций и домашней автоматизации, однако не следует использовать его в качестве промышленного production-решения без организации резервного копирования etcd, мониторинга температурного режима процессоров и резервного бесперебойного электропитания плат.

