Инициализация ресурсов плюс шаблонизация серверов плюс оркестрация
Пример: Terraform, Packer, Docker и Kubernetes. Packer используется для создания образов ВМ с установленными Docker и Kubernetes. Затем Terraform развертывает: а) серверы с помощью этих образов; б) всю остальную инфраструктуру, включая топологию сети (VPC, подсети, таблицы маршрутизации), хранилища данных (MySQL, Redis) и балансировщики нагрузки. Когда серверы загрузятся, они сформируют кластер Kubernetes, которым вы будете запускать и администрировать свои приложения в виде контейнеров Docker (рис. 1.11).
Рис. 1.11. Совместное использование Terraform, Packer, Docker и Kubernetes
Преимущество этого подхода в том, что образы Docker собираются довольно быстро, поэтому их можно запускать и тестировать на локальном компьютере. Вы также можете использовать богатые возможности Kubernetes, включая различные стратегии развертывания, автовосстановление, автомасштабирование и т. д. Недостатки связаны с повышением сложности — как с точки зрения инфраструктуры (развертывание кластеров Kubernetes является сложным и дорогим, хотя большинство основных облачных провайдеров теперь предоставляют управляемые сервисы Kubernetes, на которые можно возложить часть этой работы), так и в смысле дополнительных слоев абстракции (Kubernetes, Docker, Packer), которые необходимо изучать, обслуживать и отлаживать.
Резюме
Ниже показана сводная таблица самых популярных средств IaC (табл. 1.4). Заметьте, что здесь приводятся стандартные и самые распространенные способы их применения. Как уже упоминалось ранее, данные инструменты достаточно гибкие, чтобы их можно было применять и в других конфигурациях (например, Chef можно запускать без центрального сервера, а Salt поддерживает неизменяемую инфраструктуру).
Таблица 1.4. Сравнение наиболее распространенных способов использования самых популярных средств IaC
Инструмент
Код
Облака
Тип
Инфраструктура
Язык
Агент
Вед. cервер
Сообщество
Зрелость
Chef
Откр.
Все
Упр. конф.
Изменяемая
Процедурный
Есть
Есть
Большое
Высокая
Puppet
Откр.
Все
Упр. конф.
Изменяемая
Декларативный
Есть
Есть
Большое
Высокая
Ansible
Откр.
Все
Упр. конф.
Изменяемая
Процедурный
Нет
Нет
Огромное
Средняя
SaltStack
Откр.
Все
Упр. конф.
Изменяемая
Декларативный
Есть
Есть
Большое
Средняя
CloudFormation
Закр.
AWS
Иниц. рес.
Неизменяемая
Декларативный
Нет
Нет
Маленькое
Средняя
Heat
Откр.
Все
Иниц. рес.
Неизменяемая
Декларативный
Нет
Нет
Маленькое
Низкая
Terraform
Откр.
Все
Иниц. рес.
Неизменяемая
Декларативный
Нет
Нет
Огромное
Низкая
В компании Gruntwork нам нужно было открытое, не привязанное к конкретному облаку средство инициализации ресурсов, которое поддерживает неизменяемую инфраструктуру, декларативный язык, архитектуру, не требующую наличия центральных серверов и агентов, и имеет большое сообщество и зрелую кодовую базу. Как показывает табл. 1.4, проект Terraform хоть и неидеальный, но именно он больше всего удовлетворяет нашим критериям.
Подходит ли он под ваши критерии? Если да, то переходите к главе 2, в которой вы научитесь его использовать.
3 Источник: Kim G., Humble J., Debois P., WillisJ. TheDevOpsHandbook: HowtoCreateWorld-ClassAgility, Reliability & SecurityinTechnologyOrganizations. — ITRevolutionPress, 2016.
4 Идемпотентность — свойство объекта или операции при повторном применении операции к объекту давать тот же результат, что и при первом.