Урок 1: Ansible - Основы и введение

Pavel 08.12.2025 18:33 13 просмотров

Что такое Ansible?

Ansible — это open-source инструмент для автоматизации конфигурирования серверов и управления инфраструктурой. Разработан компанией Red Hat.

Основные характеристики

Параметр Описание
Язык YAML (простой текстовый формат)
Лицензия Open Source (GPLv3)
Первая версия 2012 год
Модель Agentless (Push-based)
ОС Управляющий сервер только Linux, управляемые - все
Требуемый софт Python, SSH

Зачем нужен Ansible?

Проблема: Вы администратор с 100 серверами. Нужно: - Установить веб-сервер на всех - Скопировать конфиг на все - Установить пакеты и обновления - Изменить настройки

Без Ansible:

❌ Заходить на каждый сервер вручную
❌ Выполнять одни и те же команды 100 раз
❌ Часы работы и множество ошибок
❌ Сложно отследить что изменилось

С Ansible:

✅ Написать один скрипт (playbook)
✅ Выполнить на все сервера одновременно
✅ Минуты вместо часов
✅ Полная история изменений
✅ Повторяемость и консистентность

Принцип работы: Push vs Pull

Push (Ansible) - Что делает Ansible

┌─────────────────────────────────────────┐
│   Ansible Master (Control Server)       │
│   - Хранит playbooks                    │
│   - Управляет всеми серверами           │
│   - Отправляет команды (Push)           │
└─────────────┬──────────────┬────────────┘
              │              │
         SSH  │              │ SSH
              ▼              ▼
        ┌──────────┐   ┌──────────┐
        │ Server 1 │   │ Server 2 │
        │ (Linux)  │   │ (Linux)  │
        └──────────┘   └──────────┘

Ansible → отправляет команды
Серверы → выполняют

Преимущества Push: - ✅ Не нужны агенты на серверах - ✅ Безопаснее - контроль с одного места - ✅ Нет постоянных соединений - ✅ Проще в поддержке

Pull (Chef, Puppet) - Традиционный подход

┌─────────────────────────────┐
│   Master Server             │
│   - Хранит конфигурации     │
│   - Ждет запросов от клиентов│
└─────────────────────────────┘
              ▲
              │ Pull запрос
              │ (каждые N минут)
        ┌─────┴──────┐
        │             │
    ┌─────────┐  ┌─────────┐
    │ Agent 1 │  │ Agent 2 │
    │(Linux)  │  │(Linux)  │
    └─────────┘  └─────────┘

Агент на каждом сервере → запрашивает конфиг
Master → отправляет

Минусы Pull: - ❌ Нужно устанавливать агента на каждый сервер - ❌ Сложнее настраивать - ❌ Зависит от состояния агента


Альтернативы Ansible

Инструмент Модель Язык Основатель Плюсы Минусы
Ansible Push YAML Red Hat Простой, agentless, Python Медленнее на больших масштабах
Chef Pull Ruby DSL Opscode Мощный, гибкий Сложно, требует агента
Puppet Pull DSL Puppet Labs Декларативный Кривая обучения, агент
SaltStack Both Python YAML SaltStack Быстрый, масштабируемый Менее популярен
Terraform Declarative HCL HashiCorp Для облака, IaC Не для конфигурации

Когда использовать Ansible?

✅ Идеально подходит для:

  1. Конфигурирование серверов — установка ПО, изменение конфигов
  2. Управление множеством серверов — 10+, 100+, 1000+ серверов
  3. Автоматизация развертывания — CI/CD конвейеры
  4. Управление конфигурациями — синхронизация настроек
  5. Оркестрация — координирование сложных операций
  6. Быстрое прототипирование — быстро прототипировать инфраструктуру

❌ Не очень подходит для:

  • Управление с Windows Control Server (только Linux)
  • Очень высокие требования к скорости (используйте SaltStack)
  • Развитие приложений (используйте Docker/Kubernetes)

Основные компоненты Ansible

┌────────────────────────────────────────────────┐
│         Ansible Architecture                   │
├────────────────────────────────────────────────┤
│                                                │
│  1. CONTROL SERVER (Ansible Master)            │
│     - Ansible установлен только здесь          │
│     - Linux (Ubuntu, CentOS, RHEL и т.д.)      │
│     - Python 2.7+ или 3.5+                     │
│                                                │
│  2. INVENTORY                                  │
│     - Список всех управляемых хостов           │
│     - Группировка серверов                     │
│     - Переменные для хостов                    │
│                                                │
│  3. PLAYBOOKS                                  │
│     - YAML файлы с задачами                    │
│     - Определяют что делать на серверах        │
│                                                │
│  4. MODULES                                    │
│     - Встроенные функции (copy, shell, apt)    │
│     - 3000+ модулей                            │
│                                                │
│  5. ROLES                                      │
│     - Переиспользуемые блоки кода              │
│     - Лучшие практики организации              │
│                                                │
└────────────────────────────────────────────────┘

Минимальные требования

Control Server (Ansible Master)

  • ОС: Только Linux (Ubuntu, CentOS, RHEL, Debian, macOS)
  • Python: 2.7+ или 3.5+
  • SSH: Обязателен для подключения к управляемым серверам

Управляемые серверы (Targets)

Linux

✅ Требуется:
   - SSH доступ
   - Python 2.6 / 2.7 / 3.5+
   - sudo доступ (опционально)

✅ Поддерживаемые:
   - Ubuntu / Debian
   - CentOS / RHEL
   - Amazon Linux
   - Debian
   - Alpine Linux
   - Любой другой Linux с Python

Windows

⚠️ Требуется:
   - WinRM доступ (порт 5985/5986)
   - PowerShell 3.0+ (лучше 5.0+)
   - Python для некоторых модулей
   - Учетные данные администратора

