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