Konstantin Nazarov


Title: Building a PaaS with Docker, Consul and Python

Description:

I'm currently single-handedly building a Database-As-A-Service platform. And the problem of where and how to run database instances has been successfully solved in favor of Docker. But there still remain 2 problems: how to link containers on different hosts across the network and how to orchestrate a large pool of running instances.

You may find lots of different IaaS offerings and schedulers like Mesos and Kubernetes on the market, but all of them have a steep learning curve. Plus they don't handle stateful and non-SOA services very well.

In this talk I'll be walking you over how one can build a simple PaaS based on Docker, consul and a custom orchestration service in Python. My experience in building such system shows that it can be reproduced by the effort of one developer.

A list of topics I will cover:
- Consul as a reliable distributed storage
- Connecting containers between hosts without an overlay network
- Allocating IP addresses and maintaining their pool in Consul KV
- Correctly registering services and health checks
- How to approach writing basic orchestrator based on gevent + writing trivial admin UI for it
- Adding failover, scaling and service reallocation to the orchestrator
- Delayed tasks (backup, analytics, etc...)
- Monitoring the system (Consul + Prometheus)

Almost all code of the system, including ansible playbooks, is available on GitHub.

Тема: Как сделать PaaS при помощи Docker, Consul и обвязки на Python

Описание:

Сейчас я в одиночку работаю над созданием Database-As-A-Service решения. И вопрос "как и где запускать" успешно решился в пользу Docker. Проблемы возникли в двух местах: как соединять контейнеры по сети для репликации данных, и как автоматизированно управлять большим парком запущенных инстансов.

На рынке есть много решений для организации IaaS, и всяких шедулеров вроде Mesos и Kubernetes. Но у всех у них довольно крутой learning curve. К тому же они не очень хорошо работают с сервисами, сдизайненными не по SOA.

В своем докладе я расскажу, как можно сделать (и как я в итоге сделал) для своей компании небольшой PaaS на основе Docker, Consul и обвязки на Python в качестве оркестратора. Это вполне воспроизводимо силами одного человека.

Вот о чем мы поговорим:
- Consul как надежное распределенное хранилище
- Делаем связь контейнеров между хостами без overlay сети
- Выделение IP адресов и организация их пула в Consul KV
- Как правильно регистрировать сервисы и health check-и
- Делаем оркестратор на gevent + простую админку к нему на Flask
- Делаем failover, масштабирование и переезд сервисов
- Отложенные задания (бэкап, аналитика и т.д.)
- И немного про мониторинг всего этого хозяйства (Consul + Prometheus)

Почти весь, включая ansible скрипты, доступен на GitHub.

Speaker

Konstantin Nazarov

Konstantin Nazarov

@racktear

Константин Назаров - инфраструктурный инженер в команде Tarantool. В прошлом - системный программист и любитель Common Lisp. Минималист и приверженец итеративного подхода ко всему.

Konstantin Nazarov is an infrastructure engineer in Tarantool team. In the past was a system programmer and a fan of Common Lisp. Minimalist and adept of iterative approach to everything.