Перейти к содержанию

Что такое IaC

IaC

подход для управления и описания инфраструктуры ЦОД через конфигурационные файлы, а не через ручное редактирование конфигураций на серверах или интерактивное взаимодействие. Этот подход может включать в себя как декларативный способ описания инфраструктуры, так и через скрипты.


Преимущества

  • Скорость и безопасность

    Если ваша инфраструктура определена как код, то вместо человека, выполняющего развертывания вручную, шаги по развертыванию выполняет компьютер

  • Документирование

    Если ваша инфраструктура определена как код, ее состояние хранится в инсходных файлах, которые может прочитать любой, а не в голове инженеров

  • Контроль версий

    Хранение исходных файлов IaC в системе контроля версий упрощает взаимодействие при управлении инфраструктурой, анализ неполадок и их устранение

  • Валидация

    Если состояние инфраструктуры определено в виде кода, при абсолютно любом изменении вы можете проверить код, запустить набор автоматизированных тестов и пропустить код через инструменты статистического анализа, то есть применить все практики, известные тем, что значительно снижают вероятность появления ошибок

  • Самообслуживание

    Если состояние инфраструктуры определено в виде кода, разработчики могут инициировать свои развертывания сами, а не полагаться на других.

  • Многократное использование

    Вы можете запаковать свою инфраструктуру в повторно используемые модули, чтобы вместо развертывания каждого продукта в каждой среде с нуля брать за основу уже известные, задокументированные и проверенные "в бою" детали.


Паттерны разработки инфраструктуры

Идемпотентность - можно запускать один и тот же код сколько угодно раз, и после первого успешного выполнения ничего лишнего происходить не будет. Результат всегда будет один и тот же.

Императивный

Описание

Выглядит как инструкция

Работа с инфраструктурой выполняется шаг за шагом как набор команд

Легко читать и легко писать

Сделай это -> потом это -> потом это -> ...

Инструменты: Bash, Python-скрипты, PowerShell, ...

Минусы

Нет идемпотентности

Выполнение может прерваться и система будет в непонятном состоянии

Декларативный

Описание

Выглядит как описание финального результата

Идемпотентность

Мне нужно установить nginx. А дальше все делаем система.

Инструменты: Ansible, Terraform, Kubernetes, Docker Compose, ...

Минусы

Повышение требования к граммотности инженера

В зависимости от реализации, может иметь различную сложность прочтения


Возможные пути улучшения

  • Все что было написано - должно переиспользоваться
  • Любые изменяемые параметры - выносим в переменные
  • Не должно быть никаких явно прописанных параметров в коде
  • Все переменные должны носить уникальное имя, однозначно указывающее что именно конфигурируется
  • Задачи должны делиться на совокупность атомарных решений
  • Обязательно должны использоваться классические практики работы с кодом

Перенятие практик работы с кодом

  • Весь код должен быть покрыт тестами
  • Код должен проходить стадии код-ревью
  • Код должен версионироваться
  • Работа с кодом должна выполняться в системе контроля версий

Цели конфигурационного управления

  • Контроль
  • Отслеживать изменения в контролируемых объектах, обеспечивать соблюдение процесса разработки
  • Управление
  • Диктует процесс автоматической идентификации в ходе всего жизненного цикла ПО, обеспечивает простоту модификации и сопровождения ПО
  • Качество

Задачи конфигурациооного управления

  • Идентификация конифгурации
  • Контроль конфигурации
  • Учет текущего состояния
  • Управление процессом разработки
  • Управление сборкой и окружением

Системы управления конфигурациями

Модели работы СМ

  • Push-based model - специальный узел разносит или применяет конфигурации по узлам сети.

  • Pull-based model - на узлах сети установлены агенты, которые обращаются в централизованные узлы за конфигурацией.

Основные СМТ

  • Puppet - одна из первых систем управления конфигурациями, работающася по методу pull

  • Chef - выходцы из puppet, более современный и подходящий под энетрпайз

  • Ansible - современная система, работающася по методу push. Очень низкий порог входа.

  • многие другие