Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

915 views

Published on

Раньше PaaS системы казались чем-то сложным и недосягаемым. И немногие могли попытаться реализовать такую систему самостоятельно. Но стремительное развитие технологий снизило порог входа в мир PaaS. Появилось множество готовых продуктов. И более того, вы сами можете сделать свой PaaS.

В своём докладе я поделюсь опытом проектирования и создания PaaS системы на базе docker, registrator, etcd, confd и ansible. Расскажу, почему я решил сделать его самостоятельно, а не взять готовый, поделюсь опытом реального использования этого продукта в production.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Мой маленький уютный PaaS Илья Беда bro.agency
  2. 2. Кто я v 8 лет коммерческого программирования v 5 лет web разработки v 3 года работаю в своей компании v 2 года занимаюсь devops 2
  3. 3. Кто такие bro.agency Мы — консалтинг компания. Специализируемся на решении комплексных задач. 3
  4. 4. Кто такие bro.agency Мы — консалтинг компания. Специализируемся на решении комплексных задач. Но иногда и простые сайтики делаем. 4
  5. 5. Проблема v Консалтинг v Много проектов v Возможность быстро развернуть новый проект v Возможность передать проект клиенту v Сложный стек 5
  6. 6. Проблема 6
  7. 7. Решение 7
  8. 8. Решение — Heroku 8
  9. 9. Спасибо за внимание? 9
  10. 10. Спасибо за внимание? На самом деле — нет 10
  11. 11. Есть ряд проблем 11
  12. 12. Есть ряд проблем 1. Клиенты из РФ a. Проблема пинга b. Проблема ФЗ N 526 12
  13. 13. Есть ряд проблем 1. Клиенты из РФ a. Проблема пинга b. Проблема ФЗ N 526 2. Проблема стоимости 13
  14. 14. Альтернативы Heroku Вы можете развернуть их на своем собственном сервере и деплоить проекты с помощью git: 1. Dokku 2. Flynn 14
  15. 15. Готовы ли они? 15
  16. 16. Это — не альтернативы 1. Только вышли из beta 2. Сложные системы 3. Есть ограничения buildpack 16
  17. 17. Это — не альтернативы 1. Только вышли из beta 2. Сложные системы 3. Есть ограничения buildpack 17
  18. 18. Ограничения buildpack 1. Стандартные buildpack ориентированы на типовые проекты 2. Нет стандартного решения для: a. сборки мультистековых проектов b. установки произвольных пакетов 18
  19. 19. Контейнеризация и Docker Если вместо buildpack использовать Dockerfile, то мы получаем неограниченную свободу и единый формат запускаемого приложения. Требования к контейнерам возьмем из 12factor.net 19
  20. 20. Docker based PaaS 1. Deis 2. Kubernetes 3. PanteraS 20
  21. 21. Готово ли оно? 21
  22. 22. Спасибо за внимание? 22
  23. 23. Спасибо за внимание? И снова нет 23
  24. 24. Цена сложности 24
  25. 25. Цена сложности 25
  26. 26. Цена сложности 26
  27. 27. Цена сложности 27
  28. 28. Цена сложности 28
  29. 29. Цена сложности 29
  30. 30. Цена сложности 30
  31. 31. Цена сложности 31
  32. 32. Нельзя просто так взять и установить PaaS 32
  33. 33. Что же сделать? Понять, как оно работает изнутри 33
  34. 34. Как это сделать? Максимально все упростить и написать свой маленький уютный PaaS 34
  35. 35. Как это сделать? 35
  36. 36. Определяем MVP То, что запускает ваши приложения То, что сообщает о новых запущенных приложениях То, что маршрутизирует запросы и балансирует нагрузку 36
  37. 37. То, что запускает ваши приложения 37
  38. 38. Docker 38
  39. 39. То, что сообщает о новых запущенных приложениях 39
  40. 40. Service Discovery 40
  41. 41. То, что маршрутизирует запросы и балансирует нагрузку 41
  42. 42. Load Balancer 42
  43. 43. MVP 43
  44. 44. Общая схема MVP 44
  45. 45. Итого у нас есть Мы можем запускать stateless application в ручном режиме github.com/brogency/balancer 45
  46. 46. Что нам надо 46
  47. 47. Что нам надо Автоматизированный деплой приложения Конфигурирование сторонних ресурсов 47
  48. 48. Удобный инструмент деплоя приложения + автоматизация 48
  49. 49. Удобный инструмент деплоя приложения + автоматизация 49
  50. 50. Ansible 1. Лучше, чем скрипт на обычном языке программирования 50
  51. 51. Ansible 1. Лучше, чем скрипт на обычном языке программирования 2. Развертывание платформы с нуля 3. Конфигурирование подключаемых ресурсов 51
  52. 52. Ansible 1. Лучше, чем скрипт на обычном языке программирования 2. Развертывание платформы с нуля 3. Конфигурирование подключаемых ресурсов 4. Повторное использование существующих модулей и playbook 52
  53. 53. Ansible 1. Лучше, чем скрипт на обычном языке программирования 2. Развертывание платформы с нуля 3. Конфигурирование подключаемых ресурсов 4. Повторное использование существующих модулей и playbook 5. Конфигурирование роли через переменные заменяет конфигурационный файл 53
  54. 54. Ansible роль для приложения 1. Запуск контейнера с приложением 54
  55. 55. Ansible роль для приложения 1. Запуск контейнера с приложением 2. Клонирование исходников и сборка контейнера приложения 55
  56. 56. Ansible роль для приложения 1. Запуск контейнера с приложением 2. Клонирование исходников и сборка контейнера приложения 3. Создание Базы данных 4. Запуск redis для кэшей и очередей 56
  57. 57. Ansible роль для приложения 1. Запуск контейнера с приложением 2. Клонирование исходников и сборка контейнера приложения 3. Создание Базы данных 4. Запуск redis для кэшей и очередей 5. Запуск демона отложенных задач (sidekiq или celery) 57
  58. 58. Ansible роль для приложения 1. Запуск контейнера с приложением 2. Клонирование исходников и сборка контейнера приложения 3. Создание Базы данных 4. Запуск redis для кэшей и очередей 5. Запуск демона отложенных задач (sidekiq или celery) 6. Дополнительное конфигурирование load balancer 58
  59. 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'] } 59
  60. 60. - { 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
  61. 61. Пример конфига для 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
  62. 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] } 62
  63. 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] } 63
  64. 64. Пример сложного конфига - { 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
  65. 65. Таким образом, мы решили возникшие проблемы 1. Быстрое и удобное развертывание 2. Простой сетап из одного сервера 3. Знание всех деталей и тонкостей реализации 65
  66. 66. 66
  67. 67. 67
  68. 68. 68
  69. 69. 69
  70. 70. 70
  71. 71. Полноценный PaaS github.com/brogency/paas 71
  72. 72. 72
  73. 73. Что дальше? 73
  74. 74. Что дальше? 74
  75. 75. Enterprise private cluster Кластеризация PaaS Разграничение ресурсов с помощью cgroup Мониторинг и проверка доступности сервисов Перемещаемые между серверами тома 75
  76. 76. Спасибо за внимание? 76
  77. 77. Спасибо за внимание? Теперь — да! github.com/brogency/paas github.com/brogency/balancer ilya@bro.agency @ir4y_ix 77

×