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

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

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

Мой маленькийуютный 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. Dokku2. Flynn

14

Готовы ли они?

15

Это — не альтернативы

1. Только вышли из beta2. Сложные системы3. Есть ограничения buildpack

16

Это — не альтернативы

1. Только вышли из beta2. Сложные системы3. Есть ограничения buildpack

17

Ограничения buildpack

1. Стандартные buildpack ориентированы на типовые проекты2. Нет стандартного решения для:

a. сборки мультистековых проектов

b. установки произвольных пакетов

18

Контейнеризация и Docker

Если вместо buildpack использовать Dockerfile, то мыполучаем неограниченную свободу и единый формат запускаемого приложения.

Требования к контейнерам возьмем из 12factor.net

19

Docker based PaaS

1. Deis2. Kubernetes3. 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. Повторное использование существующих модулей

и playbook5. Конфигурирование роли через переменные заменяет

конфигурационный файл

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/v1beta1kind: Deploymentmetadata:

annotations:deployment.kubernetes.io/revision: "1"

creationTimestamp: 2016-03-24T17:55:28Zgeneration: 3labels:

run: hello-nodename: hello-nodenamespace: defaultresourceVersion: "151017"selfLink:

/apis/extensions/v1beta1/namespaces/default/deployments/hello-node

uid: 981fe302-f1e9-11e5-9a78-42010af00005spec:replicas: 4selector:

matchLabels:run: hello-node

strategy:rollingUpdate:maxSurge: 1maxUnavailable: 1

type: RollingUpdate

template:metadata:creationTimestamp: nulllabels:

run: hello-node

spec:containers:- image: gcr.io/PROJECT_ID/hello-node:v1

imagePullPolicy: IfNotPresentname: hello-nodeports:- containerPort: 8080

protocol: TCPresources: {}terminationMessagePath: /dev/termination-log

dnsPolicy: ClusterFirstrestartPolicy: AlwayssecurityContext: {}terminationGracePeriodSeconds: 30

Пример сложного конфига

- { role: ir4y.docker_app,name: my_project,use_build: true,repository: 'ssh://[email protected]: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://[email protected]: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://[email protected]: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/paasgithub.com/brogency/balancer

[email protected]@ir4y_ix

77