⚠️ Поддержка ограничена:
   - Не все модули работают на Windows
   - Нужна дополнительная настройка
   - Рекомендуется Linux для серверов

Популярные модули Ansible

Модуль Описание Пример
ping Проверить доступность хоста ansible all -m ping
shell Выполнить команду оболочки command: whoami
copy Скопировать файл на хост src=/local/file dest=/remote/file
file Управлять файлами/директориями path=/tmp/test state=absent
apt/yum Установить пакеты name=nginx state=present
service Управлять сервисами name=nginx state=started
template Развернуть Jinja2 шаблон src=nginx.j2 dest=/etc/nginx
user Управлять пользователями name=john groups=sudo
lineinfile Редактировать строки в файле path=/etc/hosts regexp=localhost
debug Вывести переменные/информацию msg={{ variable }}
uri HTTP запросы url=http://api.example.com
wait_for Ожидание условия port=80 delay=10
get_url Скачать файл url=http://example.com/file dest=/tmp/
unarchive Распаковать архив src=/tmp/file.tar.gz dest=/opt
git Клонировать Git репозиторий repo=https://github.com/user/repo

Основные сценарии использования

Сценарий 1: Развертывание веб-сервера

1. Создать playbook deploy-web.yml
2. Определить группу серверов web
3. Установить nginx
4. Скопировать конфиг
5. Запустить nginx
6. Проверить доступность

Сценарий 2: Обновление системы

1. Обновить все пакеты
2. Перезагрузить серверы
3. Проверить что все поднялось
4. Отправить уведомление

Сценарий 3: Резервная копия базы данных

1. Создать dump базы
2. Скопировать на резервное хранилище
3. Проверить целостность
4. Удалить старые backup'ы

Сценарий 4: Масштабирование приложения

1. Увеличить группу серверов
2. Развернуть новую версию приложения
3. Добавить в load balancer
4. Проверить здоровье
5. Удалить старые версии

История и факты

Создание Ansible

  • Основатель: Michael DeHaan (сначала для Red Hat, потом open-source)
  • Первая версия: 2012 год
  • Развитие: Была куплена компанией Red Hat в 2015
  • Лицензия: GNU General Public License v3 (GPLv3)

Статистика

  • 👥 Пользователи: Используется в Fortune 500 компаниях
  • 📦 Модули: 3000+ встроенных модулей
  • GitHub: 60k+ звезд
  • 🌍 Поддержка: Активное сообщество
  • 📚 Документация: Официальная на русском частично

Развитие

2012  Первая версия (0.0.1)
2015  Куплена Red Hat
2019  Ansible 2.9 (последний Python 2.7)
2022  Ansible 2.11+ (Python 3.8+ requirement)
2025  Ansible 2.17+ (современные фичи)

Где взять Ansible и документацию

Установка

# Через pip (Python package manager)
pip install ansible

# Через apt (Ubuntu/Debian)
sudo apt-get install ansible

# Через yum (CentOS/RHEL)
sudo yum install ansible

# Через brew (macOS)
brew install ansible

Официальные ресурсы

Ресурс URL
Официальный сайт https://www.ansible.com
Документация https://docs.ansible.com
Ansible Galaxy (Роли) https://galaxy.ansible.com
GitHub репозиторий https://github.com/ansible/ansible
Учебные материалы https://learn.redhat.com/ansiblebasics
Сообщество https://www.reddit.com/r/ansible/

Бизнес-кейсы

Кейс 1: Стартап с 50 серверами

Проблема: Ручное управление 50 серверами  неэффективно

Решение: Ansible
├─ 1 неделя на настройку
├─ Playbook для развертывания
└─ Экономия 20+ часов в месяц

Результат: DevOps инженер может управлять 50 серверами одному

Кейс 2: Облачная инфраструктура (AWS/GCP)

Проблема: Часто создаются новые инстансы, нужна быстрая конфигурация

Решение: Ansible + IaC
├─ Terraform создает серверы
├─ Ansible конфигурирует их
└─ Полная автоматизация за часы

Результат: Zero-downtime развертывание новых версий

Кейс 3: Большая компания (1000+ серверов)

Проблема: 50 системных администраторов вручную конфигурируют

Решение: Ansible + Roles + CI/CD
├─ Централизованное управление
├─ Версионирование конфигов
└─ Обновления за минуты

Результат: Экономия в виде сокращения штата на 30%

Преимущества Ansible

  • Agentless — не нужно устанавливать ничего на серверы
  • Simple — YAML очень простой язык
  • Powerful — может делать почти все
  • Modular — 3000+ встроенных модулей
  • Scalable — управляет 100 и 10000 серверов
  • Flexible — можно использовать переменные, условия, циклы
  • Idempotent — безопасно запускать несколько раз
  • Push-based — контроль с одного места
  • Agentless SSH — использует стандартный SSH
  • Free & Open Source — абсолютно бесплатно

Следующие шаги

  1. Урок 2: Установка Ansible на Linux/macOS/Windows
  2. Урок 3: Создание inventory файла и первое подключение
  3. Урок 4: Ad-hoc команды и ping
  4. Урок 5: Первый playbook
  5. Урок 6+: Переменные, роли, шаблоны, vault и т.д.

Контрольный список понимания

  • [ ] Знаете что такое Ansible и зачем он нужен
  • [ ] Понимаете разницу между Push и Pull
  • [ ] Знаете альтернативы (Chef, Puppet, SaltStack)
  • [ ] Понимаете минимальные требования
  • [ ] Знаете где найти документацию
  • [ ] Готовы к установке Ansible

Готовы к установке Ansible? Переходите к Уроку 2! 🚀

Комментарии (0)

Для добавления комментария необходимо войти в аккаунт

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