Transcript
Page 1: константин назаров, Diy paas with docker, consul and python

Делаем PaaS при помощи Docker, Consul и

PythonКонстантин Назаров

Page 2: константин назаров, Diy paas with docker, consul and python

Зачем?

Знайте, что такой способ есть

Запомните паттерн

Page 3: константин назаров, Diy paas with docker, consul and python

Что готовим?

Предположим, у вас маленькая команда

Вам нужно масштабировать сервис по запросу

Что будете делать?

Page 4: константин назаров, Diy paas with docker, consul and python

Почему не решение X?

Высокий входной порог

Стоимость поддержки

TCO - ?

Page 5: константин назаров, Diy paas with docker, consul and python
Page 6: константин назаров, Diy paas with docker, consul and python

Ингредиенты

Python

Docker

Consul

Page 7: константин назаров, Diy paas with docker, consul and python

Что может Docker APIЗапускать контейнеры и настраивать сеть

Запускать команды в контейнерах (exec)

Загружать и скачивать файлы

Page 8: константин назаров, Diy paas with docker, consul and python

Что может Docker API

Дохнуть

Page 9: константин назаров, Diy paas with docker, consul and python

Что может Consul

Хранить пары ключ-значение

Хранить информацию о сервисах

Проверять "здоровье" сервисов

Распространять события

Поддерживает Docker API

Page 10: константин назаров, Diy paas with docker, consul and python

Что может Consul

Поддерживает Docker API

Page 11: константин назаров, Diy paas with docker, consul and python
Page 12: константин назаров, Diy paas with docker, consul and python

Вариант 1: CLI

Page 13: константин назаров, Diy paas with docker, consul and python

$ mypaas run myservice --args fd10124f

Page 14: константин назаров, Diy paas with docker, consul and python

$ mypaas run myservice --args fd10124f

$ mypaas ls > fd10124f myservice 10.0.0.1:8080

Page 15: константин назаров, Diy paas with docker, consul and python

$ mypaas run myservice --args fd10124f

$ mypaas ls > fd10124f myservice 10.0.0.1:8080

$ mypaas rm fd10124f

Page 16: константин назаров, Diy paas with docker, consul and python

Дизайн

Следуем соглашениям Docker CLI

Храним все состояние в Consul KV

Page 17: константин назаров, Diy paas with docker, consul and python

Подготовка

Ставим Consul на все ноды

Открываем Docker API вовне по TCP

Регистрируем Docker как сервис

Page 18: константин назаров, Diy paas with docker, consul and python
Page 19: константин назаров, Diy paas with docker, consul and python

Как это работаетПолучаем список "серверов"

Спрашиваем у Consul список сервисов

Решаем, где запустить новый

Запускаем сервис через Docker API

Через Docker Exec донастраиваем

Регистрируем сервис в Consul

Page 20: константин назаров, Diy paas with docker, consul and python
Page 21: константин назаров, Diy paas with docker, consul and python

Немного о сетиНет прямой связи между хостами

Есть Overlay, но он глючный

Page 22: константин назаров, Diy paas with docker, consul and python
Page 23: константин назаров, Diy paas with docker, consul and python

Вариант 2: демон

Page 24: константин назаров, Diy paas with docker, consul and python

Дизайн

Все, что делал CLI

+ Принимаем команды по HTTP

+ Мониторим запущенные сервисы

Page 25: константин назаров, Diy paas with docker, consul and python

Инструменты

gevent

flask

Page 26: константин назаров, Diy paas with docker, consul and python
Page 27: константин назаров, Diy paas with docker, consul and python

Важные замечания

Не "раздувайте" демон на несколько сервисов

Храните состояние только в Consul

Page 28: константин назаров, Diy paas with docker, consul and python

Константин Назаров[email protected]

@racktear

bit.ly/paas-bom