Перейти к основному контенту

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

  1. Проверить наличие python на узле:
    python3 -v
    
  2. При отсутствии python, его необходимо установить:
    sudo apt install python3
    
  3. Проверяем наличие менеджера пакетов pip:
    python3 -m pip --version
    
  4. При отсутствии 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 может работать из коробки и не требует дополнительной настройки, мы можем заранее выполнить настройки которые улучшат опыт использования системы автоматизации для этого мы можем использовать конфигурационные параметры и они могут храниться в различных местах:

  1. ANSIBLE_CONFIG (переменная окружения)

  2. ansible.cfg (в текущем каталоге, откуда происходит запуск)

  3. ~/.ansible.cfg (в домашнем каталоге пользователя)

  4. /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, и передачи ему конфигурации: