Модуль 2 / 24
Подготовка трёх Ubuntu Server
Содержание
1. Цели и результат модуля
После модуля вы сможете подготовить и принять три однородных Ubuntu Server узла для Swarm: проверить идентичность, устойчивую сеть, SSH, время, ресурсы, Docker Engine и административный доступ до изменения состояния кластера.
- каждый узел имеет уникальные hostname и machine identity
- cluster0 использует стабильный адрес отдельной сети
- время синхронизировано до операций Raft и TLS
- версии Engine и plugins совпадают
- passwordless sudo проверяется без интерактивного запроса
- исходная capacity зафиксирована до размещения workloads
2. Теория: две сети и failure domains
Каждая VM имеет DHCP uplink для пакетов и отдельный cluster0 в сети 10.77.0.0/24. Swarm advertise address и data-path address должны использовать cluster0, чтобы смена DHCP uplink не меняла identity узла и overlay transport.
Три VM уменьшают зависимость от одного guest OS или Engine, но находятся на одном Windows-хосте. Отказ питания, Hyper-V, физического адаптера или диска хоста остаётся общим failure domain.
3. Теория: однородность узлов
Различия kernel, Engine, firewall, MTU, clock или package state создают несимметричные отказы: task работает на двух nodes и падает на третьем. До join формируют baseline и сравнивают факты, а не только наличие команды docker.
- hostname и адреса определяют наблюдаемую identity
- NTP защищает сроки сертификатов и порядок событий
- одинаковая версия Engine уменьшает различия API и поведения
- package hold предотвращает незапланированный version skew
- свободные CPU, RAM и disk задают исходную capacity
4. Теория: административный доступ
Лаборатория использует key-only SSH, отключённые password и root login и passwordless sudo для выделенного пользователя swarmlab. Приватный ключ остаётся на devops-vm. ProxyJump через Windows даёт доступ к internal switch, не публикуя SSH manager-узлов в домашнюю LAN.
Passwordless sudo допустим для изолированной учебной VM, но требует защиты приватного ключа. В production область sudo и SSH principals проектируют отдельно.
5. Методические указания
- Запускайте одинаковую проверку на всех трёх узлах и сравнивайте вывод
- Не исправляйте один узел до сохранения evidence о различии
- Не публикуйте cluster ports 2377, 7946 и 4789 в LAN
- Проверяйте sudo командой sudo -n true, чтобы тест не завис
- Разделяйте DHCP uplink и стабильный cluster0
- Не обновляйте Engine на одном manager вне процедуры rolling maintenance
6. Лабораторная работа: identity и сеть
Проверьте hostname и адреса. Ожидаются cluster0: 10.77.0.11, 10.77.0.12 и 10.77.0.13; uplink адреса могут меняться.
ssh swarm-manager-1 hostnamectl
ssh swarm-manager-2 hostnamectl
ssh swarm-manager-3 hostnamectl
ssh swarm-manager-1 ip -4 -br address
ssh swarm-manager-2 ip -4 -br address
ssh swarm-manager-3 ip -4 -br address7. Лабораторная работа: Engine, сервисы и sudo
Сравните client/server versions, убедитесь в активности базовых сервисов и проверьте неинтерактивное повышение прав.
ssh swarm-manager-1 docker version
ssh swarm-manager-2 docker version
ssh swarm-manager-3 docker version
ssh swarm-manager-1 systemctl is-active docker chrony ssh
ssh swarm-manager-2 systemctl is-active docker chrony ssh
ssh swarm-manager-3 systemctl is-active docker chrony ssh
ssh swarm-manager-1 sudo -n true
ssh swarm-manager-2 sudo -n true
ssh swarm-manager-3 sudo -n truessh swarm-manager-1 timedatectl
ssh swarm-manager-2 timedatectl
ssh swarm-manager-3 timedatectl
ssh swarm-manager-1 chronyc tracking
ssh swarm-manager-2 chronyc tracking
ssh swarm-manager-3 chronyc tracking8. Лабораторная работа: связность и capacity
Проверьте двустороннюю связность cluster0, затем зафиксируйте слушающие sockets, membership, CPU, память, диск и удерживаемые версии пакетов.
ssh swarm-manager-1 ping -c 2 10.77.0.12
ssh swarm-manager-1 ping -c 2 10.77.0.13
ssh swarm-manager-2 ping -c 2 10.77.0.11
ssh swarm-manager-2 ping -c 2 10.77.0.13
ssh swarm-manager-3 ping -c 2 10.77.0.11
ssh swarm-manager-3 ping -c 2 10.77.0.12
ssh swarm-manager-1 ss -lntup
ssh swarm-manager-1 docker node lsssh swarm-manager-1 nproc
ssh swarm-manager-1 free -h
ssh swarm-manager-1 df -h /
ssh swarm-manager-2 nproc
ssh swarm-manager-2 free -h
ssh swarm-manager-2 df -h /
ssh swarm-manager-3 nproc
ssh swarm-manager-3 free -h
ssh swarm-manager-3 df -h /
ssh swarm-manager-1 apt-mark showhold
ssh swarm-manager-2 apt-mark showhold
ssh swarm-manager-3 apt-mark showhold9. Диагностика и типовые ошибки
Диагностику ведите от transport к service. SSH verbose показывает ProxyJump и ключ; networkctl и journal объясняют адрес; chronyc — источник и offset; systemd и Docker journal — запуск Engine.
ssh -vv swarm-manager-1 true
ssh swarm-manager-1 networkctl status cluster0
ssh swarm-manager-1 journalctl -u systemd-networkd --since today
ssh swarm-manager-1 systemctl status chrony
ssh swarm-manager-1 chronyc sources -v
ssh swarm-manager-1 systemctl status docker
ssh swarm-manager-1 journalctl -u docker --since today
ssh swarm-manager-1 docker info- Host key verification failed требует проверить identity узла, а не удалять known_hosts вслепую
- sudo: a password is required означает неверный cloud-init baseline
- NTPSynchronized=no требует исправить time source до failure drills
- разные Server Version требуют согласованного maintenance
- нет связи cluster0 — проверьте switch, IP/prefix и host firewall до Swarm ports
10. Контроль, критерии освоения и cleanup
- Почему advertise address нельзя привязывать к случайному DHCP uplink?
- Какие риски создаёт рассинхронизация времени?
- Почему совпадение docker --version недостаточно?
- Что доказывает sudo -n true?
- Какие отказы не покрывает лаборатория на одном физическом хосте?
- Какие порты нужны Swarm между узлами?
Модуль освоен, если вы можете предъявить сравнительный preflight трёх узлов, объяснить каждое отклонение и не переходите к cluster changes при неизвестной сети, времени или version skew.
Лаборатория read-only и не создаёт ресурсов. Cleanup ограничен подтверждением отсутствия тестовых services и сохранением здорового membership.
ssh swarm-manager-1 docker service ls
ssh swarm-manager-1 docker node ls