Здесь сравниваются не совсем равнозначные вещи, поскольку разные инструменты используют разные методы управления версиями, но некоторые тенденции бросаются в глаза. Terraform, безусловно, является самым молодым инструментом IaC в этом сравнении. Он все еще не достиг версии 1.0.0, поэтому не ожидайте гарантий стабильного или обратно совместимого API, и программные ошибки встречаются относительно часто (хотя большинство из них незначительные). Это самое слабое место Terraform: несмотря на достижение огромной популярности за короткое время и применение передовых технологий, это менее зрелый проект по сравнению с некоторыми другими средствами IaC.
Совместное использование нескольких инструментов
Я сравнивал разные инструменты IaC на протяжении всей этой главы, но в реальности при построении своей инфраструктуры вам, скорее всего, придется работать сразу с несколькими из них. У каждого представленного здесь инструмента есть свои сильные и слабые стороны, и вы должны выбрать подходящий для ваших задач вариант.
Далее описываются три распространенные комбинации, которые хорошо себя проявили в ряде компаний.
Инициализация ресурсов плюс управление конфигурацией
Пример: Terraform и Ansible. Terraform используется для развертывания всей внутренней инфраструктуры, включая топологию сети (то есть виртуальные частные облака (virtual private cloud, или VPC), подсети, таблицы маршрутизации), хранилища данных (MySQL, Redis), балансировщики нагрузки и серверы. Ansible берет на себя развертывание ваших приложений поверх этих серверов, как показано на рис. 1.9.
Рис. 1.9. Совместное использование Terraform и Ansible
Этот подход позволяет быстро приступить к работе, поскольку вам не нужна никакая дополнительная инфраструктура (Terraform и Ansible — сугубо клиентские приложения) и оба инструмента можно интегрировать множеством разных способов (например, Terraform назначает вашим серверам специальные теги, которые Ansible использует для поиска и конфигурации этих серверов). Основной недостаток состоит в том, что применение Ansible обычно подразумевает много процедурного кода и изменяемые серверы, поэтому расширение кодовой базы, инфраструктуры и вашей команды может осложнить обслуживание.
Инициализация ресурсов плюс шаблонизация серверов
Пример: Terraform и Packer. Packer используется для упаковки ваших приложений в виде образов ВМ. Затем Terraform развертывает: а) серверы с помощью этих образов; б) всю остальную инфраструктуру, включая топологию сети (то есть VPC, подсети, таблицы маршрутизации), хранилища данных (как MySQL, Redis) и балансировщики нагрузки. Это проиллюстрировано на рис. 1.10.
Рис. 1.10. Совместное применение Terraform и Packer
Этот подход тоже позволяет быстро приступить к работе, так как вам не нужна никакая дополнительная инфраструктура (Terraform и Packer являются сугубо клиентскими приложениями). Позже в этой книге вы сможете вдоволь попрактиковаться в развертывании образов ВМ с помощью Terraform. Кроме того, вы получаете неизменяемую инфраструктуру, что упростит ее обслуживание. Однако у этой комбинации есть два существенных недостатка. Во-первых, на сборку и развертывание образов ВМ может уходить много времени, что замедлит выпуск обновлений. Во-вторых, как вы увидите в последующих главах, Terraform поддерживает ограниченный набор стратегий развертывания (например, сам по себе этот инструмент не позволяет реализовать «сине-зеленые» обновления), поэтому вам придется либо написать много сложных скриптов, либо обратиться к средствам оркестрации, как это будет показано далее.
Инициализация ресурсов плюс шаблонизация серверов плюс оркестрация
Пример: Terraform, Packer, Docker и Kubernetes. Packer используется для создания образов ВМ с установленными Docker и Kubernetes. Затем Terraform развертывает: а) серверы с помощью этих образов; б) всю остальную инфраструктуру, включая топологию сети (VPC, подсети, таблицы маршрутизации), хранилища данных (MySQL, Redis) и балансировщики нагрузки. Когда серверы загрузятся, они сформируют кластер Kubernetes, которым вы будете запускать и администрировать свои приложения в виде контейнеров Docker (рис. 1.11).
Рис. 1.11. Совместное использование Terraform, Packer, Docker и Kubernetes
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии