Highload++2015highlight
Ansible + Docker
© Pavel Alexeev, 2016
1
DevOPS
Docker в работе: взгляд на его использование в
Badoo через год
Слон желтого цвета и его друзья (эксплуатация
Hadoop-стека в федеральном проекте)
2
Disclaimer
Информация и часть слайдов позаимствованы из оригинальных презентаций:
● Docker в работе: взгляд на его использование в Badoo через год / Турецкий
Антон Михайлович
● Слон желтого цвета и его друзья (эксплуатация Hadoop-стека в федеральном
проекте) / Чистяков Александр Анатольевич
3
DOCKER
4
5
Ansible?
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Решение Badoo.
Есть свободные,
например Docker
Swarm
22
23
Docker registry
The Registry is a stateless, highly scalable server side
application that stores and lets you distribute Docker
images.
tightly control where your images are being stored
integrate image storage and distribution tightly into your
in-house development workflow
Git-based
Start your registry:
$ docker run -d -p 5000:5000 --name registry registry:2
Pull (or build) some image from the hub:
$ docker pull ubuntu
Tag the image so that it points to your registry:
$ docker tag ubuntu localhost:5000/myfirstimage
Push it:
$ docker push localhost:5000/myfirstimage
Pull it back:
$ docker pull localhost:5000/myfirstimage
Now stop your registry and remove all data:
$ docker stop registry && docker rm -v registry
Ansible
24
25
26
27
WHAT IS ANSIBLE?
● cloud provisioning
● configuration management
● application deployment
● intra-service orchestration
● Multi-tier deployment
● No agents and no additional custom security infrastructure
● Very simple language (YAML, in the form of Ansible Playbooks)
28
MANAGE YOUR INVENTORY IN SIMPLE TEXT FILES
● By default, used a very simple INI inventory file
● Many services also supported
● Plugins like EC2, Rackspace, OpenStack, and more.
Here's what a plain text inventory file like:
[webservers]
www1.example.com
www2.example.com
[dbservers]
db0.example.com
db1.example.com
29
---
- hosts: webservers
serial: 5 # update 5 machines at a time
roles:
- common
- webapp
- hosts: content_servers
roles:
- common
- content
---
- yum: name={{contact.item}} state=installed
with_items:
- app_server
- acme_software
- service: name=app_server state=running enabled=yes
- template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf
notify:
- restart app server
Playbook looks like
30
Playbook Roles and Include Statements
Variables
Jinja2 filters
Conditionals
Loops
Blocks
Strategies
Best Practices
Multi-tier rollouts rolling updates
Delegate actions to other hosts
Playbook simple but powerful
31

Ansible+docker (highload++2015)

  • 1.
  • 2.
    DevOPS Docker в работе:взгляд на его использование в Badoo через год Слон желтого цвета и его друзья (эксплуатация Hadoop-стека в федеральном проекте) 2
  • 3.
    Disclaimer Информация и частьслайдов позаимствованы из оригинальных презентаций: ● Docker в работе: взгляд на его использование в Badoo через год / Турецкий Антон Михайлович ● Слон желтого цвета и его друзья (эксплуатация Hadoop-стека в федеральном проекте) / Чистяков Александр Анатольевич 3
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
    23 Docker registry The Registryis a stateless, highly scalable server side application that stores and lets you distribute Docker images. tightly control where your images are being stored integrate image storage and distribution tightly into your in-house development workflow Git-based Start your registry: $ docker run -d -p 5000:5000 --name registry registry:2 Pull (or build) some image from the hub: $ docker pull ubuntu Tag the image so that it points to your registry: $ docker tag ubuntu localhost:5000/myfirstimage Push it: $ docker push localhost:5000/myfirstimage Pull it back: $ docker pull localhost:5000/myfirstimage Now stop your registry and remove all data: $ docker stop registry && docker rm -v registry
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
    WHAT IS ANSIBLE? ●cloud provisioning ● configuration management ● application deployment ● intra-service orchestration ● Multi-tier deployment ● No agents and no additional custom security infrastructure ● Very simple language (YAML, in the form of Ansible Playbooks) 28
  • 29.
    MANAGE YOUR INVENTORYIN SIMPLE TEXT FILES ● By default, used a very simple INI inventory file ● Many services also supported ● Plugins like EC2, Rackspace, OpenStack, and more. Here's what a plain text inventory file like: [webservers] www1.example.com www2.example.com [dbservers] db0.example.com db1.example.com 29
  • 30.
    --- - hosts: webservers serial:5 # update 5 machines at a time roles: - common - webapp - hosts: content_servers roles: - common - content --- - yum: name={{contact.item}} state=installed with_items: - app_server - acme_software - service: name=app_server state=running enabled=yes - template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf notify: - restart app server Playbook looks like 30
  • 31.
    Playbook Roles andInclude Statements Variables Jinja2 filters Conditionals Loops Blocks Strategies Best Practices Multi-tier rollouts rolling updates Delegate actions to other hosts Playbook simple but powerful 31

Editor's Notes

  • #3 Лазером по сосулям!
  • #4 Имеется видео ~ 49 минут. Видео 46 минут по запросу. Выложен доступ http://confluence.taskdata.com/pages/viewpage.action?pageId=6816230 2 темы. Доклады не связаны! Второй серьёзно дополнен моими мыслями (ное без фанатизма, т.к. не обо мне сейчас).
  • #6 Vagrant (англ. бродяга) — свободное и открытое программное обеспечение для создания и конфигурирования виртуальной среды разработки[1]. Является обёрткой для программного обеспечения виртуализации, например VirtualBox, и средств управления конфигурациями, такими как Chef, Saltи Puppet. Начиная с версии 1.1 Vagrant больше не привязан к VirtualBox и так же работает с другими средствами виртуализации, например VMware Workstation, а также поддерживает облачные среды, например Amazon EC2[2]. Инструмент написан на Ruby; при этом его можно использовать в проектах, создаваемых на других языках программирования, таких как PHP, Python, Java, C# и JavaScript[3][4]. В версии 1.6 реализована встроенная поддержка для использования контейнерной виртуализации на базе LXC с применением инструментарияDocker вместо полностью виртуализированной операционной системы, что позволяет уменьшить накладные расходы[5]. Плагин vagrant-libvirt добавляет поддержку libvirt в Vagrant[6].
  • #8 qemu, kvm, VirtualBox?? Нет. Легче.
  • #9 Разные инструменты. Стек технологий. Во многом пересекаются.
  • #10 Сервис! Не операционка. Не виртуалка. Не пакеты. Не настройки. Порт, настройки… Unidata требует Elasticsearch 1.7, Kibana - 2.2.
  • #11 Интероперабельность. Миграция. При миграции нет истории. Не нужно обрытных манифестов puppet. Куски запущенного сервера, помойка логов, кешей, настроек, предполагаемого окружения.
  • #12 Capacity planning. Экономия метса, железа, сетевого оборудования.
  • #16 Старый синтаксис? Зато просто! Версионифицированно.
  • #17 Идеологически: один контейнер - одна служба. Маппинг внутрь /dev/log не катит. Держится старый сокет в гостях (не винда!). Запихнули 2 сервиса. Не по феншую - зато работает (сеть).
  • #18 Не отмонтировать на хосте устройство, которое держится кем-то. Требуется рестарт контейнера. В привелигированном режиме можно. Но опасно. Так делать не стоит. Просто отказаться от динамических точек монтирования.
  • #19 Выбор системы, драйвера. Вышли в AUFS, но в mainline не войдёт. Seph. по опыту баду BTRFS очень медленный, но они его поверх LVM! Show, balance - сколько места-то занято?? Ребаланс чтобы высвободить место, нельзя в пик нагрузки ибо IO. Overlay(FS) рекомендуется. Тестируют в баду. С версии 3.18 в ядро вошёл с именем Overlay. OverlayFS + Ext4. В тестовом выпуске ядра Linux 3.18-rc2 появилась поддержка файловой системы OverlayFS, разработанной компанией SUSE в качестве более прогрессивной замены UnionFS и AUFS
  • #20 К слайду: Обновления проверяются периодически, но по наличию создаёттся таса для принятия решения об апдейтах. Много всего также: * docker exec сохраняет процесс (до версии 1.8) бесконечно. Вроде пофиксили. * Если больше одного entry point необходима грабелька. http://skarnet.org/software/s6/
  • #21 Костыль badoo (с использованием Puppet). Можно использовать тот же Jenkins.
  • #24 The Registry is open-source, under the permissiveApache license.