[Перевод] Автоматизация с Ansible
Мы можем реализовать систему, которая будет выполнять за нас повторяющиеся и легко воспроизводимые задачи. Автоматизируйте рутину, чтобы освободить время для работы, которая приносит бизнесу реальную ценность — и с которой машинам не справиться. А ещё благодаря автоматизации не придётся раздувать штат.
В этой статье вы узнаете, как автоматизировать некоторые задачи и проверки работоспособности систем и программ. Ansible упростит вам жизнь, но только если вы следуете шаблонам и правилам.
Ansible обычно используется для трёх типов задач:
Управление конфигурацией: изменять конфигурацию приложения, ОС или устройства; запускать и останавливать сервисы; устанавливать и обновлять приложения; реализовывать политику безопасности; выполнять другие задачи по конфигурации.
Подготовка: настраивать различные серверы в инфраструктуре.
Развёртывание приложений: развёртывать разработанные приложения в продакшен.
Что такое Ansible и почему именно он?
Ansible — это фреймворк автоматизации, который упрощает сложные задачи, освобождая разработчикам время для более срочной и важной работы. Это опенсорс-проект, который распространяется по лицензии GNU GPL.
Он простой и эффективный, а ещё работает без агента, то есть не придётся ничего устанавливать на целевые ноды, и значит у нас не будет лишних точек отказа и уязвимостей. А ещё мы сэкономим системные ресурсы. Ansible использует модель push — нужные конфигурации рассылаются через контрольную ноду Ansible на все управляемые целевые ноды, как показано на рисунке. Задачи записываются в плейбуки (простые скрипты YAML), а в файле инвентаризации хостов указаны хосты, на которых должны выполняться задачи.
https://docs.ansible.com/ansible/latest/dev_guide/overview_architecture.html
Модули и пакеты Ansible, называемые плейбуками, легко понять, потому что они используют простой синтаксис на основе YAML.
Для установки Ansible нам нужен Python — инструкции см. здесь.
Нам понадобится три файла: файл инвентаризации, файл плейбука и файл конфигурации.
Пример файла инвентаризации хостов.
Обычно имеет расширение INI или YAML. Ниже приводится файл .ini, который хранится в папке /etc/ansible/hosts:
mail.example.com
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
Тот же файл инвентаризации в формате .yaml:
all:
hosts:
mail.example.com:
children:
webservers:
hosts:
foo.example.com:
bar.example.com:
dbservers:
hosts:
one.example.com:
two.example.com:
three.example.com:
А вот как выглядит плейбук (.yaml или .yml): First_playbook.yml
---
- name: Update web servers
hosts: webservers
remote_user: root
tasks:
- name: Ensure apache is at the latest version
ansible.builtin.yum:
name: httpd
state: latest
У этого плейбука всего одна задача — убедиться, что используется Apache последней версии. Он применяет встроенный модуль yum для ОС RHEL (Red Hat Enterprise Linux) и получает последнюю версию httpd (Apache).
Сообщество Ansible разработало около 500 модулей.
Реализация
Ещё нам понадобится файл конфигураций, чтобы Ansible знал, где хранится файл инвентаризации, мог взять из него нужную информацию и выполнить все задачи из плейбука на указанных хостах.
Файл конфигурации— ansible.cfg в папке /etc/ansible.
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False
Мы указываем путь к файлу инвентаризации и, как показано на иллюстрации, подключаемся по SSH к удалённым хостам. Ansible — это инструмент автоматизации, и при установке SSH-соединения некому ответить yes, так что мы устанавливаем host_key_checking=false.
Для взаимодействия с контрольной нодой Ansible нам понадобится утилита sshpass, которую в RHEL мы можем установить командой:
yum install sshpass -y
Теперь мы можем подключаться к удалённым хостам. Давайте для проверки отправим ping удалённому хосту и получим ответ.
[root@localhost ansible]# ansible all -m ping
Запустить плейбук можно командой ansible-playbook. При желании можно передать несколько переменных или тегов в командной строке.
[root@localhost ansible]# ansible-playbook First_playbook.yml
Эта команда запустит задачи, а затем предоставит сводку по ним.
Мы можем написать в плейбуке несколько задач и использовать разные возможности Ansible, чтобы выполнять эти задачи в разных сценариях, как показано на иллюстрации.
При желании можно использовать платное решение, Ansible Tower, с удобным пользовательским интерфейсом и дополнительными функциями, например, управление доступом на основе ролей, планирование заданий, объединение плейбуков в цепочку.
См. страницу Ansible Tower
Типичная архитектура в DevOps-проектах
Мы отправляем коммит в git, оттуда его забирает Jenkins для сборки и через Ansible выполняется развёртывание на контейнерах-подписчиках.
Бизнесу необходимо автоматизировать задачи, чтобы работать быстро и соблюдать все SLA, и Ansible отлично подходит для таких сценариев.
Читайте документацию по Ansible.
Автоматизация с Ansible
Тех, кто хочет научиться управлять серверами и автоматизировать задачи с помощью Ansible, мы приглашаем на наш курс «Ansible: Infrastructure as Code», который пройдет с 23 января по 19 февраля.
Знания из курса особенно пригодятся администраторам, инженерам и желающим подняться вверх по карьерной лестнице в качестве девопса.
Кстати, учиться будет интересно не только тем, кто недавно начал свое знакомство с инструментом. Программа рассчитана и на специалистов, которые хотят структурировать уже имеющиеся знания и закрепить их на практике.
На курсе вы:
Узнаете как работать с переменными, как писать плейбуки и роли;
Развернете LEMP стек, PostgreSQL и Mongo кластеры,
Задеплоите Flask приложение;
Напишите свой модуль для Ansible;
Настроите IaC в Gitlab;
Разберетесь с работой с облаками и enterprise решениями.
После обучения вы сможете конфигурировать рутинные задачи с помощью удобного инструмента без страха правок конфигураций. Вы будете понимать, когда и как писать свои модули, а также смело залазить под капот Ansible.
Купите курс до 28 декабря и участвуйте в розыгрыше сертификата на 500 000Р на курсы Слёрма.
Посмотреть программу курса и записаться.