Выбрать главу

Инициализация ресурсов плюс шаблонизация серверов плюс оркестрация

Пример: 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

Откр.

Все

Упр. конф.

Изменя­емая

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

Есть

Есть

Большое

Средняя

CloudFor­mation

Закр.

AWS

Иниц. рес.

Неизменяемая

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

Нет

Нет

Маленькое

Средняя

Heat

Откр.

Все

Иниц. рес.

Неизменяемая

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

Нет

Нет

Маленькое

Низкая

Terraform

Откр.

Все

Иниц. рес.

Неизменяемая

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

Нет

Нет

Огромное

Низкая

В компании Gruntwork нам нужно было открытое, не привязанное к конкретному облаку средство инициализации ресурсов, которое поддерживает неизменяемую инфраструктуру, декларативный язык, архитектуру, не требующую наличия центральных серверов и агентов, и имеет большое сообщество и зрелую кодовую базу. Как показывает табл. 1.4, проект Terraform хоть и неидеальный, но именно он больше всего удовлетворяет нашим критериям.

Подходит ли он под ваши критерии? Если да, то переходите к главе 2, в которой вы научитесь его использовать.

3 Источник: Kim G., Humble J., Debois P., WillisJ. TheDevOpsHandbook: HowtoCreateWorld-ClassAgility, Reliability & SecurityinTechnologyOrganizations. — ITRevolutionPress, 2016.

4 Идемпотентность — свойство объекта или операции при повторном применении операции к объекту давать тот же результат, что и при первом.