Живая документация и автоматизированное построение виртуальных сетей
Игорь Чубин, Киев, Украина
LVEE 2009
живая документация
Проблема обычной документации в том, что она является линеаризованным представлением некоторой процедуры настройки. И ключевые пункты настройки, и несущественные детали находятся на одной и той же прямой, и выделены только изобразительным талантом автора. Автор всегда должен находить компромисс между степенью детализации руководства и перегруженностью деталями.
Было бы хорошо, если бы руководство содержало описание только наиболее важных, с точки зрения его автора, вопросов, и к нему бы прилагались:
1) максимально детальная последовательность всех команд по настройке системы;
2) точное представление всех конфигурационных файлов системы, а также полная история их изменения.
В идеале, потребовалось бы еще и:
3) модель сети, которая описывается в руководстве.
Последнее стало возможным с развитием средств виртуализации. Сейчас можно описать произвольную сеть одним конфигурационным файлом, а потом автоматически построить по нему виртуальную модель этой сети, над которой производить дальнейшие эксперименты, описываемые в руководстве.
Что особенно важно, все операции, выполняющиеся внутри этой виртуальной сети, можно было бы фиксировать, и затем использовать:
1) как заготовку для документирования;
2) как точное описание процедуры для приведения исходного состояния сети в текущее.
Первое возможно и без доступной читателю модели виртуальной сети, однако второе, поскольку речь идет о формальных процедурах, возможно только при наличии сети, к которой эта процедура применяется.
Итак, назовем живой документацию, к которой приложена модель описываемой системы и точная формализованная процедура, причем выполнение этой процедуры позволяет воспроизвести состояние системы, описываемое в произвольной точке документации.
журнал настройки как startup-config для UNIX/Linux-системы
Одной из удобных особенностей IOS, операционной системы маршрутизаторов Cisco, отсутствующей в UNIX/Linux, является наличие единого конфигурационного файла системы. Удобство заключается в том, что можно одной командой показать все отличия конфигурации конкретной системы от конфигурации этой же системы по умолчанию (начальной конфигурации).
В UNIX/Linux такой возможности нет из-за фундаментальных отличий в подходе к настройке системы, ее компонентов и способу хранения ее конфигурационных параметров. Это не является большой проблемой, поскольку опытный администратор, попав в новую систему, знает, какие файлы ему нужно смотреть с целью найти отличия от конфигурации по умолчанию.
Однако, получается, что этот процесс зависит от администраторов: того, который смотрит, и тех, которые настраивали систему раньше:
1) администратор, работающий с системой сейчас, может что-то забыть, не посмотреть, или вообще не знать, что это нужно смотреть;
2) администраторы, выполняющие настройку, могут не следовать стандартным правилам настройки, и выполнить конфигурирование по-своему; в результате их настройки окажутся незамеченными.
Идеально было бы, если бы существовала полная запись всех операций администратора по настройке, применив которую к системе, находящейся в исходном состоянии, можно было бы получить текущее состояние системы.
Такая запись должна быть:
1) обозримой;
2) точной;
3) воспроизводимой вручную и автоматически.
Последовательность команд системного администратора, выполняющего настройку системы, как правило, выглядит как направленное броуновское движение. То есть, у многочисленных беспорядочных на первый взгляд шагов есть общая составляющая.
Записанная последовательность действий может быть подвергнута обработке, в результате которой будет получена точная последовательность действий, приводящая к желаемому результату исходным путем.
Это может быть сделано:
1) путем автоматического удаления лишних команд, например, команд, которые не приводят к принципиальным изменениям в системе (в действительности, этот вопрос не так прост, поскольку любая команда, даже команда true, приводит к изменениям в системе; поэтому полностью автоматизировать процесс оптимизации последовательности настройки в общем случае невозможно);
2) путем редактирования последовательности настройки системным администратором вручную с применением его интеллекта.
Можно говорить о рефакторинге процедуры настройки в том смысле, что процедура настройки изменяется, приобретая при этом наглядность и простоту (или другие качества), но при этом сохраняется результат, к которому она приводит.
Формализованную процедуру настройки можно воспринимать в некотором смысле как startup-config для UNIX-системы, то есть воспринимать как файл, применение которого приводит машину из состояния “по умолчанию” в текущее. Она также может быть использована как основа для документации.
быстрое построение виртуальных сетей
Для того, чтобы все, что было описано выше, стало возможным, необходимо выработать легковесную процедуру развертывания виртуальной сети, то есть разработать способы и средства для построения виртуальной сети по описывающему ее конфигурационному файлу.
Исследуемые сети могут быть не только чисто виртуальными, но и смешанными: наряду с виртуальными узлами в них могут работать и обычные компьютеры и сетевые устройства. Виртуальная часть сети может работать поверх хоста, множества распределенных хостов или в облаке виртуализации, таком как EC2.
Для построения виртуальных сетей может использоваться существующее уже в настоящий момент программное обеспечение, например:
- Xen или KVM как системы виртуализации;
- QEMU/PEMU/Dynamips как эмуляторы сетевых устройств;
- openvpn или vde как средство для объединения распределенных систем виртуализации;
- элементы ядра Linux (модули 8021q, bridge и ряд других), которые обеспечивают объединение виртуальных устройств между собой требуемым способом.
Программное обеспечение, позволяющее управлять всей виртуальной сетью в целом (создавать узлы, изменять топологию сети, вносить изменения в показатели качества работы сетевых соединений, такие как задержка, пропускная способность, вероятность потери трафика), и отдельными ее виртуальными подсистемами, разработано специально для решения описанной задачи.
Оно же может применяться для автоматизации процесса начальной настройки систем, то есть в ходе применения процедур настройки, о которых шла речь выше. Как правило, эти процессы содержат много рутинных операций, которые всегда хочется переложить на компьютер – например, такие как настройка IP-адресов, маршрутизации, начальных учетных записей, паролей для доступа к ним, различных интерфейсов для сетевого доступа и множество других.
Основные задачи:
- быстрое разворачивание и начальная настройка произвольных виртуальных и смешанных сетей;
- предоставление инструментария для моделирования разнообразных условий работы сети (задержка, пропускная способность, вероятность потери трафика);
- фиксация результатов экспериментов.
Ключевые возможности системы:
- унификация управления;
- визуализация сети;
- интегрированные инструменты для исследования работы сети;
- поддержка множества операционных систем и виртуальных сетевых устройств;
- интеграция виртуальных и реальных устройств;
- распределенность;
- поддержка бездисковых систем;
- отказоустойчивость;
- возможность исполнения внутри облака виртуализации.
Сети могут предназначаться для решения как учебных и исследовательских, так и производственных задач.