- Home »

Установка и настройка Ansible на Ubuntu 24
Ansible — это тот инструмент, который может превратить вашу жизнь системного администратора из хаотичного танца с командной строкой в элегантное дирижирование оркестром серверов. Если вы устали от ручного деплоя, копипастинга конфигов и бесконечных SSH-сессий, то настало время познакомиться с этим красавцем поближе. В Ubuntu 24 (Jammy Jellyfish) установка Ansible стала ещё проще, а возможности — шире.
Эта статья поможет вам быстро поднять Ansible на свежей Ubuntu 24, разберём все подводные камни и покажем реальные примеры использования. Вы узнаете, как превратить рутинные задачи в автоматизированные плейбуки, масштабировать инфраструктуру и спать спокойно, зная, что все ваши серверы настроены одинаково.
Что такое Ansible и зачем он нужен?
Ansible — это агентлесс система управления конфигурациями, которая работает через SSH. Никаких дополнительных демонов на целевых машинах, никаких сложных настроек PKI. Просто YAML-файлы с задачами и SSH-ключи. Красота в простоте!
Основные преимущества:
- Агентлесс архитектура — нужен только SSH доступ
- Идемпотентность — можно запускать плейбуки много раз без побочных эффектов
- YAML синтаксис — читабельный и понятный формат
- Огромная библиотека модулей — от управления пакетами до работы с облачными провайдерами
- Активное сообщество — куча готовых ролей на Ansible Galaxy
Установка Ansible на Ubuntu 24
В Ubuntu 24 есть несколько способов установки Ansible. Рассмотрим самые популярные:
Способ 1: Установка через APT (рекомендуется)
# Обновляем индекс пакетов
sudo apt update
# Устанавливаем Ansible
sudo apt install ansible -y
# Проверяем версию
ansible --version
Способ 2: Установка через PIP (для самой свежей версии)
# Устанавливаем pip, если его нет
sudo apt install python3-pip -y
# Устанавливаем Ansible через pip
pip3 install ansible
# Добавляем путь в ~/.bashrc (если нужно)
echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc
source ~/.bashrc
# Проверяем установку
ansible --version
Способ 3: Установка через официальный PPA
# Добавляем PPA
sudo add-apt-repository ppa:ansible/ansible -y
# Обновляем индекс пакетов
sudo apt update
# Устанавливаем Ansible
sudo apt install ansible -y
Лично я рекомендую первый способ для продакшена — он более стабильный. Если нужны самые свежие фичи, то второй способ через pip.
Первоначальная настройка
После установки нужно создать базовую структуру файлов:
# Создаём рабочую директорию
mkdir ~/ansible-workspace
cd ~/ansible-workspace
# Создаём файл инвентаря
touch inventory.ini
# Создаём конфигурационный файл
touch ansible.cfg
# Создаём директорию для плейбуков
mkdir playbooks
# Создаём директорию для ролей
mkdir roles
Настройка файла инвентаря
Файл `inventory.ini` содержит список ваших серверов:
[webservers]
web1 ansible_host=192.168.1.10 ansible_user=ubuntu
web2 ansible_host=192.168.1.11 ansible_user=ubuntu
[databases]
db1 ansible_host=192.168.1.20 ansible_user=ubuntu
[all:vars]
ansible_ssh_private_key_file=~/.ssh/id_rsa
ansible_python_interpreter=/usr/bin/python3
Настройка ansible.cfg
Создаём базовый конфигурационный файл:
[defaults]
inventory = ./inventory.ini
host_key_checking = False
timeout = 30
retry_files_enabled = False
stdout_callback = yaml
remote_user = ubuntu
private_key_file = ~/.ssh/id_rsa
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
[ssh_connection]
ssh_args = -o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s
pipelining = True
Настройка SSH-ключей
Для работы Ansible нужен SSH-доступ к целевым серверам. Если у вас ещё нет SSH-ключей:
# Генерируем SSH-ключ
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# Копируем ключ на целевые серверы
ssh-copy-id ubuntu@192.168.1.10
ssh-copy-id ubuntu@192.168.1.11
ssh-copy-id ubuntu@192.168.1.20
# Проверяем доступность хостов
ansible all -m ping
Если всё настроено правильно, вы увидите что-то вроде:
web1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Первые шаги: основные команды
Теперь давайте попробуем базовые команды Ansible:
# Проверка доступности всех хостов
ansible all -m ping
# Выполнение команды на всех хостах
ansible all -m command -a "uptime"
# Получение информации о системе
ansible all -m setup
# Установка пакета на веб-серверах
ansible webservers -m apt -a "name=nginx state=present" --become
# Перезапуск сервиса
ansible webservers -m service -a "name=nginx state=restarted" --become
Создание первого плейбука
Плейбуки — это сердце Ansible. Создадим простой плейбук для настройки веб-сервера:
# Файл playbooks/webserver.yml
---
- name: Configure web servers
hosts: webservers
become: yes
vars:
server_name: "{{ inventory_hostname }}"
tasks:
- name: Update apt cache
apt:
update_cache: yes
- name: Install nginx
apt:
name: nginx
state: present
- name: Start and enable nginx
service:
name: nginx
state: started
enabled: yes
- name: Create custom index.html
copy:
content: |
Welcome to {{ server_name }}
Hello from {{ server_name }}
This server was configured with Ansible!
dest: /var/www/html/index.html
backup: yes
- name: Configure firewall
ufw:
rule: allow
port: '80'
proto: tcp
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
Запускаем плейбук:
ansible-playbook playbooks/webserver.yml
Сравнение с альтернативами
Ansible не единственный в своём роде. Давайте посмотрим на конкурентов:
Инструмент | Архитектура | Язык конфигурации | Сложность изучения | Производительность |
---|---|---|---|---|
Ansible | Агентлесс (SSH) | YAML | Низкая | Средняя |
Chef | Агентная | Ruby DSL | Высокая | Высокая |
Puppet | Агентная | Puppet DSL | Средняя | Высокая |
SaltStack | Агентная | YAML/Jinja2 | Средняя | Очень высокая |
Ansible выигрывает в простоте использования и отсутствии необходимости установки агентов. Для малых и средних инфраструктур — это идеальный выбор.
Продвинутые возможности
Использование Ansible Vault
Для хранения секретов используем Ansible Vault:
# Создаём зашифрованный файл
ansible-vault create secrets.yml
# Редактируем зашифрованный файл
ansible-vault edit secrets.yml
# Запускаем плейбук с vault
ansible-playbook playbooks/webserver.yml --ask-vault-pass
Создание собственных ролей
Роли помогают организовать код и делать его переиспользуемым:
# Создаём структуру роли
ansible-galaxy init roles/nginx
# Структура роли
roles/nginx/
├── defaults/
│ └── main.yml
├── files/
├── handlers/
│ └── main.yml
├── meta/
│ └── main.yml
├── tasks/
│ └── main.yml
├── templates/
├── tests/
│ ├── inventory
│ └── test.yml
└── vars/
└── main.yml
Динамический инвентарь
Для работы с облачными провайдерами можно использовать динамический инвентарь:
# Устанавливаем плагин для AWS
pip3 install boto3
# Создаём файл inventory.aws_ec2.yml
plugin: aws_ec2
regions:
- us-east-1
- us-west-2
keyed_groups:
- key: tags
prefix: tag
- key: instance_type
prefix: instance_type
Интересные факты и нестандартные применения
- Ansible может управлять сетевым оборудованием — Cisco, Juniper, Arista поддерживают Ansible модули
- Интеграция с Kubernetes — модуль k8s позволяет управлять кластерами
- Тестирование инфраструктуры — связка Ansible + Molecule + Docker для тестирования ролей
- Управление Windows — да, Ansible может управлять Windows серверами через WinRM
- Ansible Tower/AWX — веб-интерфейс для управления Ansible в энтерпрайзе
Практические советы и подводные камни
Что можно и нужно делать:
- Используйте
--check
для dry-run перед выполнением - Группируйте задачи по ролям
- Используйте теги для выборочного выполнения задач
- Версионируйте ваши плейбуки в Git
- Тестируйте роли с помощью Molecule
Чего лучше избегать:
- Не используйте
shell
модуль без необходимости - Не храните секреты в открытом виде
- Не делайте плейбуки слишком большими
- Не забывайте про идемпотентность
Автоматизация и интеграция
Ansible прекрасно интегрируется с CI/CD пайплайнами:
# Пример Jenkins pipeline
pipeline {
agent any
stages {
stage('Deploy') {
steps {
ansiblePlaybook(
playbook: 'playbooks/deploy.yml',
inventory: 'inventory.ini',
credentialsId: 'ansible-ssh-key'
)
}
}
}
}
Для крупных проектов рекомендую использовать VPS для control node и выделенные серверы для production окружения.
Мониторинг и отладка
Полезные команды для диагностики:
# Подробный вывод
ansible-playbook playbooks/webserver.yml -v
# Ещё более подробный вывод
ansible-playbook playbooks/webserver.yml -vvv
# Проверка синтаксиса
ansible-playbook playbooks/webserver.yml --syntax-check
# Dry-run
ansible-playbook playbooks/webserver.yml --check
# Выполнение только определённых тегов
ansible-playbook playbooks/webserver.yml --tags "nginx"
# Ограничение выполнения определёнными хостами
ansible-playbook playbooks/webserver.yml --limit "web1"
Статистика и производительность
По данным опросов DevOps сообщества:
- Ansible используют 58% DevOps инженеров
- Среднее время изучения базовых возможностей — 2-3 недели
- Сокращение времени на деплой — до 80%
- Снижение количества ошибок конфигурации — до 65%
Ansible может обрабатывать до 500 параллельных подключений (настраивается в ansible.cfg), что делает его подходящим для средних и крупных инфраструктур.
Заключение и рекомендации
Ansible на Ubuntu 24 — это мощный инструмент для автоматизации инфраструктуры, который должен быть в арсенале каждого системного администратора. Его простота и гибкость делают его идеальным выбором для большинства задач.
Рекомендую использовать Ansible, если:
- У вас есть несколько серверов, которые нужно поддерживать в одинаковом состоянии
- Вы хотите автоматизировать деплой приложений
- Нужно быстро масштабировать инфраструктуру
- Важна простота в изучении и использовании
Стоит рассмотреть альтернативы, если:
- У вас очень большая инфраструктура (1000+ серверов)
- Нужна максимальная производительность
- Требуется сложная логика конфигурации
Начните с простых задач — установки пакетов, копирования файлов, перезапуска сервисов. Постепенно переходите к более сложным сценариям с использованием ролей и vault. И помните — лучший код тот, который не нужно писать. Используйте готовые роли из Ansible Galaxy, где это возможно.
Удачи в автоматизации! 🚀
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.