Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
методология_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 для поиска готовых решений. | ||