Всё построено, пора проверить на прочность. В этой части — какие отказы кто и за какое время замечает, как их воспроизвести, шпаргалка по диагностике BGP и правила обслуживания, которые я вывел из собственных ошибок.
Механизм адресов готов. Осталось повесить на него нагрузку, ради которой всё затевалось: входящий HTTP(S)-трафик. В этой части ставим Traefik и разбираемся, почему для него важна одна строка — externalTrafficPolicy: Local.
Кластер работает, API отказоустойчив. Теперь научим Calico выдавать адреса сервисам type: LoadBalancer и анонсировать их роутеру. Отдельный MetalLB не нужен: Calico умеет и то, и другое.
Три мастера собраны, VIP работает, но кластер без сети. В этой части устанавливаем Calico, переводим его на eBPF вместо kube-proxy и присоединяем рабочие узлы.
Роутер готов ждать соседей, узлы подготовлены, пора создавать кластер. В этой части поднимем VIP для API-сервера с помощью kube-vip в режиме BGP, инициализируем первый мастер и присоединим остальные два.
В третьей части настраиваем сторону роутера. Кластера ещё нет, но роутер можно подготовить заранее: он заранее знает всех будущих соседей и будет ждать, пока они появятся.
Это первая статья серии о том, как с нуля собрать отказоустойчивый кластер Kubernetes, в котором и API-сервер, и сервисы типа LoadBalancer публикуются по BGP. Такой кластер у меня работает на виртуальных машинах Hyper-V, и на нём живёт, в том числе, этот блог.
Серия получилась практической: в каждой части — команды, конфигурация и то, на что я успел наступить.
После чистой установки Ubuntu Server с разметкой по умолчанию (LVM) корневая файловая система занимает только часть диска, примерно половину. Остальное место никуда не делось, просто оно никому не отдано. Исправляется это несколькими командами, причём без перезагрузки и без потери данных.
Что смотрим сначала
Перед любыми изменениями полезно увидеть, где именно лежит свободное место:
Windows по умолчанию не добавляет маршрут IPv6 к VPN подключениям. Есть обходной путь:
В Windows 10 и, предположительно, во всех будущих версиях, где доступен PowerShell, вы можете использовать командлет MS PowerShell Add-VpnConnectionRoute. Этот командлет не позволяет добавить маршрут по умолчанию 0::/0. Однако в большинстве случаев маршрут по умолчанию через VPN вам и не нужен. На текущий момент (январь 2026) пространство IPv6 включает только блок 2000::/3 как Global Unicast, и добавление этого префикса полностью достаточно для маршрутизации всего трафика через VPN-интерфейс. Командлет позаботится о добавлении маршрута при подключении к VPN и его удалении при отключении. Также, в отличие от netsh, это обычно не требует прав администратора и полностью интегрировано с графическим интерфейсом Windows, что избавляет вас от необходимости использовать батч-файлы.