Ansible
Ansible - это инструмент для управления конфигурацией и автоматизации, который позволяет разработчикам и системным администраторам управлять настройками и процессами на множестве серверов с помощью кода. Ansible использует декларативный язык описания состояния системы и позволяет автоматизировать множество задач, включая настройку серверов, развертывание приложений, обновления, резервное копирование и многое другое.
Особенности Ansible:
- Декларативный язык: Ansible использует YAML для описания состояния системы. Вы описываете желаемое состояние системы, и Ansible приводит реальное состояние к описанному.
- Без агентов: Ansible работает по SSH-протоколу и не требует установки агентов на удаленных системах. Это делает его более легким для развертывания.
- Инфраструктура как код: Ansible позволяет описывать и управлять инфраструктурой как кодом. Это облегчает повторное использование и обеспечивает версионирование конфигурации.
- Ansible условно идемпонентен. Идемпотентность - это ключевой концепт в области Infrastructure as Code (IAAC), который означает, что одно и то же действие можно выполнять несколько раз, но результат останется таким же, как если бы оно было выполнено только один раз. В контексте IAAC это означает, что применение одних и тех же конфигурационных изменений на инфраструктуре не приведет к дополнительным или нежелательным эффектам, если действие уже было выполнено ранее.
- Легко расширяем – любой дополнительный функционал можно реализовать на bash/python
Архитектура Ansible представляет собой распределенную систему управления конфигурацией и автоматизации, предназначенную для управления серверами и сетевыми устройствами. Ansible использует модель управления на основе декларативных описаний состояний системы, что означает, что вы определяете желаемое состояние вашей инфраструктуры, и Ansible заботится о приведении системы к этому состоянию.
Основные компоненты архитектуры Ansible:
- Управляющий узел (Control Node): Это машина, на которой установлен Ansible и с которой вы управляете всей автоматизацией. Управляющий узел содержит инвентарь (inventory) - список целевых узлов, которые вы хотите управлять, а также плейбуки и роли, которые определяют задачи и действия, которые должны быть выполнены на целевых узлах.
- Целевые узлы (Managed Nodes): Это целевые серверы или устройства, которые вы хотите автоматизировать и управлять с помощью Ansible. На целевых узлах должен быть установлен SSH-сервер (для Linux) или агент (для Windows), чтобы Ansible мог взаимодействовать с ними.
- Инвентарь (Inventory): Это текстовый или YAML-файл, который содержит список целевых узлов, к которым Ansible должен подключаться и выполнять задачи. Инвентарь также может содержать группы хостов и переменные для настройки выполнения задач.
- Модули (Modules): Ansible поставляется с более чем 1000 встроенными модулями, которые представляют собой инструменты для выполнения различных задач на целевых узлах. Модули Ansible выполняют конкретные действия, такие как установка программного обеспечения, настройка сервисов, управление пользователями и группами и многое другое.
- Плейбуки (Playbooks): Плейбуки - это файлы YAML, в которых определены задачи, которые Ansible должен выполнить на целевых узлах. Плейбуки содержат список задач, модули, параметры и условия для выполнения.
- Роли (Roles): Роли - это структурированный способ организации плейбуков и других файлов конфигурации Ansible. Они позволяют легко повторно использовать код автоматизации и создавать более организованные и модульные конфигурации.
- Group vars (групповые переменные) - это механизм в Ansible, который позволяет задавать переменные для групп хостов в инвентаре. Они используются для определения общих переменных, которые применяются ко всем хостам в определенной группе. Групповые переменные помогают упростить управление конфигурациями и позволяют настраивать хосты в рамках определенных групп с общими параметрами.
- Преоритеты переменных. В Ansible существует несколько источников переменных, и они имеют определенный приоритет. Это позволяет управлять настройками на разных уровнях и переопределять их при необходимости.
- Ansible Vault – инструмент, позволяющий зашифровать переменные (AES256), скрыв чувствительные данные от общего использования.
- Templates – инструмент, позволяющий создать кастомизированный конфигурационный файл на основе шаблона. Для шаблонизации используется Jinja
- Facts – сбор информации об удалённом хосте, включая сетевую информацию, информацию о системе, информацию о пользователе, и прочее.
- Collections – способ распространения контента Ansible. Включает в себя набор roles, modules, playbooks.
Как работает Ansible?
- Весь процесс автоматизации описывается в playbook;
- Playbook содержит информацию о том, что и где необходимо сделать;
- То, что необходимо сделать описывается в блоке play;
- Где необходимо выполнять play написано в inventory;
- Play состоит из перечислений task и role;
- Task – атомарное действие над host из inventory;
- Конкретные действия в тасках выполняются с помощью модулей;
- Задачи можно группировать в block;
- Role – набор tasks вне playbook, которые выполняются для получение одного общего результата;
- Абсолютно все сущности кастомизируются при помощи переменных;
- Переменные playbook лучше всего хранить в group vars. Переменные можно хранить и в других местах, существует приоритезация переменных. Переменные можно шифровать при помощи vault. Переменные можно подставлять в templates для создания конфигурационных файлов.
Что входит в пакет ansible.
- ansible – определение и запуск playbook из одного task нанаборе hosts;
- ansible-playbook – запуск полноценного playbook;
- ansible-vault – шифрование хранилища методом AES256;
- ansible-galaxy – скачивание roles и collections;
- ansible-lint – используется для проверки синтаксиса;
- ansible-console – консоль для запуска tasks;
- ansible-config – просмотр и управление конфигурацией ansible;
- ansible-doc – просмотр документации plugins;
- ansible-inventory – просмотр информации о hosts из inventory;
- ansible-pull – скачивание playbook и запуск на localhost;
- ansible-test – тестирование collections.
Популярные команды Ansible.
ansible -m ping localhost #Сделаем ping на locahost
ansible -m ping -i inventory.yml all #Сделаем ping на всех хостах из inventory
ansible -m ping -i inventory.yml <group_name> #Сделаем ping на всех хостах группы <group_name>
ansible-playbook site.yml -i inventory/test.yml #Запуск site нахостах из test
ansible-inventory -i inventory.yml --graph <group_name> #Показать хосты группы
ansible-inventory -i inventory.yml --list #Показать все переменные всех хостов из inventory
ansible-inventory -i inventory.yml --list <hostname> #Показать все переменные хоста из inventory
ansible-doc <plugin_name> #Показать документацию по плагину
ansible-doc --type connection --list #Показать список плагинов для подключения к хостам
ansible-vault create <filename> #Создать новый зашифрованные файл
ansible-vault edit <filename> #Отредактировать зашифрованный файл
ansible-vault view <filename> #Просмотреть зашифрованный файл
ansible-vault rekey <filename> #Поменять пароль у файла
ansible-vault encrypt <filename> #Зашифровать файл
ansible-vault decrypt <filename> #Расшифровать файл
ansible-playbook playbook-name.yml -i inventory-file-name.yml --ask-vault-password #Запуск плейбука с зашифрованными переменными