SlideShare a Scribd company logo
10
Most read
12
Most read
13
Most read
Применяем Ansible
Александр Светкин
alex.svetkin@gmail.com
Revision 2017-04-27
Что такое Ansible?
● Ansible — система управления конфигурацией
● Применима для ОС Linux/Unix и Windows
● Бесплатная и open source, лицензия GNU GPL
● “Консольно-ориентированная” (command-line interface)
● Модульная архитектура
● Поддержка сторонних модулей (Ansible Galaxy)
● Коммерческий вариант — Ansible Tower (WebUI, Dashboard etc.)
● Разработчик — Ansible Inc./Red Hat Inc.
2
Как работает Ansible
3
Ansible и Puppet — сравнение
Ansible
Императивный стиль (задачи playbooks)
Push по команде контроллера
Централизованная
Центр: машина инженера (контроллер)
Язык: YAML
В основе: SSH и Python
Puppet
Декларативный стиль (описание в manifests)
Pull периодически (агенты)
Централизованная
Центр: выделенный сервер
Язык: Puppet DSL
В основе: HTTPS и Ruby
4
На контроллере:
● Установка Ansible: http://docs.ansible.com/ansible/intro_installation.html
● Текстовый редактор и командная строка :)
На серверах:
● установка Ansible не требуется
● должен быть установлен python2.7 (для Ubuntu 16: apt-get install
python-minimal)
● должен быть настроен доступ по SSH с контроллера
Установка
5
provision.sh
#!/bin/bash
for host in 192.168.56.211 192.168.56.212; do
ssh root@$host "apt-get update && -y install ntp nginx"
scp nginx_site.conf root@$host:/etc/nginx/sites-enabled/
ssh root@$host "service nginx reload"
rsync …
end
6
От shell scripting к Ansible
● Начнем с создания файла inventory (список хостов):
[webservers]
web1 ansible_host=192.168.56.201
web2 ansible_host=192.168.56.202
● Выполним ad-hoc задачу:
> ansible -i inventory -u root -m shell -a "apt-get install -y ntp" webservers
● Далее: организуем задачи в playbooks
7
Playbooks
● Последовательности команд организуются в playbooks (пьесы)
● Для описания используется нотация YAML
● Playbook содержит не только задачи (tasks), но также может содержать:
○ hosts — шаблон серверов, к которым применяется playbooks
○ vars — переменные
○ handlers — обработчики
○ и др. директивы
● Задачи в playbook выполняются строго последовательно
8
playbook.yml
- hosts: all
user: root
tasks:
- apt: update_cache=yes
- apt: name=ntp
- apt: name=nginx
- apt: name=git
- copy:
src: files/nginx_site.conf
dest: /etc/nginx/sites-enabled/
- file: path=/var/www/ansible-site state=directory
- git:
repo: https://github.com/whisk/ansible-tutorial
dest: /root/ansible-tutorial
depth: 1
- shell: rsync -ru --del /root/ansible-tutorial/www/ /var/www/ansible/
- service: name=nginx state=restarted enabled=yes
9
Устанавливаем пакеты
Клонируем git repo
Копируем конфиг
Advanced Playbooks
● Циклы (with_items, with_nested, with_file, with_fileglob etc.)
● Тэги
● Блоки (block)
● Includes
● Условия (when)
● Handlers
10
playbook-advanced.yml
- hosts: all
user: root
tasks:
- name: install packages update_cache=yes cache_valid_time=86400
apt: name={{item}}
with_items: [ntp, nginx, git]
tags: packages
- copy:
src: files/nginx_site.conf
dest: /etc/nginx/sites-enabled/
notify: restart nginx
- include: deploy-site.yml
tags: deploy
handlers:
- name: restart nginx
service: name=nginx state=restarted
11
Организуем цикл по with_items
Отдельный playbook для code reuse
nginx нужно перезапустить
Обработчик сообщения
Шаблоны
● Используется шаблонизатор Jinja2: http://jinja.pocoo.org/
● Разрабатывался как шаблонизатор для веб-страниц, поэтому
возможностей для создания файлов конфигурации более чем достаточно
● Ansible добавляет еще фильтры — выражения типа:
{{ var | default('5') }} {{ data | to_json }} {{ str | regex_replace('^a', 'b') }}
● Преобразование шаблонов в документы происходит на контроллере
● Большинство фильтров из Jinja2 доступно в playbooks!
12
nginx.conf
worker_processes {{cpus}};
....
{% for item in sites %}
server {
listen {{http_port}};
server_name
{{item.name}};
root {{item.dir}};
...
}
{% endfor %}
13
[webservers]
web1 ansible_host=192.168.56.211 cpus=4
web2 ansible_host=192.168.56.212 cpus=8
[all:vars]
http_port=8080
inventory
playbook.yml
- hosts: all
vars:
sites:
- name: foo.com
dir: /var/www/foo_com
- name: bar.com
dir: /var/www/bar_com
- name: foobar.com
dir: /var/www/foobar_com
tasks:
- template:
src: templates/nginx.conf
dest: /etc/nginx/
- file: name={{item.dir}} state=directory
with_items: "{{sites}}"
14
Переменные, общие для всех серверов
Переменные и факты
● Переменные: определены вами на контроллере
● Факты: определены узлами (автоматически или вручную)
● Переменные/факты можно использовать в playbooks и шаблонах
● Более 20 (!) мест определения переменных/фактов
● Неопределенная переменная — ошибка выполнения (к счастью)
● Типичные места задания: inventory, playbooks, роли, параметры CLI
15
Пример: Multistage
● Три окружения: production, staging и dev
● Создаем отдельный inventory для каждого окружения
○ Переменные окружения задаются в inventory
○ Сервера также перечисляются в inventory
● Остальные переменные задаем в playbook
● Все файлы, кроме файлов inventory, общие для всех окружений
Такой подход позволяет получать идентичную конфигурацию на разных
группах серверов, при этом оставляя возможность вносить необходимые 16
Роли
● Удобная возможность группировать сервера по назначению/функциям
● Один сервер может иметь несколько ролей и такой подход позволяет:
○ Не порождать случайных кросс-зависимостей
○ Легко "расщеплять" или комбинировать сервер при
масштабировании
● Всем серверам может быть прописана "базовая" роль, которая реализует
ваши любимые настройки
● Роли легче повторно использовать (в других проектах и т.п.)
17
Некоторые практики
● Пишите все playbooks так, что их можно применить много раз подряд, и
это не приведет к ошибкам/побочным эффектам (идемпотентность)
● Используйте -C (--check) и -D (--diff) для проверки вносимых
изменений в файлы без реального применения этих изменений:
> ansible-playbook -C -D playbook.yml
● Используйте фильтры по тэгам и именам для выполнения конкретных
задач на конкретных серверах:
> ansible-playbook -t packages -l web1 playbook.yml
● Старайтесь не усложнять иерархию переменных без необходимости
● Используйте систему контроля версий для хранения конфигурации
18
Сильные стороны Ansible
● Простая "императивная" идеология
● Низкий порог входа для автоматизации массовых действий
● Provisioning (ввод в работу) серверов
● Выкатка кода
○ особенно если ваша "экосистема" не имеет готовых инструментов
или они относительно тяжелые
○ встроенная поддержка rolling updates
● Continuous Integration
○ легко вызвать ansible в git hook
19
Материалы по теме
http://docs.ansible.com/ansible/
Отличная документация, написанная с большой любовью к продукту
https://galaxy.ansible.com/
Галактика модулей
https://github.com/whisk/ansible-tutorial
Материалы этой презентации
20
Спасибо за внимание!

