← К программе курса

Модуль 2 / 24

Подготовка трёх Ubuntu Server

DOCKER SWARM

Содержание
01

1. Цели и результат модуля

После модуля вы сможете подготовить и принять три однородных Ubuntu Server узла для Swarm: проверить идентичность, устойчивую сеть, SSH, время, ресурсы, Docker Engine и административный доступ до изменения состояния кластера.

  • каждый узел имеет уникальные hostname и machine identity
  • cluster0 использует стабильный адрес отдельной сети
  • время синхронизировано до операций Raft и TLS
  • версии Engine и plugins совпадают
  • passwordless sudo проверяется без интерактивного запроса
  • исходная capacity зафиксирована до размещения workloads
02

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.

03

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
04

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 проектируют отдельно.

05

5. Методические указания

  • Запускайте одинаковую проверку на всех трёх узлах и сравнивайте вывод
  • Не исправляйте один узел до сохранения evidence о различии
  • Не публикуйте cluster ports 2377, 7946 и 4789 в LAN
  • Проверяйте sudo командой sudo -n true, чтобы тест не завис
  • Разделяйте DHCP uplink и стабильный cluster0
  • Не обновляйте Engine на одном manager вне процедуры rolling maintenance
06

6. Лабораторная работа: identity и сеть

Проверьте hostname и адреса. Ожидаются cluster0: 10.77.0.11, 10.77.0.12 и 10.77.0.13; uplink адреса могут меняться.

terminal
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 address
07

7. Лабораторная работа: Engine, сервисы и sudo

Сравните client/server versions, убедитесь в активности базовых сервисов и проверьте неинтерактивное повышение прав.

terminal
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 true
terminal
ssh 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 tracking
08

8. Лабораторная работа: связность и capacity

Проверьте двустороннюю связность cluster0, затем зафиксируйте слушающие sockets, membership, CPU, память, диск и удерживаемые версии пакетов.

terminal
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 ls
terminal
ssh 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 showhold
09

9. Диагностика и типовые ошибки

Диагностику ведите от transport к service. SSH verbose показывает ProxyJump и ключ; networkctl и journal объясняют адрес; chronyc — источник и offset; systemd и Docker journal — запуск Engine.

terminal
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

10. Контроль, критерии освоения и cleanup

  • Почему advertise address нельзя привязывать к случайному DHCP uplink?
  • Какие риски создаёт рассинхронизация времени?
  • Почему совпадение docker --version недостаточно?
  • Что доказывает sudo -n true?
  • Какие отказы не покрывает лаборатория на одном физическом хосте?
  • Какие порты нужны Swarm между узлами?

Модуль освоен, если вы можете предъявить сравнительный preflight трёх узлов, объяснить каждое отклонение и не переходите к cluster changes при неизвестной сети, времени или version skew.

Лаборатория read-only и не создаёт ресурсов. Cleanup ограничен подтверждением отсутствия тестовых services и сохранением здорового membership.

terminal
ssh swarm-manager-1 docker service ls
ssh swarm-manager-1 docker node ls