Что такое IaC
IaC
подход для управления и описания инфраструктуры ЦОД через конфигурационные файлы, а не через ручное редактирование конфигураций на серверах или интерактивное взаимодействие. Этот подход может включать в себя как декларативный способ описания инфраструктуры, так и через скрипты.
Преимущества
-
Скорость и безопасность
Если ваша инфраструктура определена как код, то вместо человека, выполняющего развертывания вручную, шаги по развертыванию выполняет компьютер
-
Документирование
Если ваша инфраструктура определена как код, ее состояние хранится в инсходных файлах, которые может прочитать любой, а не в голове инженеров
-
Контроль версий
Хранение исходных файлов IaC в системе контроля версий упрощает взаимодействие при управлении инфраструктурой, анализ неполадок и их устранение
-
Валидация
Если состояние инфраструктуры определено в виде кода, при абсолютно любом изменении вы можете проверить код, запустить набор автоматизированных тестов и пропустить код через инструменты статистического анализа, то есть применить все практики, известные тем, что значительно снижают вероятность появления ошибок
-
Самообслуживание
Если состояние инфраструктуры определено в виде кода, разработчики могут инициировать свои развертывания сами, а не полагаться на других.
-
Многократное использование
Вы можете запаковать свою инфраструктуру в повторно используемые модули, чтобы вместо развертывания каждого продукта в каждой среде с нуля брать за основу уже известные, задокументированные и проверенные "в бою" детали.
Паттерны разработки инфраструктуры
Идемпотентность - можно запускать один и тот же код сколько угодно раз, и после первого успешного выполнения ничего лишнего происходить не будет. Результат всегда будет один и тот же.
Императивный
Описание
Выглядит как инструкция
Работа с инфраструктурой выполняется шаг за шагом как набор команд
Легко читать и легко писать
Сделай это -> потом это -> потом это -> ...
Инструменты: Bash, Python-скрипты, PowerShell, ...
Минусы
Нет идемпотентности
Выполнение может прерваться и система будет в непонятном состоянии
Декларативный
Описание
Выглядит как описание финального результата
Идемпотентность
Мне нужно установить nginx. А дальше все делаем система.
Инструменты: Ansible, Terraform, Kubernetes, Docker Compose, ...
Минусы
Повышение требования к граммотности инженера
В зависимости от реализации, может иметь различную сложность прочтения
Возможные пути улучшения
- Все что было написано - должно переиспользоваться
- Любые изменяемые параметры - выносим в переменные
- Не должно быть никаких явно прописанных параметров в коде
- Все переменные должны носить уникальное имя, однозначно указывающее что именно конфигурируется
- Задачи должны делиться на совокупность атомарных решений
- Обязательно должны использоваться классические практики работы с кодом
Перенятие практик работы с кодом
- Весь код должен быть покрыт тестами
- Код должен проходить стадии код-ревью
- Код должен версионироваться
- Работа с кодом должна выполняться в системе контроля версий
Цели конфигурационного управления
- Контроль
- Отслеживать изменения в контролируемых объектах, обеспечивать соблюдение процесса разработки
- Управление
- Диктует процесс автоматической идентификации в ходе всего жизненного цикла ПО, обеспечивает простоту модификации и сопровождения ПО
- Качество
Задачи конфигурациооного управления
- Идентификация конифгурации
- Контроль конфигурации
- Учет текущего состояния
- Управление процессом разработки
- Управление сборкой и окружением
Системы управления конфигурациями
Модели работы СМ
-
Push-based model - специальный узел разносит или применяет конфигурации по узлам сети.
-
Pull-based model - на узлах сети установлены агенты, которые обращаются в централизованные узлы за конфигурацией.
Основные СМТ
-
Puppet - одна из первых систем управления конфигурациями, работающася по методу pull
-
Chef - выходцы из puppet, более современный и подходящий под энетрпайз
-
Ansible - современная система, работающася по методу push. Очень низкий порог входа.
-
многие другие