More Related Content

PDF
Ansible - Introduction
PPTX
Introduction to Ansible
PDF
Ansible
PPTX
Ansible presentation
PPT
RedHat Linux
 
PDF
Ansible
PPTX
Ansible presentation
PPTX
Automating with Ansible
Ansible - Introduction
Introduction to Ansible
Ansible
Ansible presentation
RedHat Linux
 
Ansible
Ansible presentation
Automating with Ansible

What's hot (20)

ODP
Ansible get started
PDF
SPA Editor - Adobe Experience Manager Sites
ODP
Introduction to Ansible
PDF
Ansible Introduction
PPTX
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
PDF
Automation with ansible
PPTX
Ansible Tutorial For Beginners | What Is Ansible And How It Works? | Ansible ...
PPTX
Devops & Configuration management tools
PDF
Ansible Introduction
PDF
Ansible Playbook
PDF
Java Collection Interview Questions [Updated]
PDF
Ansible
PPTX
java 8 new features
PPTX
Introduccion a Ansible
PPTX
Nagios
PPTX
Introduction to ansible
PDF
Ansible
PPTX
Sling Models Overview
PPTX
Terraform
PDF
Top 50 Ansible Interview Questions And Answers in 2023.pdf
Ansible get started
SPA Editor - Adobe Experience Manager Sites
Introduction to Ansible
Ansible Introduction
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
Automation with ansible
Ansible Tutorial For Beginners | What Is Ansible And How It Works? | Ansible ...
Devops & Configuration management tools
Ansible Introduction
Ansible Playbook
Java Collection Interview Questions [Updated]
Ansible
java 8 new features
Introduccion a Ansible
Nagios
Introduction to ansible
Ansible
Sling Models Overview
Terraform
Top 50 Ansible Interview Questions And Answers in 2023.pdf
Ad

