Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
|
методология_devops:построение_описания_инфраструктуры_с_помощью_ansible:start [2025/05/31 20:45] kirill создано |
методология_devops:построение_описания_инфраструктуры_с_помощью_ansible:start [2025/05/31 20:54] (текущий) kirill [Основные концепции Ansible] |
||
|---|---|---|---|
| Строка 24: | Строка 24: | ||
| 3. **Inventory: | 3. **Inventory: | ||
| * **INI формат (пример): | * **INI формат (пример): | ||
| - | | + | |
| - | [webservers] | + | [webservers] |
| - | web1.example.com | + | web1.example.com |
| - | web2.example.com | + | web2.example.com |
| - | | + | |
| - | db01.example.com ansible_host=192.168.1.10 ansible_user=admin ansible_ssh_pass=secret | + | db01.example.com ansible_host=192.168.1.10 ansible_user=admin ansible_ssh_pass=secret |
| - | | + | |
| - | http_port=80 | + | http_port=80 |
| - | ``` | + | ``` |
| * **YAML формат (пример): | * **YAML формат (пример): | ||
| - | | + | |
| - | all: | + | all: |
| - | hosts: | + | hosts: |
| - | web1.example.com: | + | web1.example.com: |
| - | web2.example.com: | + | web2.example.com: |
| - | vars: | + | vars: |
| - | http_port: 80 | + | http_port: 80 |
| - | webservers: | + | webservers: |
| - | hosts: | + | hosts: |
| - | web1.example.com: | + | web1.example.com: |
| - | web2.example.com: | + | web2.example.com: |
| - | databases: | + | databases: |
| - | hosts: | + | hosts: |
| - | db01.example.com: | + | db01.example.com: |
| - | ansible_host: | + | ansible_host: |
| - | ansible_user: | + | ansible_user: |
| - | ansible_ssh_pass: | + | ansible_ssh_pass: |
| - | ``` | + | ``` |
| 4. **Модули (Modules): | 4. **Модули (Modules): | ||
| Строка 68: | Строка 68: | ||
| 7. **Роли (Roles):** Способ организации и повторного использования плейбуков, | 7. **Роли (Roles):** Способ организации и повторного использования плейбуков, | ||
| * Стандартная структура директорий роли: | * Стандартная структура директорий роли: | ||
| - | | + | |
| - | my_role/ | + | my_role/ |
| - | ├── defaults/ | + | ├── defaults/ |
| - | │ | + | │ |
| - | ├── files/ | + | ├── files/ |
| - | ├── handlers/ | + | ├── handlers/ |
| - | │ | + | │ |
| - | ├── meta/ | + | ├── meta/ |
| - | │ | + | │ |
| - | ├── tasks/ | + | ├── tasks/ |
| - | │ | + | │ |
| - | ├── templates/ | + | ├── templates/ |
| - | └── vars/ | + | └── vars/ |
| - | └── main.yml | + | └── main.yml |
| - | ``` | + | ``` |
| + | |||
| + | 8. **Переменные (Variables): | ||
| + | |||
| + | 9. **Факты (Facts):** Информация об управляемых узлах, автоматически собираемая Ansible (например, | ||
| + | |||
| + | 10. **Обработчики (Handlers): | ||
| + | |||
| + | ## Установка Ansible | ||
| + | |||
| + | * **Контрольный узел (пример Debian/ | ||
| + | * **Контрольный узел (пример Red Hat/ | ||
| + | * **Управляемые узлы:** Для взаимодействия через SSH на Linux/Unix должна быть настроена аутентификация по ключам SSH (рекомендуется) или разрешен парольный вход. Для Windows должна быть настроена служба WinRM. | ||
| + | |||
| + | ## Основной рабочий процесс Ansible | ||
| + | |||
| + | 1. **Настройка Inventory: | ||
| + | 2. **Написание плейбуков: | ||
| + | 3. **Выполнение плейбуков: | ||
| + | * Команда для выполнения плейбука: | ||
| + | * Дополнительные опции: | ||
| + | | ||
| + | * `-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: | ||
| + | http_port=80 | ||
| + | ``` | ||
| + | |||
| + | * **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): | 8. **Переменные (Variables): | ||
| Строка 114: | Строка 229: | ||
| * **Установка пакетов: | * **Установка пакетов: | ||
| - | | + | |
| - | - name: Установка пакета nginx | + | - name: Установка пакета nginx |
| - | hosts: webservers | + | hosts: webservers |
| - | become: true | + | become: true |
| - | tasks: | + | tasks: |
| - | - name: Обновление кэша apt | + | - name: Обновление кэша apt |
| - | apt: | + | apt: |
| - | update_cache: | + | update_cache: |
| + | |||
| + | - name: Установка пакета nginx | ||
| + | apt: | ||
| + | name: nginx | ||
| + | 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: |
| - | apt: | + | |
| - | name: nginx | + | |
| - | state: | + | name: nginx |
| - | ``` | + | state: |
| - | * **Запуск и остановка сервисов: | + | |
| - | ```yaml | + | |
| - | - name: Управление сервисом apache2 | + | |
| - | hosts: webservers | + | |
| become: true | become: true | ||
| - | tasks: | ||
| - | - name: Запуск сервиса apache2 | ||
| - | service: | ||
| - | name: apache2 | ||
| - | state: started | ||
| - | - name: Остановка сервиса apache2 | + | Развертывание приложений: |
| - | service: | + | YAML |
| - | name: apache2 | + | |
| - | state: stopped | + | |
| - | ``` | + | |
| - | * **Копирование | + | |
| - | ```yaml | + | |
| - | - name: Копирование файла конфигурации | + | |
| - | hosts: webservers | + | |
| - | | + | |
| - | - 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: Развертывание веб-приложения | - name: Развертывание веб-приложения | ||
| hosts: appservers | hosts: appservers | ||
| Строка 193: | Строка 311: | ||
| state: started | state: started | ||
| become: true | become: true | ||
| - | ``` | ||
| - | ## Преимущества Ansible | + | Преимущества Ansible |
| - | * **Простота и легкость обучения: | + | |
| - | * **Agentless:** Нет необходимости устанавливать агентов на управляемых узлах. | + | Agentless: Нет необходимости устанавливать агентов на управляемых узлах. |
| - | * **Мощность и гибкость: | + | Мощность и гибкость: |
| - | * **Идемпотентность: | + | Идемпотентность: |
| - | * **Оркестрация: | + | Оркестрация: |
| - | * **Большое сообщество и экосистема: | + | Большое сообщество и экосистема: |
| - | * **Безопасность: | + | Безопасность: |
| - | ## Недостатки Ansible | + | Недостатки Ansible |
| - | * **Зависимость от SSH/WinRM:** Требуется настроенная связь с управляемыми узлами. | + | |
| - | * **Производительность для очень больших сред:** В некоторых случаях может быть менее производительным по сравнению с агентскими системами при выполнении большого количества мелких задач. | + | Производительность для очень больших сред: В некоторых случаях может быть менее производительным по сравнению с агентскими системами при выполнении большого количества мелких задач. |
| - | * **Обработка сложных сценариев: | + | Обработка сложных сценариев: |
| - | ## Заключение | + | Заключение |
| Ansible - это мощный и удобный инструмент автоматизации, | Ansible - это мощный и удобный инструмент автоматизации, | ||
| + | Следующие шаги | ||
| - | ## Следующие шаги | + | |
| - | + | Настройка файла inventory для управления целевыми хостами. | |
| - | * Установка Ansible на контрольном узле. | + | Написание простых плейбуков для выполнения базовых задач. |
| - | * Настройка файла inventory для управления целевыми хостами. | + | Изучение основных модулей Ansible (например, |
| - | * Написание простых плейбуков для выполнения базовых задач. | + | Организация автоматизации с помощью ролей. |
| - | * Изучение основных модулей Ansible (например, | + | Исследование возможностей Ansible Galaxy для поиска готовых решений. |
| - | * Организация автоматизации с помощью ролей. | + | |
| - | * Исследование возможностей Ansible Galaxy для поиска готовых решений. | + | |