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

5 В современных операционных системах код выполняется в одном из двух «пространств»: в пространстве ядра и пространстве пользователя. Код, который работает в пространстве ядра, имеет прямой и неограниченный доступ ко всему оборудованию. На него не распространяются ограничения безопасности: вы можете выполнять любые процессорные инструкции, обращаться к любому участку жесткого диска, записывать в любой адрес памяти. При этом сбой в пространстве ядра обычно приводит к сбою всего компьютера. В связи с этим оно обычно отводится для самых низкоуровневых и доверенных функций ОС (которые называют ядром). Код в пользовательском пространстве не имеет непосредственного доступа к аппаратному обеспечению и вместо этого должен использовать API, предоставляемые ядром ОС. Эти интерфейсы могут накладывать ограничения безопасности (скажем, права доступа) и локализовать сбои в пользовательских приложениях, поэтому весь прикладной код работает в пользовательском пространстве.

6 Той изоляции, которую предоставляют контейнеры, как правило, достаточно для выполнения собственного кода. Но если нужно выполнять сторонний код (например, если вы хотите создать свое публичное облако), который может намеренно предпринять вредоносные действия, вам пригодятся повышенные гарантии изоляции ВМ.

7 В качестве альтернативы bash для настройки образов в Packer можно использовать средства управления конфигурацией, такие как Ansible и Chef.

8 В качестве примера можно взять библиотеку IaC от компании Gruntwork по адресу bit.ly/2H3Y7yT.

9 Docker, Packer и Kubernetes не участвуют в сравнении, так как их можно использовать в сочетании с любыми средствами управления конфигурацией или инициализации ресурсов.

10 На сегодня различие между управлением конфигурацией и инициализацией ресурсов еще менее очевидно, поскольку ряд популярных средств, входящих в первую категорию, таких как Chef Provisioning (https://github.com/chef-boneyard/chef-provisioning) и Puppet AWS Module (bit.ly/2YIQIuN), постепенно улучшил поддержку инициализации ресурсов.

11   Большая часть этих данных, включая количество участников, звезд, изменений и заявок, была взята из репозиториев открытого исходного кода и систем отслеживания ошибок (в основном в GitHub) каждого отдельного инструмента. Поскольку проект CloudFormation имеет закрытый исходный код, некоторые из этих сведений для него недоступны.

12   Это количество руководств в Chef Supermarket (bit.ly/2MNXWuS).

13   Чтобы избежать ложных срабатываний для chef, я искал по chef devops.

14   На основе учетной записи Puppet Labs в JIRA (bit.ly/2ZN3ppq).

15   Это количество модулей в Puppet Forge (forge.puppet.com).

16   Чтобы избежать ложных срабатываний для puppet, я искал по puppet devops.

17   Это количество универсальных ролей в Ansible Galaxy (galaxy.ansible.com).

18   Это количество формул в учетной записи Salt Stack Formulas в GitHub (github.com/saltstack-formulas).

19   Это количество шаблонов в учетной записи awslabs в GitHub (github.com/awslabs).

20 На основе системы отслеживания ошибок OpenStack (bit.ly/31jeDCH).

21 Мне не удалось найти ни одной коллекции шаблонов Heat, подготовленной сообществом.

22 Чтобы избежать ложных срабатываний для heat, я искал по openstack.

23 Это количество модулей в реестре Terraform (registry.terraform.io).

24 Снижение количества фиксаций кода и заявок у Terraform вызвано лишь тем фактом, что я измеряю только основной репозиторий проекта, тогда как в 2017 году код всех провайдеров был распределен по отдельным репозиториям. Поэтому здесь не учитывается огромная доля активности в репозиториях более чем 100 провайдеров.

2. Приступаем к работе с Terraform

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

Terraform умеет инициализировать инфраструктуру как в публичных облаках, вроде Amazon Web Services (AWS), Azure, Google Cloud и DigitalOcean, так и в частных облачных платформах и системах виртуализации вроде OpenStack и VMWare. Практически во всех примерах кода в книге будет использоваться AWS. Это хороший выбор для изучения Terraform по следующим причинам.

• AWS, вне всяких сомнений, является самым популярным провайдером облачной инфраструктуры. Его доля на рынке облачных решений составляет 45 %, что больше, чем у трех ближайших конкурентов (Microsoft, Google и IBM), вместе взятых (http://bit.ly/2kWCuCm).

• AWS предоставляет широчайший спектр надежных и масштабируемых сервисов с облачным размещением, включая Amazon Elastic Compute Cloud (Amazon EC2), который можно использовать для развертывания виртуальных серверов, Auto Scaling Groups (ASGs), упрощающий управление кластером виртуальных серверов, и Elastic Load Balancers (ELBs), с помощью которого можно распределять трафик между виртуальными серверами кластера25.