Мой маленький уютный PaaS / Илья Беда (bro.agency)
-
Upload
ontico -
Category
Engineering
-
view
836 -
download
0
Transcript of Мой маленький уютный PaaS / Илья Беда (bro.agency)
Кто я
v 8 лет коммерческого программированияv 5 лет web разработкиv 3 года работаю в своей компанииv 2 года занимаюсь devops
2
Кто такие bro.agency
Мы — консалтинг компания.Специализируемся на решении комплексных задач.Но иногда и простые сайтики делаем.
4
Проблема
v Консалтингv Много проектовv Возможность быстро развернуть новый проектv Возможность передать проект клиентуv Сложный стек
5
Альтернативы Heroku
Вы можете развернуть их на своем собственном сервереи деплоить проекты с помощью git:1. Dokku2. Flynn
14
Ограничения buildpack
1. Стандартные buildpack ориентированы на типовые проекты2. Нет стандартного решения для:
a. сборки мультистековых проектов
b. установки произвольных пакетов
18
Контейнеризация и Docker
Если вместо buildpack использовать Dockerfile, то мыполучаем неограниченную свободу и единый формат запускаемого приложения.
Требования к контейнерам возьмем из 12factor.net
19
Определяем MVP
То, что запускает ваши приложенияТо, что сообщает о новых запущенных приложенияхТо, что маршрутизирует запросы и балансирует нагрузку
36
Итого у нас есть
Мы можем запускать stateless application в ручном режиме github.com/brogency/balancer
45
Ansible
1. Лучше, чем скрипт на обычном языке программирования2. Развертывание платформы с нуля3. Конфигурирование подключаемых ресурсов
51
Ansible
1. Лучше, чем скрипт на обычном языке программирования2. Развертывание платформы с нуля3. Конфигурирование подключаемых ресурсов4. Повторное использованиесуществующих модулей
и playbook
52
Ansible
1. Лучше, чем скрипт на обычном языке программирования2. Развертывание платформы с нуля3. Конфигурирование подключаемых ресурсов4. Повторное использование существующих модулей
и playbook5. Конфигурирование роли через переменные заменяет
конфигурационный файл
53
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
Enterprise private cluster
Кластеризация PaaSРазграничение ресурсов с помощью cgroupМониторинг и проверка доступности сервисовПеремещаемые между серверами тома
75
Спасибо за внимание?
Теперь — да!
github.com/brogency/paasgithub.com/brogency/balancer
[email protected]@ir4y_ix
77