mirror of
https://github.com/ilyamak04/DevOps.git
synced 2025-04-05 07:34:49 +02:00
summary ansible: first day
This commit is contained in:
parent
192872fe91
commit
cd9ed9b871
116
ansible/ANSIBLE.MD
Normal file
116
ansible/ANSIBLE.MD
Normal file
@ -0,0 +1,116 @@
|
||||
- Устанавливаем ansible на машину
|
||||
```bash
|
||||
# Для Ubuntu
|
||||
sudo apt update
|
||||
sudo apt install software-properties-common
|
||||
sudo add-apt-repository --yes --update ppa:ansible/ansible
|
||||
sudo apt install ansible
|
||||
```
|
||||
- Создаём инветарный файл в котором описываются хосты (сервера), которыми будет управлять ansible
|
||||
```ini
|
||||
[web_servers]
|
||||
archers ansible_host=176.119.89.45 ansible_user=archer ansible_private_key=/home/ilyamak04/.ssh/archers
|
||||
```
|
||||
#### Про инвентарный файл (что можно делать?)
|
||||
- Разбивать сервера на группы
|
||||
```ini
|
||||
[dev_servers]
|
||||
webserver1 ansible_host=192.168.1.10
|
||||
webserver2 ansible_host=192.168.1.11
|
||||
[prod_servers]
|
||||
webserver3 ansible_host=192.168.1.12
|
||||
webserver4 ansible_host=192.168.1.13
|
||||
```
|
||||
[dev_servers] — это группа серверов, которая представляет собой логическую коллекцию хостов
|
||||
|
||||
- Создавать групповые переменные
|
||||
```ini
|
||||
[web_servers:vars]
|
||||
ansible_user=ubuntu
|
||||
ansible_port=22
|
||||
```
|
||||
Это задаст пользователя и порт по умолчанию для всех серверов в группе web_servers
|
||||
- Параметры подключения: Можно управлять параметрами подключения для отдельных серверов или групп:
|
||||
- `ansible_user`: имя пользователя для SSH
|
||||
- `ansible_port`: порт для SSH-подключения
|
||||
- `ansible_host`: IP-адрес или имя хоста
|
||||
- `ansible_ssh_private_key_file`: путь к файлу с приватным ключом для SSH
|
||||
- `ansible_become`: определяет, нужно ли использовать привилегированные права (sudo) для выполнения задач
|
||||
- Группы групп
|
||||
```ini
|
||||
[production:children]
|
||||
web_servers
|
||||
db_servers
|
||||
```
|
||||
- Команды:
|
||||
|
||||
`ansible-inventory -i hosts.ini --list` - отображает список хостов, распределение хостов по группам в json-овидном формате
|
||||
|
||||
`ansible-inventory -i hosts.ini --graph` - отображает список хостов, распределение хостов по группам в древовидном формате
|
||||
> Ansible case sensetive!
|
||||
|
||||
> По умолчанию любой сервер входит в 2 группы: 1) all 2) ungrouped или пользовательская группа
|
||||
|
||||
#### Про конфигурационный файл `ansible.cfg`
|
||||
- Ansible ищет конфигурационный файл в нескольких местах, в следующем порядке при запуске:
|
||||
|
||||
1. В текущем каталоге — если существует файл ansible.cfg в директории, из которой запускается Ansible.
|
||||
2. В домашней директории пользователя — файл ~/.ansible.cfg.
|
||||
3. В системной директории — обычно /etc/ansible/ansible.cfg.
|
||||
|
||||
Ansible будет использовать первый найденный конфигурационный файл. Это позволяет иметь разные конфигурации для разных проектов.
|
||||
|
||||
Файл ansible.cfg лучше хранить в проекте, инфраструктуру когорого менеджерит ansible, а вот инвентарный файл hosts.ini можно хранить где угодно на Ansible-Master хосте, главное в .cfg задать путь к hosts.ini
|
||||
|
||||
#### Основные секции `ansible.cfg`
|
||||
- [defaults] - Это основная секция для установки параметров по умолчанию
|
||||
```ini
|
||||
[defaults]
|
||||
inventory = ./hosts # Указывает путь к инвентарному файлу
|
||||
remote_user = ubuntu # Пользователь для подключения по умолчанию
|
||||
host_key_checking = False # Отключение проверки ключей SSH хоста
|
||||
retry_files_enabled = False # Отключение создания файлов retry
|
||||
timeout = 10 # Время ожидания для SSH-соединения
|
||||
forks = 10 # Количество параллельных задач
|
||||
retry_files_enabled = True
|
||||
retry_files_save_path = ~/ansible-retries
|
||||
```
|
||||
Создание retry-файла: Если во время выполнения плейбука Ansible сталкивается с ошибкой на одном или нескольких серверах, он автоматически создаёт retry-файл. По умолчанию этот файл создаётся в директории, где был запущен плейбук, и имеет формат имя_плейбука.retry.
|
||||
|
||||
Повторный запуск плейбука: Можно использовать retry-файл, чтобы запустить плейбук только на тех серверах, которые указаны в файле. Для этого нужно указать имя retry-файла с опцией --limit.
|
||||
`ansible-playbook site.yml --limit @site.retry
|
||||
`
|
||||
- [privilege_escalation] - Эта секция управляет параметрами для выполнения команд от имени суперпользователя (с помощью sudo)
|
||||
```ini
|
||||
[privilege_escalation]
|
||||
become = True # Включение использования sudo (become)
|
||||
become_method = sudo # Метод получения привилегий (по умолчанию sudo)
|
||||
become_user = root # Пользователь, от имени которого выполняются команды
|
||||
become_ask_pass = False # Отключение запроса пароля при использовании sudo
|
||||
```
|
||||
- [ssh_connection] - Эта секция отвечает за параметры подключения через SSH.
|
||||
```ini
|
||||
[ssh_connection]
|
||||
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
|
||||
pipelining = True
|
||||
control_path = %(directory)s/%%h-%%r
|
||||
```
|
||||
`ssh_args`: Дополнительные параметры для команды ssh. В данном примере включена поддержка многократного использования одного SSH-соединения (ControlMaster).
|
||||
|
||||
`pipelining`: Опция для ускорения выполнения команд за счёт уменьшения количества вызовов SSH.
|
||||
|
||||
`control_path`: Путь для хранения файлов управления соединением SSH.
|
||||
- [log] - Настройка логирования
|
||||
```ini
|
||||
[log]
|
||||
log_path = /var/log/ansible.log
|
||||
```
|
||||
### Ad-Hoc команды
|
||||
`ansible [опции] <группа-хостов> -m <модуль> -a <аргументы>` - структура Ad-Hoc команд
|
||||
|
||||
- `ansible -i hosts.ini all -m setup` - выводит подробную информацию про конфигурацию хостов.
|
||||
- `ansible -i hosts.ini all -m ping` - проверка доступности хостов.
|
||||
- `ansible -i hosts.ini all -m shell -a "rm -rf /"` - запускает команду в кавычках на хостах, выводит вывод команды со всех хостов в консоль.
|
||||
- `ansible -i hosts.ini all -m command -a "rm -rf /"` - Команда(ы) не будут обрабатываться через shell, поэтому переменные типа $HOSTNAME и операции типа "*", "<", ">", "|", ";" и "&" не будут работать. Используйте модуль ansible.builtin.shell, если вам нужны эти функции. То есть command более секьюрная.
|
||||
- `ansible -i hosts.ini all -m copy -a "src=filename.txt dest=/home mode=777" -b` - ну тут понятно что команда делает, флаг `-b` - это выполнить от суперпользователя
|
||||
|
Loading…
x
Reference in New Issue
Block a user