Урок 1: Ansible - Основы и введение
Что такое 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?
✅ Идеально подходит для:
- Конфигурирование серверов — установка ПО, изменение конфигов
- Управление множеством серверов — 10+, 100+, 1000+ серверов
- Автоматизация развертывания — CI/CD конвейеры
- Управление конфигурациями — синхронизация настроек
- Оркестрация — координирование сложных операций
- Быстрое прототипирование — быстро прототипировать инфраструктуру
❌ Не очень подходит для:
- Управление с 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 — абсолютно бесплатно
Следующие шаги
- Урок 2: Установка Ansible на Linux/macOS/Windows
- Урок 3: Создание inventory файла и первое подключение
- Урок 4: Ad-hoc команды и ping
- Урок 5: Первый playbook
- Урок 6+: Переменные, роли, шаблоны, vault и т.д.
Контрольный список понимания
- [ ] Знаете что такое Ansible и зачем он нужен
- [ ] Понимаете разницу между Push и Pull
- [ ] Знаете альтернативы (Chef, Puppet, SaltStack)
- [ ] Понимаете минимальные требования
- [ ] Знаете где найти документацию
- [ ] Готовы к установке Ansible
Готовы к установке Ansible? Переходите к Уроку 2! 🚀