Similar to Применяем Ansible (20)

PDF
Rpm5
PDF
От Make к Ansible
PDF
My talk on Salt and Ansible from DevConf 2014
PPTX
Управление облачной инфраструктурой
PDF
RHEL 7. Контейнеры и Docker
PDF
Зачем программистам Ansible
PDF
Application deployment & configuration management
PDF
Streaming replication in practice
PDF
Dev collaboration
PPT
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
PPT
Node.js (RichClient)
PDF
Истинный DevOps. Секрет 42.
PDF
Machine learning c использованием нейронных сетей, Дмитрий Лапин
PDF
Sergey Cherebedov. Deployment of the environment for Drupal using Ansible.
PDF
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
PPTX
Vagrant puppet
PPT
Кратко о Linux
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PPTX
Как приручить проектное окружение. PHP UG Minsk, июнь'2014
PDF
HBase on Dev{Highload}
Rpm5
От Make к Ansible
My talk on Salt and Ansible from DevConf 2014
Управление облачной инфраструктурой
RHEL 7. Контейнеры и Docker
Зачем программистам Ansible
Application deployment & configuration management
Streaming replication in practice
Dev collaboration
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Node.js (RichClient)
Истинный DevOps. Секрет 42.
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Sergey Cherebedov. Deployment of the environment for Drupal using Ansible.
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Vagrant puppet
Кратко о Linux
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Как приручить проектное окружение. PHP UG Minsk, июнь'2014
HBase on Dev{Highload}
Ad

