Введение в IaC и знакомство с Ansible

28.05.2023

Эта статья логическое продолжение цикла публикаций про настройку и управление инфраструктурой. Мы уже погрузились в историю контейнеризации, познакомились с Docker, изучили язык текстовой разметки YAML и поработали с Docker-compose.

Настало время прикоснуться к «инфраструктуре как коду» — infrastructure as a code (IaC), познакомиться с Ansible и овладеть практическими навыками по работе с ним. Вы научитесь:

  1. устанавливать Ansible и подключаться к серверам;
  2. работать с конфигурациями Ansible и инвентаризационными файлами hosts;
  3. писать Playbooks и исполнять их.

После прочтения обеих статей у вас получится полноценный проект по автоматизированному развертыванию LEMP-стека на удаленных серверах с помощью Ansible.

Отлично, задача поставлена — действуем! Сначала немного теории, потом разберёмся с тем, что такое Ansible и какие задачи он решает.

Что такое инфраструктура как код?

Инфраструктура как код (IaC) — это подход к созданию и настройке инфраструктуры аналогичный процессу разработки ПО. То есть продумывается архитектура, прописываются процессы, устанавливается взаимодействие инфраструктурных элементов между собой. Всё это описывается в специальных форматах, предназначенных для описания иерархических систем: yaml, json, xml и аналогичные им форматы.

Философия IaC основывается на принципах «единого источника правды», согласно которому — исполнение одного и тот же кода формирует одну и ту же исполняемую среду. Благодаря такому подходу достигается единообразие элементов инфраструктуры и их ожидаемое поведение, а также идемпотентность, как свойство системы принимать одно и то же состояние при одинаковых условиях вызова.

Ключевое в IaC — это то, что все взаимодействия с инфраструктурой осуществляются через конфигурационные файлы системой, а не системными администраторами или девопсами в ручном режиме. Человеческий фактор максимально исключается из условий взаимодействий с системой.

Из главных преимуществ использования IaC можно отметить следующие:

Сейчас IaC — это одна из доминирующих концепций в DevOps. Она стала так популярна в первую очередь благодаря повышению скорости разработки, тестирования и возможности внедрения непрерывного развертывания (CI/CD). Сама концепция IaC проста и прозрачна, а многие инструменты работы с ней имеют невысокий порог вхождения, например — Ansible.

Что такое Ansible и какие задачи он решает?

Ansible — это средство управления конфигурациями серверов (виртуальных и выделенных), сохранения их состояний, доставки и развертывания на них ПО. Так примерно звучит официальное описание Ansible, если перефразировать проще, то можно сказать так: Ansible — это инструмент автоматизации работы с серверами и ПО на них.

С помощью Ansible вы можете создавать, удалять, изменять облачные серверы (например, AWS), устанавливать и изменять на них ПО, управлять сетями и сетевыми настройками, и всё это делает Ansible самостоятельно, следуя заранее подготовленным сценариям — плейбукам (Playbook).

Ansible строго следует философии IaC — вся работа с инфраструктурой осуществляется только через код. Поэтому мы можем поддерживать единообразие систем на всех серверах или группах серверов и быть уверенными в том, что наши приложения будут работать корректно на всех серверах.

Ansible реализует 4 главных правила подхода “Инфраструктура как код” (IaC):

  1. Все элементы в инфраструктуре должны быть воспроизводимы;
  2. Должна быть возможность выкинуть любой из элементов;
  3. Инфраструктура должна быть консистентной;
  4. У инфраструктуры не должно быть финального состояния.

Обобщим перечисленные 4 концепции в одну мысль: инфраструктура меняется, ее сегодняшнее состояние — это лишь один из этапов её развития, и уже сегодня нужно подумать над завтрашними изменениями. Ansible позволяет сделать этот процесс максимально безболезненным.

Не будем долго засиживаться на теории и перейдем к аспектам работы Ansible.

Как работает Ansible

Ansible не единственная система управления конфигурациями серверов, есть ещё Pulumi, Chef, Otter, Puppet, SaltStack, CFEngine, DSC и, конечно же, Terraform. Что отличает Ansible и Terraform от многих других инструментов — это их безагентная модель работы, то есть, Ansible умеет подключаться к удаленным серверам и работать на них прямо по SSH, в случае с Windows — это WinRM.

Всё что нужно для работы Ansible на удалённом сервере — это Python 3+, открытый порт SSH для Linux и Python 3+, Ansible Windows User и WinRM для Windows. Сам Ansible устанавливается только на компьютер администратора под управлением Linux. Для тех, кто предпочитает работать под Windows — есть замечательный WSL2.

Если вы ещё не знакомы с WSL2 — рекомендуем прочесть наш краткий мануал, из которого вы узнаете как установить и настроить Linux внутри Windows, и пользоваться преимуществами обоих ОС одновременно.

Погрузимся немного в терминологию (здесь без неё, к сожалению, никуда — нужно быть в теме):

 

Графически схему работы Ansible можно представить так:

Итого, концепция работы Ansible очень проста: контрольная нода с Ansible управляет хостами по SSH. Все! Никаких агентов или дополнительного ПО на удалённых серверах. Всё работает прямо из коробки, в случае с Linux, конечно.

С концепцией — понятно, здесь всё просто. Перейдем к тому, как устроен Ansible.

Как устроен Ansible

Ansible имеет изящную и простую архитектуру. Состоит он из 4 базовых элементов:

 

Графически устройство Ansible можно представить так:

Как мы говорили ранее, Ansible — это программа, чтобы она заработала, ее нужно вызвать. Сделать это может пользователь, обратившись к Ansible через терминал или другая программа, например планировщик заданий CronTab.

Промежуточный итог

Итак, мы познакомились с концепцией инфраструктуры как кода и системой управления конфигурациями серверов Ansible. Подведем промежуточный итог и двинемся дальше — к практике работы с Ansible. Что нового мы узнали:

В следующей статье мы непосредственно поработаем с Ansible — реализуем проект по развертке LEMP стека на виртуальных серверах 1cloud. Для последующей работы нам понадобится Linux и знания yaml. Если вы пользователь Windows и у вас нет под рукой машины с Linux или вы не знакомы с yaml — наша подборка статей поможет разобраться с тем и с другим.

Зарегистрироваться