Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
методология_devops:построение_описания_инфраструктуры_с_помощью_ansible:start [2025/05/31 20:48] kirill |
методология_devops:построение_описания_инфраструктуры_с_помощью_ansible:start [2025/05/31 20:54] (текущий) kirill [Основные концепции Ansible] |
||
---|---|---|---|
Строка 36: | Строка 36: | ||
``` | ``` | ||
* **YAML формат (пример): | * **YAML формат (пример): | ||
+ | ```yaml | ||
+ | all: | ||
+ | hosts: | ||
+ | web1.example.com: | ||
+ | web2.example.com: | ||
+ | vars: | ||
+ | http_port: 80 | ||
+ | webservers: | ||
+ | hosts: | ||
+ | web1.example.com: | ||
+ | web2.example.com: | ||
+ | databases: | ||
+ | hosts: | ||
+ | db01.example.com: | ||
+ | ansible_host: | ||
+ | ansible_user: | ||
+ | ansible_ssh_pass: | ||
+ | ``` | ||
+ | |||
+ | 4. **Модули (Modules): | ||
+ | * Модули являются идемпотентными. | ||
+ | * Вызываются внутри задач в плейбуках. | ||
+ | * Документацию по модулям можно найти на сайте Ansible или с помощью команды `ansible-doc < | ||
+ | |||
+ | 5. **Задачи (Tasks):** Единицы действия в плейбуке. Каждая задача вызывает один или несколько модулей для выполнения определенной операции на управляемых узлах. | ||
+ | |||
+ | 6. **Плейбуки (Playbooks): | ||
+ | * Плейбуки определяют, | ||
+ | * Плейбуки являются основой автоматизации в Ansible. | ||
+ | |||
+ | 7. **Роли (Roles):** Способ организации и повторного использования плейбуков, | ||
+ | * Стандартная структура директорий роли: | ||
+ | ``` | ||
+ | my_role/ | ||
+ | ├── defaults/ | ||
+ | │ | ||
+ | ├── files/ | ||
+ | ├── handlers/ | ||
+ | │ | ||
+ | ├── meta/ | ||
+ | │ | ||
+ | ├── tasks/ | ||
+ | │ | ||
+ | ├── templates/ | ||
+ | └── vars/ | ||
+ | └── main.yml | ||
+ | ``` | ||
+ | |||
+ | 8. **Переменные (Variables): | ||
+ | |||
+ | 9. **Факты (Facts):** Информация об управляемых узлах, автоматически собираемая Ansible (например, | ||
+ | |||
+ | 10. **Обработчики (Handlers): | ||
+ | |||
+ | ## Установка Ansible | ||
+ | |||
+ | * **Контрольный узел (пример Debian/ | ||
+ | * **Контрольный узел (пример Red Hat/ | ||
+ | * **Управляемые узлы:** Для взаимодействия через SSH на Linux/Unix должна быть настроена аутентификация по ключам SSH (рекомендуется) или разрешен парольный вход. Для Windows должна быть настроена служба WinRM. | ||
+ | |||
+ | ## Основной рабочий процесс Ansible | ||
+ | |||
+ | 1. **Настройка Inventory: | ||
+ | 2. **Написание плейбуков: | ||
+ | 3. **Выполнение плейбуков: | ||
+ | * Команда для выполнения плейбука: | ||
+ | * Дополнительные опции: | ||
+ | * `-l` или `--limit < | ||
+ | * `-u` или `--user < | ||
+ | * `-k` или `--ask-pass`: | ||
+ | * `--ask-become-pass`: | ||
+ | * `-v`, `-vv`, `-vvv`, `-vvvv`: Уровни verbosity (детализации вывода). | ||
+ | * `--check`: Режим проверки (dry run) - Ansible сообщает, | ||
+ | * `--diff`: Показать изменения, | ||
+ | # Ansible: Автоматизация управления конфигурацией, | ||
+ | |||
+ | ## Введение | ||
+ | |||
+ | * **Проблема: | ||
+ | * **Решение: | ||
+ | * **Основные возможности: | ||
+ | * **Основные принципы: | ||
+ | |||
+ | ## Что такое Ansible? | ||
+ | |||
+ | * **Определение: | ||
+ | * **Agentless архитектура: | ||
+ | * **Простота использования: | ||
+ | * **Модульная архитектура: | ||
+ | * **Идемпотентность: | ||
+ | |||
+ | ## Основные концепции Ansible | ||
+ | |||
+ | 1. **Управляемые узлы (Managed Nodes / Hosts):** Серверы, | ||
+ | |||
+ | 2. **Контрольный узел (Control Node):** Машина, | ||
+ | |||
+ | 3. **Inventory: | ||
+ | | ||
+ | * **INI формат (пример): | ||
+ | | ||
+ | ``` | ||
+ | [webservers] | ||
+ | web1.example.com | ||
+ | web2.example.com | ||
+ | |||
+ | [databases] | ||
+ | db01.example.com ansible_host=192.168.1.10 ansible_user=admin ansible_ssh_pass=secret | ||
+ | |||
+ | [all:vars] | ||
+ | http_port=80 | ||
+ | ``` | ||
+ | | ||
+ | * **YAML формат (пример): | ||
+ | | ||
```yaml | ```yaml | ||
all: | all: | ||
Строка 127: | Строка 242: | ||
name: nginx | name: nginx | ||
state: present | state: present | ||
- | ``` | + | |
+ | Запуск и остановка сервисов: | ||
+ | YAML | ||
+ | |||
+ | - name: Управление сервисом apache2 | ||
+ | hosts: webservers | ||
+ | become: true | ||
+ | tasks: | ||
+ | - name: Запуск сервиса apache2 | ||
+ | service: | ||
+ | name: apache2 | ||
+ | state: started | ||
+ | |||
+ | - name: Остановка сервиса apache2 | ||
+ | service: | ||
+ | name: apache2 | ||
+ | state: stopped | ||
+ | |||
+ | Копирование файлов: | ||
+ | YAML | ||
+ | |||
+ | - name: Копирование файла конфигурации | ||
+ | hosts: webservers | ||
+ | tasks: | ||
+ | - name: Копирование nginx.conf | ||
+ | copy: | ||
+ | src: / | ||
+ | dest: / | ||
+ | owner: root | ||
+ | group: root | ||
+ | mode: ' | ||
+ | notify: restart nginx | ||
+ | |||
+ | handlers: | ||
+ | - name: restart nginx | ||
+ | service: | ||
+ | name: nginx | ||
+ | state: restarted | ||
+ | become: true | ||
+ | |||
+ | Развертывание приложений: | ||
+ | YAML | ||
+ | |||
+ | - name: Развертывание веб-приложения | ||
+ | hosts: appservers | ||
+ | tasks: | ||
+ | - name: Создание директории приложения | ||
+ | file: | ||
+ | path: / | ||
+ | state: directory | ||
+ | owner: appuser | ||
+ | group: appuser | ||
+ | mode: ' | ||
+ | become: true | ||
+ | |||
+ | - name: Копирование файлов приложения | ||
+ | copy: | ||
+ | src: / | ||
+ | dest: / | ||
+ | owner: appuser | ||
+ | group: appuser | ||
+ | mode: ' | ||
+ | become: true | ||
+ | |||
+ | - name: Запуск приложения (например, | ||
+ | systemd: | ||
+ | name: myapp.service | ||
+ | state: started | ||
+ | become: true | ||
+ | |||
+ | Преимущества Ansible | ||
+ | |||
+ | Простота и легкость обучения: | ||
+ | Agentless: Нет необходимости устанавливать агентов на управляемых узлах. | ||
+ | Мощность и гибкость: | ||
+ | Идемпотентность: | ||
+ | Оркестрация: | ||
+ | Большое сообщество и экосистема: | ||
+ | Безопасность: | ||
+ | |||
+ | Недостатки Ansible | ||
+ | |||
+ | Зависимость от SSH/WinRM: Требуется настроенная связь с управляемыми узлами. | ||
+ | Производительность для очень больших сред: В некоторых случаях может быть менее производительным по сравнению с агентскими системами при выполнении большого количества мелких задач. | ||
+ | Обработка сложных сценариев: | ||
+ | |||
+ | Заключение | ||
+ | |||
+ | Ansible - это мощный и удобный инструмент автоматизации, | ||
+ | Следующие шаги | ||
+ | |||
+ | Установка Ansible на контрольном узле. | ||
+ | Настройка файла inventory для управления целевыми хостами. | ||
+ | Написание простых плейбуков для выполнения базовых задач. | ||
+ | Изучение основных модулей Ansible (например, | ||
+ | Организация автоматизации с помощью ролей. | ||
+ | Исследование возможностей Ansible Galaxy для поиска готовых решений. |