Применяем Ansible

  • 2. Что такое Ansible? ● Ansible — система управления конфигурацией ● Применима для ОС Linux/Unix и Windows ● Бесплатная и open source, лицензия GNU GPL ● “Консольно-ориентированная” (command-line interface) ● Модульная архитектура ● Поддержка сторонних модулей (Ansible Galaxy) ● Коммерческий вариант — Ansible Tower (WebUI, Dashboard etc.) ● Разработчик — Ansible Inc./Red Hat Inc. 2
  • 4. Ansible и Puppet — сравнение Ansible Императивный стиль (задачи playbooks) Push по команде контроллера Централизованная Центр: машина инженера (контроллер) Язык: YAML В основе: SSH и Python Puppet Декларативный стиль (описание в manifests) Pull периодически (агенты) Централизованная Центр: выделенный сервер Язык: Puppet DSL В основе: HTTPS и Ruby 4
  • 5. На контроллере: ● Установка Ansible: http://docs.ansible.com/ansible/intro_installation.html ● Текстовый редактор и командная строка :) На серверах: ● установка Ansible не требуется ● должен быть установлен python2.7 (для Ubuntu 16: apt-get install python-minimal) ● должен быть настроен доступ по SSH с контроллера Установка 5
  • 6. provision.sh #!/bin/bash for host in 192.168.56.211 192.168.56.212; do ssh root@$host "apt-get update && -y install ntp nginx" scp nginx_site.conf root@$host:/etc/nginx/sites-enabled/ ssh root@$host "service nginx reload" rsync … end 6
  • 7. От shell scripting к Ansible ● Начнем с создания файла inventory (список хостов): [webservers] web1 ansible_host=192.168.56.201 web2 ansible_host=192.168.56.202 ● Выполним ad-hoc задачу: > ansible -i inventory -u root -m shell -a "apt-get install -y ntp" webservers ● Далее: организуем задачи в playbooks 7
  • 8. Playbooks ● Последовательности команд организуются в playbooks (пьесы) ● Для описания используется нотация YAML ● Playbook содержит не только задачи (tasks), но также может содержать: ○ hosts — шаблон серверов, к которым применяется playbooks ○ vars — переменные ○ handlers — обработчики ○ и др. директивы ● Задачи в playbook выполняются строго последовательно 8
  • 9. playbook.yml - hosts: all user: root tasks: - apt: update_cache=yes - apt: name=ntp - apt: name=nginx - apt: name=git - copy: src: files/nginx_site.conf dest: /etc/nginx/sites-enabled/ - file: path=/var/www/ansible-site state=directory - git: repo: https://github.com/whisk/ansible-tutorial dest: /root/ansible-tutorial depth: 1 - shell: rsync -ru --del /root/ansible-tutorial/www/ /var/www/ansible/ - service: name=nginx state=restarted enabled=yes 9 Устанавливаем пакеты Клонируем git repo Копируем конфиг
  • 10. Advanced Playbooks ● Циклы (with_items, with_nested, with_file, with_fileglob etc.) ● Тэги ● Блоки (block) ● Includes ● Условия (when) ● Handlers 10
  • 11. playbook-advanced.yml - hosts: all user: root tasks: - name: install packages update_cache=yes cache_valid_time=86400 apt: name={{item}} with_items: [ntp, nginx, git] tags: packages - copy: src: files/nginx_site.conf dest: /etc/nginx/sites-enabled/ notify: restart nginx - include: deploy-site.yml tags: deploy handlers: - name: restart nginx service: name=nginx state=restarted 11 Организуем цикл по with_items Отдельный playbook для code reuse nginx нужно перезапустить Обработчик сообщения
  • 12. Шаблоны ● Используется шаблонизатор Jinja2: http://jinja.pocoo.org/ ● Разрабатывался как шаблонизатор для веб-страниц, поэтому возможностей для создания файлов конфигурации более чем достаточно ● Ansible добавляет еще фильтры — выражения типа: {{ var | default('5') }} {{ data | to_json }} {{ str | regex_replace('^a', 'b') }} ● Преобразование шаблонов в документы происходит на контроллере ● Большинство фильтров из Jinja2 доступно в playbooks! 12
  • 13. nginx.conf worker_processes {{cpus}}; .... {% for item in sites %} server { listen {{http_port}}; server_name {{item.name}}; root {{item.dir}}; ... } {% endfor %} 13 [webservers] web1 ansible_host=192.168.56.211 cpus=4 web2 ansible_host=192.168.56.212 cpus=8 [all:vars] http_port=8080 inventory
  • 14. playbook.yml - hosts: all vars: sites: - name: foo.com dir: /var/www/foo_com - name: bar.com dir: /var/www/bar_com - name: foobar.com dir: /var/www/foobar_com tasks: - template: src: templates/nginx.conf dest: /etc/nginx/ - file: name={{item.dir}} state=directory with_items: "{{sites}}" 14 Переменные, общие для всех серверов
  • 15. Переменные и факты ● Переменные: определены вами на контроллере ● Факты: определены узлами (автоматически или вручную) ● Переменные/факты можно использовать в playbooks и шаблонах ● Более 20 (!) мест определения переменных/фактов ● Неопределенная переменная — ошибка выполнения (к счастью) ● Типичные места задания: inventory, playbooks, роли, параметры CLI 15
  • 16. Пример: Multistage ● Три окружения: production, staging и dev ● Создаем отдельный inventory для каждого окружения ○ Переменные окружения задаются в inventory ○ Сервера также перечисляются в inventory ● Остальные переменные задаем в playbook ● Все файлы, кроме файлов inventory, общие для всех окружений Такой подход позволяет получать идентичную конфигурацию на разных группах серверов, при этом оставляя возможность вносить необходимые 16
  • 17. Роли ● Удобная возможность группировать сервера по назначению/функциям ● Один сервер может иметь несколько ролей и такой подход позволяет: ○ Не порождать случайных кросс-зависимостей ○ Легко "расщеплять" или комбинировать сервер при масштабировании ● Всем серверам может быть прописана "базовая" роль, которая реализует ваши любимые настройки ● Роли легче повторно использовать (в других проектах и т.п.) 17
  • 18. Некоторые практики ● Пишите все playbooks так, что их можно применить много раз подряд, и это не приведет к ошибкам/побочным эффектам (идемпотентность) ● Используйте -C (--check) и -D (--diff) для проверки вносимых изменений в файлы без реального применения этих изменений: > ansible-playbook -C -D playbook.yml ● Используйте фильтры по тэгам и именам для выполнения конкретных задач на конкретных серверах: > ansible-playbook -t packages -l web1 playbook.yml ● Старайтесь не усложнять иерархию переменных без необходимости ● Используйте систему контроля версий для хранения конфигурации 18
  • 19. Сильные стороны Ansible ● Простая "императивная" идеология ● Низкий порог входа для автоматизации массовых действий ● Provisioning (ввод в работу) серверов ● Выкатка кода ○ особенно если ваша "экосистема" не имеет готовых инструментов или они относительно тяжелые ○ встроенная поддержка rolling updates ● Continuous Integration ○ легко вызвать ansible в git hook 19
  • 20. Материалы по теме http://docs.ansible.com/ansible/ Отличная документация, написанная с большой любовью к продукту https://galaxy.ansible.com/ Галактика модулей https://github.com/whisk/ansible-tutorial Материалы этой презентации 20