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

В эпоху автоматизации, когда один клик может создать полностью настроенный сервер, концепция инфраструктуры как кода (Infrastructure as Code, IaC) стала краеугольным камнем современного управления ИТ. IaC позволяет определять конфигурации инфраструктуры в коде, что позволяет легко и точно реплицировать, управлять и масштабировать инфраструктуру.

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

Что такое Ansible?

Ansible — мощный инструмент для автоматизации задач и управления инфраструктурой. Он не требует установки дополнительных программ на целевых узлах. Вместо этого Ansible использует SSH или другие стандартные методы доступа для подключения к серверам и их настройки.

Основные концепции, которые необходимо понимать при работе с Ansible:

  • Задачи Ansible: действия, выполняемые Ansible. Задачи могут варьироваться от установки программного обеспечения до настройки сетевых параметров.
  • Инвентарь Ansible: список хостов, на которых Ansible будет выполнять задачи. Включает IP-адреса, полные доменные имена или динамические инвентари, генерируемые скриптами.
  • Пьеса Ansible: сопоставление между группами хостов в инвентаре и задачами, которые будут выполняться на них.
  • Playbook Ansible: файл YAML, содержащий все пьесы, которые Ansible выполнит над инвентарём. Определяет желаемое состояние вашей системы.

Пример файла инвентаря Ansible:

192.168.1.23

[db]
10.2.14.23

[webservers]
server1.domain.com
server2.domain.org

Пример Playbook Ansible:

---
- hosts: webservers
  remote_user: yourname
  tasks:
    - service:
        name: nginx
        state: started
        become: yes
        become_method: sudo

Этот playbook указывает Ansible подключаться ко всем хостам в группе webservers, использовать указанного пользователя и убедиться, что служба nginx запущена. Если служба не запущена, она её запустит.

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

Ansible работает в режиме «push», где он подключается к целевым хостам через SSH или другие указанные методы и выполняет пьесы, определённые в плейбуке. Вот пошаговый обзор:

  1. Соединение: Ansible подключается к целевым узлам через SSH или другими указанными методами.
  2. Выполнение модуля: Ansible устанавливает и запускает модули Python на целевых хостах. Эти модули представляют собой простые инструкции, выполняющие конкретные задачи.
  3. Выполнение задач: задачи, определённые в пьесе, выполняются последовательно.
  4. Очистка: после выполнения задач модули удаляются с целевых узлов.

Одним из ключевых аспектов Ansible является идемпотентность. Это означает, что многократное выполнение плейбуков Ansible приведёт к тому же состоянию, не вызывая дополнительных изменений. Это критически важно для обеспечения согласованности и надёжности процессов автоматизации.

Чтобы начать работу с Ansible, вам нужно настроить несколько основных компонентов:

  • установить Ansible на контрольном узле с помощью менеджера пакетов;
  • создать файл инвентаризации;
  • написать свой первый плейбук.

Интеграция с системой контроля версий

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