Ansible – це безкоштовний проєкт з відкритим вихідним кодом, розроблений компанією Red Hat на базі Python. Він є популярною платформою для управління конфігураціями та автоматизації ІТ-інфраструктури.
Цей інструмент є кросплатформенним і сумісний з більшістю сучасних операційних систем, таких як Linux, Windows і macOS. Він використовує декларативну мову, YAML (YAML Ain’t Markup Language), для опису конфігурацій систем.
Ansible, разом з іншими платформами управління конфігураціями, зробив революцію в сфері автоматизації ІТ та встановив нові галузеві стандарти. Інструменти управління конфігураціями стали невід’ємною частиною DevOps та є важливими для будь-якого сучасного ІТ-процесу. Ansible застосовується в будь-якому інфраструктурному середовищі, будь то локальна, гібридна або хмарна інфраструктура. Крім того, Ansible може допомогти автоматизувати багато рутинних завдань, які щоденно виконують системні адміністратори.
Однією з ключових переваг Ansible є його без агентська архітектура, яка не вимагає встановлення додаткового програмного забезпечення на цільових машинах. Для початку роботи потрібен лише доступ SSH та наявність підтримуваної версії Python, яка, як правило, вже встановлена в більшості сучасних операційних систем. Завдяки своїй легкості, Ansible можна використовувати навіть із застарілими системами.
Застосування Ansible
Оркестрування
Ansible – це ідеальний інструмент для оркестрування різноманітних завдань системного адміністрування та розгортання. Його плейбуки дозволяють використовувати спільні робочі процеси в різних проєктах, а конфігураційні дані на основі YAML дозволяють зберігати та контролювати версії інфраструктури за допомогою Git або інших систем контролю версій.
Розгортання додатків
Ansible спрощує автоматизацію повного циклу розгортання додатків, незалежно від їх складності, від простих програм до масштабних багаторівневих систем.
Безпека та відповідність
Ansible допомагає забезпечити безпеку систем, дотримуючись вказівок організації та галузевих стандартів. Він здатний працювати з великою кількістю серверів, проводити аудит та виправляти вразливості, надаючи адміністратору повний контроль над середовищем.
Розглянемо декілька поширених завдань системного адміністратора, які можна автоматизувати за допомогою Ansible.
Копіювання файлів між локальними та віддаленими системами
Системним адміністраторам часто доводиться копіювати файли між різними каталогами, наприклад, переносити файли конфігурації на віддалені сервери або між віддаленими розташуваннями.
Модуль копіювання Ansible дозволяє легко виконувати ці завдання за допомогою плейбуків.
Системні адміністратори повинні постійно відслідковувати стан керованих серверів та виконувати дії згідно з політикою організації. Одним з таких завдань є визначення часу роботи сервера. Ansible дозволяє легко отримати значення часу безперебійної роботи та вивести їх. Наприклад, розглянемо плейбук, що копіює конфігурацію NTP з локальної машини на віддалений сервер:
- hosts: all gather_facts: no become: yes tasks: - name: Copy a new ntp configuration file and back up the original, if it differs copy: src: ./ntp.conf dest: /etc/ntp.conf owner: root group: root mode: '0644' backup: yes
Налаштування завдань cron
Налаштування запланованих завдань для виконання рутинних операцій є важливим аспектом управління сервером. Завдання, такі як автоматичне резервне копіювання, оновлення, аудит, можна автоматично планувати на певний час доби або місяця, звільняючи час для інших задач.
Cron є одним з інструментів для планування завдань у Linux, і Ansible може допомогти вам додавати або змінювати ці завдання. Наприклад, розглянемо плейбук, що встановлює завдання rsync для root на одному або кількох серверах:
- hosts: all gather_facts: no become: yes tasks: - name: Deploy cron job cron: name: "Set rsync job" user: root minute: "5" hour: "4" job: "rsync -avz /path/to/folder1 /path/to/folder1 2>&1"
Керування дисками та файловими системами
Ansible можна використовувати для управління дисками, розділами, файловими системами та монтуваннями, включаючи /etc/fstab на серверах Linux. Для цього є спеціальний модуль Ansible. Наприклад, розглянемо плейбук, який створює розділ на диску об’ємом 100 ГБ, форматує його за допомогою ext4, створює каталог для монтування та монтує розділ:
- hosts: all gather_facts: no become: yes tasks: - name: Create a partition parted: device: /dev/sdb number: 1 part_end: "100%" state: present - name: Format new partition filesystem: fstype: ext4 dev: /dev/sdb1 - name: Create mount directory file: path: /data state: directory - name: Mount partition mount: path: /data src: /dev/sdb1 fstype: ext4 state: mounted
Збір журналів сервера
Зберігання журналів в одному місці важливо для безпеки, аудиту та аналізу. Ansible дозволяє збирати журнали з різних серверів та зберігати їх у визначеному місці. Ось приклад плейбука для цього:
- hosts: all gather_facts: no become: yes tasks: - name: Find logs find: paths: /var/log/ patterns: '*.log' recurse: yes register: _logs - name: Fetch logs fetch: src: "{{ item.path }}" dest: /tmp/logs with_items: "{{ _logs.files }}"
Встановлення та видалення пакетів
Часто потрібно встановлювати пакети на запит користувачів або під час початкової збірки сервера, а також видаляти непотрібні пакети. Ansible спрощує ці завдання, дозволяючи встановлювати або видаляти пакети на багатьох серверах без необхідності ручного виконання команд на кожному з них. Ось приклад плейбуків для встановлення та видалення пакетів на Ubuntu та RHEL/CentOS:
- hosts: ubuntu gather_facts: no tasks: - name: Install lsof utility apt: pkg: lsof state: latest sudo: yes - name: Remove ARP Scan utility apt: pkg: arp-scan state: absent sudo: yes --- - hosts: centos gather_facts: no tasks: - name: Install lsof utility yum: pkg: lsof state: latest sudo: yes - name: Remove ARP Scan utility yum: pkg: arp-scan state: absent sudo: yes
Керування користувачами
Користувачі та групи є базовою структурою для керування доступом і дозволами в Unix/Linux. У великих організаціях управління користувачами та групами може бути складним завданням. Завдяки Ansible системний адміністратор отримує потужний інструмент для створення, зміни та видалення користувачів та груп. Розглянемо простий приклад:
- hosts: all gather_facts: no become: yes tasks: - group: gid: 12310 name: groupA state: present - group: gid: 12311 name: groupB state: present - user: name: user1 state: absent - user: name: user2 uid: 12427 shell: /bin/false password_lock: yes groups: groupA, groupB
Керування службами
Служби – це фонові процеси, які забезпечують роботу різних сервісів, таких як sshd. Ansible дозволяє керувати службами, запускати, зупиняти та перезапускати їх. Ось приклад плейбука для управління службами:
- hosts: all gather_facts: no become: yes tasks: - name: Restart ssh daemon service: name: ssh state: restarted - name: Restart sssd daemon service: name: sssd state: stopped - name: Restart httpd daemon service: name: httpd state: started
У цьому прикладі служба SSH буде перезапущена, SSSD зупинена, а httpd запущена. Ansible є ідемпотентним, тому служби, які вже запущені або зупинені, не будуть змінені. Важливо перевіряти назви служб, оскільки різні дистрибутиви Linux можуть використовувати різні імена для одних і тих самих служб.
Підсумок
Ansible спрощує роботу системних адміністраторів, дозволяючи автоматизувати рутинні завдання, зменшуючи кількість помилок та заощаджуючи час. Крім того, він дозволяє зберігати конфігураційні дані в централізованому сховищі, такому як Git, що сприяє співпраці та контролю за змінами.
Щоб дізнатися більше про Ansible та його модулі, зверніться до офіційної документації.