Мы можем реализовать систему, которая будет выполнять за нас повторяющиеся и легко воспроизводимые задачи. Автоматизируйте рутину, чтобы освободить время для работы, которая приносит бизнесу реальную ценность — и с которой машинам не справиться. А ещё благодаря автоматизации не придётся раздувать штат.

В этой статье вы узнаете, как автоматизировать некоторые задачи и проверки работоспособности систем и программ. Ansible упростит вам жизнь, но только если вы следуете шаблонам и правилам.

Ansible обычно используется для трёх типов задач:

  1. Управление конфигурацией: изменять конфигурацию приложения, ОС или устройства; запускать и останавливать сервисы; устанавливать и обновлять приложения; реализовывать политику безопасности; выполнять другие задачи по конфигурации.

  2. Подготовка: настраивать различные серверы в инфраструктуре.

  3. Развёртывание приложений: развёртывать разработанные приложения в продакшен.

Что такое Ansible и почему именно он?

Ansible — это фреймворк автоматизации, который упрощает сложные задачи, освобождая разработчикам время для более срочной и важной работы. Это опенсорс-проект, который распространяется по лицензии GNU GPL.

Он простой и эффективный, а ещё работает без агента, то есть не придётся ничего устанавливать на целевые ноды, и значит у нас не будет лишних точек отказа и уязвимостей. А ещё мы сэкономим системные ресурсы. Ansible использует модель push — нужные конфигурации рассылаются через контрольную ноду Ansible на все управляемые целевые ноды, как показано на рисунке. Задачи записываются в плейбуки (простые скрипты YAML), а в файле инвентаризации хостов указаны хосты, на которых должны выполняться задачи.

https://docs.ansible.com/ansible/latest/dev_guide/overview_architecture.html
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Р на курсы Слёрма. 

Посмотреть программу курса и записаться.

Комментарии (12)


  1. icCE
    20.12.2022 14:17

     неОбычно имеет расширение INI или YAML. Ниже приводится файл .ini, который хранится в папке /etc/ansible/hosts: 

    Обычно не имеет расширение и для того же tower и awx желательно его не иметь, так как он ищет именно hosts. Поведение можно изменить, но не сильно нужно. ini уже устаревший формат и рекомендуется использовать yml. Для yml не обязательно указывать all, можно использовать и сокращённый формат. Полный список рекомендуется, если используется динамическая конфигурация.

    ```

    Ansible обычно используется для трёх типов задач:

    1. Управление конфигурацией:```

    ansible это просто автоматизация из коробки и он не является SCM системой, как например puppet или salt. Для того, что бы он стал SCM надо сделать различного рода приседания.


  1. FlyingDutchman
    20.12.2022 15:36

    То есть Jenkins в вашей схеме нужен лишь для того, чтобы запланировать / запустить новую задачу ( job ) в Ansible Tower?


  1. KorP
    20.12.2022 16:09
    +3

    Опять статья для начинающих. 100500 миллионов раз про это писали. Может уже копнуть поглубже и подготовить полезный материал?


    1. FlyingDutchman
      20.12.2022 19:05

      Поглубже начинаются всякие кастомизации под конкретные особенности организации.

      Вот мой пример - я пишу плэйбуки для Оракловских баз : проверка и конфигурация OS, установка софта, создание баз, включая RAC, создание Standby баз, переключение Primary и Standby, patch-и, изменение паролей юзеров и всякая другая всячина. Но..

      1) Такие базы нечасто используются - "соратников" мало, приходится самому постоянно изобретать велосипед

      2) Очень много различных умолчаний и собственных стандартов на уровне организаций - универсальные плэйбуки делать не получится.

      3) Вещи, связанные с базами данных и доступом к ним - это сугубо внутренний продукт организаций, который не выносится на широкую публику, чтобы не дать ни единого шанса на понимание как всё устроено и облегчить атаку на доступ к данным.


      1. KorP
        20.12.2022 19:18

        Ну как будто кроме оракла на этом свете в энсибле и рассказать нечего. переменные, циклы и ещё куча всего интересного внутри самого энсибла помимо плейбуков


        1. FlyingDutchman
          20.12.2022 19:23

          А, ну если переменные и циклы - это глубокое копание в ansible...


          1. KorP
            20.12.2022 19:25

            Ну уж явно глубже, чем в очередной статье "знакомство"
            Можно и про разработку модулей писать, вариантов масса, это был лишь пример


            1. onegreyonewhite
              20.12.2022 20:39
              +2

              Мне кажется людям всё меньше хочется на хабре писать глубокое и интересное, потому что фидбек слабый. А вот маркетинговый булшит приносит выгоду.

              Опять же про понятие глубины. Вот я недавно написал про скриптовые inventory, это глубоко или не очень? Хотел про плагины начать писать, но судя по всему не зашло, поэтому забил.


              1. KorP
                20.12.2022 21:41
                +1

                Да, я с вами согласен. Но больше некуда писать.

                Вашу статью я видел - мне понравилось, буду рад продолжению


                1. onegreyonewhite
                  21.12.2022 21:16

                  Тогда похоже придётся написать.


              1. FlyingDutchman
                21.12.2022 10:10

                Я с интересом прочитал вашу статью. И даже заслуженный плюсик поставил за интересный материал. Но не нашел применения этому для своих узкоспециализированных задач.


  1. AlexGluck
    20.12.2022 17:31
    +1

    Ansible — это инструмент автоматизации, и при установке SSH-соединения некому ответить yes, так что мы устанавливаем host_key_checking=false.

    Есть же StrictHostKeyChecking=accept-new, зачем удалять проверку? Может лучше ногу отрезать, всё равно же вы сидите за компьютером, а с одной ногой проще.