Ansible
Задание 0. Построение стенда
Схема виртуального лабораторного стенда
Рисунок 1. Схема стенда
1. Создать виртуальный стенд для работы
Название виртуальной машины | Источник | Тип инстанса | Сети для внешнего подключения | Размер диска |
---|---|---|---|---|
Ansible | Образ-Ubuntu-server20.04 | small | external-net | 15GB |
node1 | Образ-Ubuntu-server20.04 | small | external-net | 15GB |
node2 | Образ-Oracle-Linux-8.4:RECSDS | small | external-net | 15GB |
2. Установить ANSIBLE
PIP
- Проверить наличие
python
на узле:python3 -v
- При отсутствии
python
, его необходимо установить:sudo apt install python3
- Проверяем наличие менеджера пакетов
pip
:python3 -m pip --version
- При отсутствии
pip
, его необходимо установить:sudo apt install python3-pip
При наличии python с менеджером пакетов pip, можно установить используя его.
Для установки с помощью pip
необходимо ввести команду
python3 -m pip install --user ansible
При необходимости можно установить пакет ansible-core
он отличается тем, что с помощью него возможно использовать только язык и рантайм ансибла, и отсутствует интеграция с galaxy
python3 -m pip install --user ansible-core
Ansible и Ansible Core тесно связаны, но есть небольшая разница между ними. Ansible Core представляет собой базовый движок автоматизации, который включает основные функции управления конфигурациями и выполнения задач через SSH. Он является основой для всей экосистемы Ansible. С другой стороны, Ansible как платформа включает в себя не только ядро, но и дополнительные инструменты, модули, плагины и библиотеки, расширяющие функциональность и возможности автоматизации. Таким образом, Ansible Core представляет собой базовую часть, в то время как Ansible включает в себя эту базу и дополнительные компоненты для расширения функциональности и упрощения управления инфраструктурой.
Ubuntu
Для установки на Ubuntu можно использовать стандартный менеджер пакетов apt
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
Debian
Так-как репозиторий debian стал deprecated, возможно использование обходных путей для установки пакета
Debian | Ubuntu | UBUNTU_CODENAME |
---|---|---|
Debian 12 (Bookworm) | Ubuntu 22.04 (Jammy) | jammy |
Debian 11 (Bullseye) | Ubuntu 20.04 (Focal) | focal |
Debian 10 (Buster) | Ubuntu 18.04 (Bionic) | bionic |
Пример для Debian12
UBUNTU_CODENAME=jammy
wget -O- "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" | sudo gpg --dearmour -o /usr/share/keyrings/ansible-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/ansible-archive-keyring.gpg] http://ppa.launchpad.net/ansible/ansible/ubuntu $UBUNTU_CODENAME main" | sudo tee /etc/apt/sources.list.d/ansible.list
sudo apt update && sudo apt install ansible
Проверка установки ansible
ansible --version
3. Минимальная настройка ANSIBLE
Хоть Ansible может работать из коробки и не требует дополнительной настройки, мы можем заранее выполнить настройки которые улучшат опыт использования системы автоматизации для этого мы можем использовать конфигурационные параметры и они могут храниться в различных местах:
-
ANSIBLE_CONFIG (переменная окружения)
-
ansible.cfg (в текущем каталоге, откуда происходит запуск)
-
~/.ansible.cfg (в домашнем каталоге пользователя)
-
/etc/ansible/ansible.cfg
В ходе работы мы предлагаем такой конфиг, разместив его в домашней директории
[defaults] # Отключение проверки хостовых ключей SSH.Это позволяет Ansible подключаться к хостам без подтверждения их хостовых ключей. host_key_checking = False # Настройка метода сбора информации о системе хоста. "smart" означает автоматически определить наилучший метод, исходя из условий. gathering = smart # Указание метода передачи данных между хостами. transfer_method = piped # Настройка параметров SSH. ssh_args = "-o ControlMaster=auto -o ControlPersist=60s" # Максимальное количество параллельных процессов (форков) Ansible.Это определяет, сколько хостов может обрабатываться параллельно. forks = 20
Тут представлена малая часть параметров которые можно использовать, полный список можно получить в документации https://docs.ansible.com/ansible/latest/reference_appendices/config.html
4. Написание инвентори
Ansible использует файлы инвентаря для определения групп хостов и их параметров. Создайте файл inventory.ini
и определите в нем хосты, с которыми будет взаимодействовать Ansible:
[web]
# Добавление узла с именем web и ip адресом 172.17.5.5
node1 ansible_host=172.17.5.5
[all:vars]
# Добавление общей переменной для всех хостов в inventory, с указанием общего имени пользователя
ansible_user = cloudadmin
Проверить inventory, можно использовав встроенный модуль ansible ping
:
ansible -i inventory.ini all -m ping
Пример валидного ответа
Также можно получить всю существующую информацию об хостах:
ansible -i inventory.ini all -m setup
Установить пакет git
используя модуль apt
:
ansible all -i inventory.ini -m apt -a "name=git state=present" --become
Опция
--become
в командах Ansible используется для выполнения задач с привилегиями суперпользователя (обычно root). Грубо говоря как использованияsudo
при работе в терминале.
Выполнить команду ss -tulpan
на удаленных узлах:
ansible all -i inventory.ini -m command -a "ss -tulpan" --become
5. Написание плейбуков
Плейбуки в Ansible - это текстовые файлы в формате YAML, которые содержат описание задач, которые должны быть выполнены на целевых хостах. Их основное предназначение - автоматизация конфигурации и управления системами. Попробуем написать простой плейбук и будем его пополнять в процессе работы:
---
- name: Update packages
hosts: node
become: yes
tasks:
- name: Update all packages
apt:
update_cache: yes
upgrade: 'yes'
Для выполнения плейбука можно выполнить команду:
ansible-playbook playbook.yaml -i inventory.ini
Пример того, когда при выполнение плейбука обновляются пакеты: Пример выполнения плейбука, когда пакеты не были обновлены:
Можно заметить, что в данном случае плейбук состоит всего из одной задачи, но плейбуки могут состоять из множетсва задача, давайте добавим задачу для установки NGINX, и передачи ему конфигурации: