Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Мой маленький
уютный PaaS
Илья Беда
bro.agency
Кто я
v 8 лет коммерческого программирования
v 5 лет web разработки
v 3 года работаю в своей компании
v 2 года занимаюсь devops
2
Кто такие bro.agency
Мы — консалтинг компания.
Специализируемся на решении комплексных задач.
3
Кто такие bro.agency
Мы — консалтинг компания.
Специализируемся на решении комплексных задач.
Но иногда и простые сайтики делаем.
4
Проблема
v Консалтинг
v Много проектов
v Возможность быстро развернуть новый проект
v Возможность передать проект клиенту
v Сложный стек
5
Проблема
6
Решение
7
Решение — Heroku
8
Спасибо за внимание?
9
Спасибо за внимание?
На самом деле — нет
10
Есть ряд проблем
11
Есть ряд проблем
1. Клиенты из РФ
a. Проблема пинга
b. Проблема ФЗ N 526
12
Есть ряд проблем
1. Клиенты из РФ
a. Проблема пинга
b. Проблема ФЗ N 526
2. Проблема стоимости
13
Альтернативы Heroku
Вы можете развернуть их на своем собственном сервере
и деплоить проекты с помощью git:
1. Dokku
2. Flynn
14
Готовы ли они?
15
Это — не альтернативы
1. Только вышли из beta
2. Сложные системы
3. Есть ограничения buildpack
16
Это — не альтернативы
1. Только вышли из beta
2. Сложные системы
3. Есть ограничения buildpack
17
Ограничения buildpack
1. Стандартные buildpack ориентированы на типовые проекты
2. Нет стандартного решения для:
a. сборки мультистековых проектов
b. установки произвольных пакетов
18
Контейнеризация и Docker
Если вместо buildpack использовать Dockerfile, то мы
получаем неограниченную свободу и единый формат
запускаемого приложения.
Требования к контейнерам возьмем из 12factor.net
19
Docker based PaaS
1. Deis
2. Kubernetes
3. PanteraS
20
Готово ли оно?
21
Спасибо за внимание?
22
Спасибо за внимание?
И снова нет
23
Цена сложности
24
Цена сложности
25
Цена сложности
26
Цена сложности
27
Цена сложности
28
Цена сложности
29
Цена сложности
30
Цена сложности
31
Нельзя просто так взять
и установить PaaS
32
Что же сделать?
Понять, как оно работает изнутри
33
Как это сделать?
Максимально все упростить и написать свой маленький
уютный PaaS
34
Как это сделать?
35
Определяем MVP
То, что запускает ваши приложения
То, что сообщает о новых запущенных приложениях
То, что маршрутизирует запросы и балансирует нагрузку
36
То, что запускает ваши приложения
37
Docker
38
То, что сообщает о новых запущенных
приложениях
39
Service Discovery
40
То, что маршрутизирует запросы и
балансирует нагрузку
41
Load Balancer
42
MVP
43
Общая схема MVP
44
Итого у нас есть
Мы можем запускать stateless application в ручном режиме
github.com/brogency/balancer
45
Что нам надо
46
Что нам надо
Автоматизированный деплой приложения
Конфигурирование сторонних ресурсов
47
Удобный инструмент деплоя
приложения + автоматизация
48
Удобный инструмент деплоя
приложения + автоматизация
49
Ansible
1. Лучше, чем скрипт на обычном языке программирования
50
Ansible
1. Лучше, чем скрипт на обычном языке программирования
2. Развертывание платформы с нуля
3. Конфигурирование подключаемых ресурсов
51
Ansible
1. Лучше, чем скрипт на обычном языке программирования
2. Развертывание платформы с нуля
3. Конфигурирование подключаемых ресурсов
4. Повторное использование существующих модулей
и playbook
52
Ansible
1. Лучше, чем скрипт на обычном языке программирования
2. Развертывание платформы с нуля
3. Конфигурирование подключаемых ресурсов
4. Повторное использование существующих модулей
и playbook
5. Конфигурирование роли через переменные заменяет
конфигурационный файл
53
Ansible роль для приложения
1. Запуск контейнера с приложением
54
Ansible роль для приложения
1. Запуск контейнера с приложением
2. Клонирование исходников и сборка контейнера
приложения
55
Ansible роль для приложения
1. Запуск контейнера с приложением
2. Клонирование исходников и сборка контейнера
приложения
3. Создание Базы данных
4. Запуск redis для кэшей и очередей
56
Ansible роль для приложения
1. Запуск контейнера с приложением
2. Клонирование исходников и сборка контейнера
приложения
3. Создание Базы данных
4. Запуск redis для кэшей и очередей
5. Запуск демона отложенных задач (sidekiq или celery)
57
Ansible роль для приложения
1. Запуск контейнера с приложением
2. Клонирование исходников и сборка контейнера
приложения
3. Создание Базы данных
4. Запуск redis для кэшей и очередей
5. Запуск демона отложенных задач (sidekiq или celery)
6. Дополнительное конфигурирование load balancer
58
Пример простого конфига
- { role: ir4y.docker_app,
name: 'hello-world',
use_build: true,
repository: 'https://github.com/Brogency/hello-world.git',
server_name: '139.59.131.178',
tags: ['hello-world']
}
59
- { role: ir4y.docker_app,
name: 'hello-world',
use_build: true,
repository: 'https://github.com/Brogency/hello-world.git',
server_name: '139.59.131.178',
tags: ['hello-world']
}
Пример простого конфига
60
Пример конфига для kubernetes
61
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: 2016-03-24T17:55:28Z
generation: 3
labels:
run: hello-node
name: hello-node
namespace: default
resourceVersion: "151017"
selfLink:
/apis/extensions/v1beta1/namespaces/default/deployments/hello
-node
uid: 981fe302-f1e9-11e5-9a78-42010af00005spec:
replicas: 4
selector:
matchLabels:
run: hello-node
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: hello-node
spec:
containers:
- image: gcr.io/PROJECT_ID/hello-node:v1
imagePullPolicy: IfNotPresent
name: hello-node
ports:
- containerPort: 8080
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
dnsPolicy: ClusterFirst
restartPolicy: Always
securityContext: {}
terminationGracePeriodSeconds: 30
Пример сложного конфига
- { role: ir4y.docker_app,
name: my_project,
use_build: true,
repository: 'ssh://git@git.bro.agency:10022/hello/bro.git',
server_name: my_project.bro.agency',
use_redis: true,
use_delay_job_worker: true,
delay_job_command: 'python manage.py celeryd -l info -B',
delay_job_worker_env: {C_FORCE_ROOT: "true"},
tags: [my_project]
}
62
Пример сложного конфига
- { role: ir4y.docker_app,
name: my_project,
use_build: true,
repository: 'ssh://git@git.bro.agency:10022/hello/bro.git',
server_name: my_project.bro.agency',
use_redis: true,
use_delay_job_worker: true,
delay_job_command: 'python manage.py celeryd -l info -B',
delay_job_worker_env: {C_FORCE_ROOT: "true"},
tags: [my_project]
}
63
Пример сложного конфига
- { role: ir4y.docker_app,
name: my_project,
use_build: true,
repository: 'ssh://git@git.bro.agency:10022/hello/bro.git',
server_name: my_project.bro.agency',
use_redis: true,
use_delay_job_worker: true,
delay_job_command: 'python manage.py celeryd -l info -B',
delay_job_worker_env: {C_FORCE_ROOT: "true"},
tags: [my_project]
}
64
Таким образом, мы решили возникшие
проблемы
1. Быстрое и удобное развертывание
2. Простой сетап из одного сервера
3. Знание всех деталей и тонкостей реализации
65
66
67
68
69
70
Полноценный PaaS
github.com/brogency/paas
71
72
Что дальше?
73
Что дальше?
74
Enterprise private cluster
Кластеризация PaaS
Разграничение ресурсов с помощью cgroup
Мониторинг и проверка доступности сервисов
Перемещаемые между серверами тома
75
Спасибо за внимание?
76
Спасибо за внимание?
Теперь — да!
github.com/brogency/paas
github.com/brogency/balancer
ilya@bro.agency
@ir4y_ix
77

More Related Content

Мой маленький уютный PaaS / Илья Беда (bro.agency)