HighLoad++ 2017
Зал «Пекин+Шанхай», 7 ноября, 14:00
Тезисы:
http://www.highload.ru/2017/abstracts/3073.html
Весь этот год мы в компании «Флант» активно переводили на Kubernetes проекты заказчиков, сильно различающихся как по масштабам, так и по технологиям. На данный момент (сентябрь 2017) у нас в Kubernetes (в production) функционируют 13 проектов, в состав которых входят более 130 различных приложений, написанных на 8 языках программирования: .NET, Erlang, Go, Java, Node.js, PHP, Python и Ruby. В этих проектах задействовано множество инфраструктурных компонентов, таких как Cassandra, Ceph, Firebird, Memcached, MongoDB, MySQL, NATS.io, NGINX, PostgreSQL, RabbitMQ, Redis, RethinkDB, Sphinx, SQLite и других. Мы поделимся обширным опытом, полученным в результате выстраивания CI/CD для таких приложений.
...
2. Лучшие практики
Continuous Delivery
с Docker
RootConf 2016
Собираем Docker-
образы
быстро и удобно
Highload 2016
Наш опыт
с Kubernetes
в небольших проектах
RootConf 2017
Лучшие практики
CI/CD с Kubernetes
и GitLab
Highload 2017
ВЫ
ЗДЕСЬ
youtube.com/c/flant
5. проект
в kubernetes
приложений уже
в production 21
до конца
года+4
ждем
ваш проект+?
120
готово, скоро в
production+19
в работе+20
до конца года+22
приложение!=181
Опыт
по состоянию на 4 ноября 2017
6. Язык
100 Node.js
47 PHP
18 Ruby
10 Python
10 JavaScript
4 Go
4 C#
2 Scala
2 Elixir
1 Java
по состоянию на 4 ноября 2017
7. Язык
100 Node.js
47 PHP
18 Ruby
10 Python
10 JavaScript
4 Go
4 C#
2 Scala
2 Elixir
1 Java
Фреймворк
17 Yii
12 Rails
7 Django
7 Laravel
4 Socket.IO
4 .NET Core
3 Bitrix
2 Meteor.JS
6 Другие
по состоянию на 4 ноября 2017
8. Язык
100 Node.js
47 PHP
18 Ruby
10 Python
10 JavaScript
4 Go
4 C#
2 Scala
2 Elixir
1 Java
Фреймворк
17 Yii
12 Rails
7 Django
7 Lavarel
4 Socket.IO
4 .NET Core
3 Bitrix
2 Meteor.JS
6 Другие
Package Manager
96 npm
32 Composer
27 Yarn
19 Bundler
7 pip
2 sbt
2 .NET Core
2 hex
2 Другие
по состоянию на 4 ноября 2017
9. Язык
100 Node.js
47 PHP
18 Ruby
10 Python
10 JavaScript
4 Go
4 C#
2 Scala
2 Elixir
1 Java
Фреймворк
17 Yii
12 Rails
7 Django
7 Lavarel
4 Socket.IO
4 .NET Core
3 Bitrix
2 Meteor.JS
6 Другие
Package Manager
96 npm
32 Composer
27 Yarn
19 Bundler
7 pip
2 sbt
2 .NET Core
2 hex
2 Другие
по состоянию на 4 ноября 2017
DBMS
40 PostgreSQL
39 MySQL
27 MongoDB
2 Cassandra
3 Другие
10. Язык
100 Node.js
47 PHP
18 Ruby
10 Python
10 JavaScript
4 Go
4 C#
2 Scala
2 Elixir
1 Java
Фреймворк
17 Yii
12 Rails
7 Django
7 Lavarel
4 Socket.IO
4 .NET Core
3 Bitrix
2 Meteor.JS
6 Другие
Package Manager
96 npm
32 Composer
27 Yarn
19 Bundler
7 pip
2 sbt
2 .NET Core
2 hex
2 Другие
по состоянию на 4 ноября 2017
DBMS
40 PostgreSQL
39 MySQL
27 MongoDB
2 Cassandra
3 Другие
In-memory store
43 Redis
24 Memcahed
11. Язык
100 Node.js
47 PHP
18 Ruby
10 Python
10 JavaScript
4 Go
4 C#
2 Scala
2 Elixir
1 Java
Фреймворк
17 Yii
12 Rails
7 Django
7 Lavarel
4 Socket.IO
4 .NET Core
3 Bitrix
2 Meteor.JS
6 Другие
Package Manager
96 npm
32 Composer
27 Yarn
19 Bundler
7 pip
2 sbt
2 .NET Core
2 hex
2 Другие
по состоянию на 4 ноября 2017
DBMS
40 PostgreSQL
39 MySQL
27 MongoDB
2 Cassandra
3 Другие
In-memory store
43 Redis
24 Memcahed
Queue
37 RabbitMQ
15 Redis
8 Nats
2 PGQ
1 Kafka
12. Язык
100 Node.js
47 PHP
18 Ruby
10 Python
10 JavaScript
4 Go
4 C#
2 Scala
2 Elixir
1 Java
Фреймворк
17 Yii
12 Rails
7 Django
7 Lavarel
4 Socket.IO
4 .NET Core
3 Bitrix
2 Meteor.JS
6 Другие
Package Manager
96 npm
32 Composer
27 Yarn
19 Bundler
7 pip
2 sbt
2 .NET Core
2 hex
2 Другие
по состоянию на 4 ноября 2017
DBMS
40 PostgreSQL
39 MySQL
27 MongoDB
2 Cassandra
3 Другие
In-memory store
43 Redis
24 Memcahed
Queue
37 RabbitMQ
15 Redis
8 Nats
2 PGQ
1 Kafka
Search
30 Elasticsearch
12 Sphinx
13. Язык
100 Node.js
47 PHP
18 Ruby
10 Python
10 JavaScript
4 Go
4 C#
2 Scala
2 Elixir
1 Java
Фреймворк
17 Yii
12 Rails
7 Django
7 Lavarel
4 Socket.IO
4 .NET Core
3 Bitrix
2 Meteor.JS
6 Другие
Package Manager
96 npm
32 Composer
27 Yarn
19 Bundler
7 pip
2 sbt
2 .NET Core
2 hex
2 Другие
DBMS
40 PostgreSQL
39 MySQL
27 MongoDB
2 Cassandra
3 Другие
Queue
37 RabbitMQ
15 Redis
8 Nats
2 PGQ
1 Kafka
Search
30 Elasticsearch
12 Sphinx
In-memory store
43 Redis
24 Memcahed
по состоянию на 4 ноября 2017
14. Язык
100 Node.js
47 PHP
18 Ruby
10 Python
10 JavaScript
4 Go
4 C#
2 Scala
2 Elixir
1 Java
Фреймворк
17 Yii
12 Rails
7 Django
7 Lavarel
4 Socket.IO
4 .NET Core
3 Bitrix
2 Meteor.JS
6 Другие
Package Manager
96 npm
32 Composer
27 Yarn
19 Bundler
7 pip
2 sbt
2 .NET Core
2 hex
2 Другие
DBMS
40 PostgreSQL
39 MySQL
27 MongoDB
2 Cassandra
3 Другие
Queue
37 RabbitMQ
15 Redis
8 Nats
2 PGQ
1 Kafka
Search
30 Elasticsearch
12 Sphinx
In-memory store
43 Redis
24 Memcahed
по состоянию на 4 ноября 2017
команд30+ клиентов25приложение181
15. Что же такое CI/CD?
git
build
test
release
operate
16. Что же такое CI/CD?
git
build
test
release
operate
Continuous
Intergation?
Continuous
Deployment?
Continuous
Delivery?
17. Что же такое CI/CD?
git
build
test
release
operate
Continuous
Intergation?
ОНО РАБОТАЕТ
Continuous
Deployment?
Continuous
Delivery?
18. Что же такое CI/CD?
git
build
test
release
operate
19. Что же такое CI/CD?
git
build
test
release
operate
20. Какой CI/CD бывает?
Факторы, влияющие на сложность
Основной
процесс
Тестирование
Разделение
прав доступа
Архитектура
приложения
30. Какой CI/CD бывает?
Факторы / Тестирование
Анализ кода
Тесты без окружения
Тесты в окружении
Unit
Functional,
Integration
31. Какой CI/CD бывает?
Факторы / Тестирование
Анализ кода
Тесты без окружения
Тесты в окружении
Тесты в «полном» окружении
Unit
Functional,
Integration
End-to-end,
Performance regression
32. Какой CI/CD бывает?
Факторы / Тестирование
Анализ кода
Тесты без окружения
Тесты в окружении
Тесты в «полном» окружении
Unit
Functional,
Integration
End-to-end,
Performance regression
35. Какой CI/CD бывает?
Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
36. Какой CI/CD бывает?
Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
Multi stage approval
37. Какой CI/CD бывает?
Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
Multi stage approval
Quorum approval
38. Какой CI/CD бывает?
Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
Multi stage approval
Quorum approval
57. Какой CI/CD бывает?
Дополнительные требования
Быстро
Надёжно
Дёшево
Выкат и откат с гарантией и без простоя
SLA 99.9%
Затраты на управление / администрирование
58. Какой CI/CD бывает?
Дополнительные требования
Быстро
Надёжно
Дёшево
Выкат и откат с гарантией и без простоя
SLA 99.9%
Затраты на управление / администрирование
Затраты на инфраструктуру
59. Какой CI/CD бывает?
Дополнительные требования
Быстро
Надёжно
Дёшево
Выкат и откат с гарантией и без простоя
SLA 99.9%
Затраты на управление / администрирование
Затраты на инфраструктуру
90. Демо на нашем стенде
Приходите в любое время,
мы будем показывать, как
вся эта связка работает в
деталях и с примерами. И
будем отвечать на любые
ваши вопросы.
93. Что должно быть в Docker образе?
Всё, что нужно для
работы приложения!
94. Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
95. Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Package manager
96. Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Package manager Dependencies
97. Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
98. Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
Исходный код
99. Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
Исходный код Собранные ассеты
100. Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
Готовые конфигиИсходный код Собранные ассеты
103. One image to rule them all
dockerfile
composer.json
***.php
master
git
104. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
105. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
106. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
107. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
Всё ок!
108. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
Всё ок!
dockerfile
composer.json
***.php
production
109. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
110. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
:production
111. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
:production
=
112. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
:production
=
113. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
:production
=
:v0.7.23
:v0.7.23
114. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
:production
=
:v0.7.23
:v0.7.23
115. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
:production
=
:v0.7.23
:v0.7.23
116. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
:production
=
:v0.7.23
:v0.7.23
117. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
dockerfile
composer.json
***.php
production
Docker
образ
:production
=
:v0.7.23
:v0.7.23
118. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
dockerfile
composer.json
***.php
production
Docker
образ
:production
=
:v0.7.23
:v0.7.23
QA
119. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
dockerfile
composer.json
***.php
production
Docker
образ
:production
=
:v0.7.23
:v0.7.23
QA
Всё ок!
120. One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
dockerfile
composer.json
***.php
production
Docker
образ
:production
=
:v0.7.23
:v0.7.23
QA
Всё ок!
121. One image to rule them all
Какие бранчи собирать? Как тегировать образы?
122. One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
git tag
123. One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag
124. One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag релизные образы
125. One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag релизные образы
devreview
integration
dem
o
126. One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag релизные образы
devreview
integration
dem
o
staging
qa
production