Дмитрий Столяров
CTO & Co-founder
v1
Лучшие практики CI/CD
с Kubernetes и GitLab
Slide 2
Slide 2 text
Лучшие практики
Continuous Delivery
с Docker
RootConf 2016
Собираем Docker-
образы
быстро и удобно
Highload 2016
Наш опыт
с Kubernetes
в небольших проектах
RootConf 2017
Лучшие практики
CI/CD с Kubernetes
и GitLab
Highload 2017
ВЫ
ЗДЕСЬ
youtube.com/c/flant
Slide 3
Slide 3 text
Опыт
Slide 4
Slide 4 text
приложений уже
в production
120
готово, скоро в
production
+19
в работе
+20
Опыт
до конца года
+22
приложение!
=181
по состоянию на 4 ноября 2017
Slide 5
Slide 5 text
проект
в kubernetes
приложений уже
в production
21
до конца
года
+4
ждем
ваш проект
+?
120
готово, скоро в
production
+19
в работе
+20
до конца года
+22
приложение!
=181
Опыт
по состоянию на 4 ноября 2017
Slide 6
Slide 6 text
Язык
100 Node.js
47 PHP
18 Ruby
10 Python
10 JavaScript
4 Go
4 C#
2 Scala
2 Elixir
1 Java
по состоянию на 4 ноября 2017
Slide 7
Slide 7 text
Язык
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
Slide 8
Slide 8 text
Язык
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
Slide 9
Slide 9 text
Язык
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 Другие
Slide 10
Slide 10 text
Язык
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
Slide 11
Slide 11 text
Язык
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
Slide 12
Slide 12 text
Язык
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
Slide 13
Slide 13 text
Язык
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
Slide 14
Slide 14 text
Язык
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
Slide 15
Slide 15 text
Что же такое CI/CD?
git
build
test
release
operate
Slide 16
Slide 16 text
Что же такое CI/CD?
git
build
test
release
operate
Continuous
Intergation?
Continuous
Deployment?
Continuous
Delivery?
Slide 17
Slide 17 text
Что же такое CI/CD?
git
build
test
release
operate
Continuous
Intergation?
ОНО РАБОТАЕТ
Continuous
Deployment?
Continuous
Delivery?
Slide 18
Slide 18 text
Что же такое CI/CD?
git
build
test
release
operate
Slide 19
Slide 19 text
Что же такое CI/CD?
git
build
test
release
operate
Slide 20
Slide 20 text
Какой CI/CD бывает?
Факторы, влияющие на сложность
Основной
процесс
Тестирование
Разделение
прав доступа
Архитектура
приложения
Slide 21
Slide 21 text
Какой CI/CD бывает?
Факторы / Основной процесс
Slide 22
Slide 22 text
Какой CI/CD бывает?
Факторы / Основной процесс
Одно окружение
Slide 23
Slide 23 text
Какой CI/CD бывает?
Факторы / Основной процесс
Одно окружение
Несколько окружений
Slide 24
Slide 24 text
Какой CI/CD бывает?
Факторы / Основной процесс
Одно окружение
Несколько окружений
Динамические окружения
Slide 25
Slide 25 text
Какой CI/CD бывает?
Факторы / Основной процесс
Одно окружение
Несколько окружений
Динамические окружения
Несколько площадок
Slide 26
Slide 26 text
Какой CI/CD бывает?
Факторы / Основной процесс
Одно окружение
Несколько окружений
Динамические окружения
Несколько площадок
Slide 27
Slide 27 text
Какой CI/CD бывает?
Факторы / Тестирование
Slide 28
Slide 28 text
Какой CI/CD бывает?
Факторы / Тестирование
Анализ кода
Slide 29
Slide 29 text
Какой CI/CD бывает?
Факторы / Тестирование
Анализ кода
Тесты без окружения Unit
Slide 30
Slide 30 text
Какой CI/CD бывает?
Факторы / Тестирование
Анализ кода
Тесты без окружения
Тесты в окружении
Unit
Functional,
Integration
Slide 31
Slide 31 text
Какой CI/CD бывает?
Факторы / Тестирование
Анализ кода
Тесты без окружения
Тесты в окружении
Тесты в «полном» окружении
Unit
Functional,
Integration
End-to-end,
Performance regression
Slide 32
Slide 32 text
Какой CI/CD бывает?
Факторы / Тестирование
Анализ кода
Тесты без окружения
Тесты в окружении
Тесты в «полном» окружении
Unit
Functional,
Integration
End-to-end,
Performance regression
Slide 33
Slide 33 text
Какой CI/CD бывает?
Факторы / Разделение прав доступа
Slide 34
Slide 34 text
Какой CI/CD бывает?
Факторы / Разделение прав доступа
Простое разделение прав доступа
Slide 35
Slide 35 text
Какой CI/CD бывает?
Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
Slide 36
Slide 36 text
Какой CI/CD бывает?
Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
Multi stage approval
Slide 37
Slide 37 text
Какой CI/CD бывает?
Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
Multi stage approval
Quorum approval
Slide 38
Slide 38 text
Какой CI/CD бывает?
Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
Multi stage approval
Quorum approval
Slide 39
Slide 39 text
Какой CI/CD бывает?
Факторы / Архитектура приложения
Slide 40
Slide 40 text
Какой CI/CD бывает?
Факторы / Архитектура приложения
Stateless приложение
Какой CI/CD бывает?
Дополнительные требования
Быстро
Slide 53
Slide 53 text
Какой CI/CD бывает?
Дополнительные требования
Быстро
Надёжно
Slide 54
Slide 54 text
Какой CI/CD бывает?
Дополнительные требования
Быстро
Надёжно
Выкат и откат с гарантией и без простоя
Slide 55
Slide 55 text
Какой CI/CD бывает?
Дополнительные требования
Быстро
Надёжно
Выкат и откат с гарантией и без простоя
SLA 99.9%
Slide 56
Slide 56 text
Какой CI/CD бывает?
Дополнительные требования
Быстро
Надёжно
Дёшево
Выкат и откат с гарантией и без простоя
SLA 99.9%
Slide 57
Slide 57 text
Какой CI/CD бывает?
Дополнительные требования
Быстро
Надёжно
Дёшево
Выкат и откат с гарантией и без простоя
SLA 99.9%
Затраты на управление / администрирование
Slide 58
Slide 58 text
Какой CI/CD бывает?
Дополнительные требования
Быстро
Надёжно
Дёшево
Выкат и откат с гарантией и без простоя
SLA 99.9%
Затраты на управление / администрирование
Затраты на инфраструктуру
Slide 59
Slide 59 text
Какой CI/CD бывает?
Дополнительные требования
Быстро
Надёжно
Дёшево
Выкат и откат с гарантией и без простоя
SLA 99.9%
Затраты на управление / администрирование
Затраты на инфраструктуру
Slide 60
Slide 60 text
Какой CI/CD бывает?
Особые требования Флант
Slide 61
Slide 61 text
Какой CI/CD бывает?
Особые требования Флант
Open Source
Разномасштабность
Интероперабельность
Простота эксплуатации
Будущее
N
Deployment StatefulSet
Service Ingress
Job CronJob
N
Slide 66
Slide 66 text
Инструменты
Стандарт для нас
Slide 67
Slide 67 text
Инструменты
Slide 68
Slide 68 text
Инструменты
Управление пакетами
Состоит из 2-х частей
helm (client), tiller (server)
Chart – название пакетов
метаописание, yaml-шаблоны
Наша утилита
Улучшает сборку
Улучшает deploy (чуть-чуть)
github.com/flant/dapp
Slide 69
Slide 69 text
git
build
test
release
operate
Slide 70
Slide 70 text
git operate
build test release
git
build
test
release
operate
Slide 71
Slide 71 text
git operate
build test release
Slide 72
Slide 72 text
git operate
build test release
Slide 73
Slide 73 text
git operate
build test release
Slide 74
Slide 74 text
git operate
build test release
.gitlab-ci.yaml
Slide 75
Slide 75 text
git operate
build test release
.gitlab-ci.yaml
Slide 76
Slide 76 text
git operate
build test release
.gitlab-ci.yaml
Dockerfile
Демо на нашем стенде
Приходите в любое время,
мы будем показывать, как
вся эта связка работает в
деталях и с примерами. И
будем отвечать на любые
ваши вопросы.
Slide 91
Slide 91 text
CI/CD с Kubernetes и Gitlab
tips & tricks
Slide 92
Slide 92 text
Что должно быть
в Docker образе?
1/8
Slide 93
Slide 93 text
Что должно быть в Docker образе?
Всё, что нужно для
работы приложения!
Slide 94
Slide 94 text
Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Slide 95
Slide 95 text
Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Package manager
Slide 96
Slide 96 text
Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Package manager Dependencies
Slide 97
Slide 97 text
Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
Slide 98
Slide 98 text
Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
Исходный код
Slide 99
Slide 99 text
Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
Исходный код Собранные ассеты
Slide 100
Slide 100 text
Что должно быть в Docker образе?
Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
Готовые конфиги
Исходный код Собранные ассеты
Slide 101
Slide 101 text
One image to rule them all
2/8
Slide 102
Slide 102 text
One image to rule them all
git
Slide 103
Slide 103 text
One image to rule them all
dockerfile
composer.json
***.php
master
git
Slide 104
Slide 104 text
One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
Slide 105
Slide 105 text
One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
Slide 106
Slide 106 text
One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
Slide 107
Slide 107 text
One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
Всё ок!
Slide 108
Slide 108 text
One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
Всё ок!
dockerfile
composer.json
***.php
production
Slide 109
Slide 109 text
One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
Slide 110
Slide 110 text
One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
:production
Slide 111
Slide 111 text
One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
:production
=
Slide 112
Slide 112 text
One image to rule them all
dockerfile
composer.json
***.php
master
git
Docker
образ
:master
QA
dockerfile
composer.json
***.php
production
Всё ок!
Docker
образ
:production
=
Slide 113
Slide 113 text
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
Slide 114
Slide 114 text
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
Slide 115
Slide 115 text
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
Slide 116
Slide 116 text
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
Slide 117
Slide 117 text
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
Slide 118
Slide 118 text
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
Slide 119
Slide 119 text
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
Всё ок!
Slide 120
Slide 120 text
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
Всё ок!
Slide 121
Slide 121 text
One image to rule them all
Какие бранчи собирать? Как тегировать образы?
Slide 122
Slide 122 text
One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
git tag
Slide 123
Slide 123 text
One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag
Slide 124
Slide 124 text
One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag релизные образы
Slide 125
Slide 125 text
One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag релизные образы
dev review
integration
dem
o
Slide 126
Slide 126 text
One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag релизные образы
dev review
integration
dem
o
staging
qa
production
Slide 127
Slide 127 text
Порядок выката
и миграции
3/8
Slide 128
Slide 128 text
Кейс #1
Backend
Порядок выката и миграции
Slide 129
Slide 129 text
Кейс #1
Backend
1
DB
Порядок выката и миграции
Slide 130
Slide 130 text
:v0.7.14
Кейс #1
Backend
1
DB
Порядок выката и миграции
Slide 131
Slide 131 text
:v0.7.14
Backend
DB
1
Кейс #1
Порядок выката и миграции
Deploy
Slide 132
Slide 132 text
Кейс #1
Backend
DB
Migrations
1
Порядок выката и миграции
:v0.7.14
->
0.8.15
:v0.8.15
Deploy
Slide 133
Slide 133 text
:v0.7.14
->
0.8.15
Кейс #1
Backend
DB
:v0.8.15
Migrations
1
Порядок выката и миграции
Slide 134
Slide 134 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
:v0.7.14
Кейс #1
Backend
DB
:v0.8.15
Migrations
1
Порядок выката и миграции
Slide 135
Slide 135 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
:v0.7.14
Кейс #1
Backend
DB
:v0.8.15
Migrations
1
Порядок выката и миграции
Slide 136
Slide 136 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Backend
DB
:v0.8.15
Migrations
1
Порядок выката и миграции
Slide 137
Slide 137 text
:v0.7.14
->
0.8.15
:v0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Backend
DB
:v0.8.15
Migrations
1
Порядок выката и миграции
Slide 138
Slide 138 text
:v0.7.14
->
0.8.15
:v0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Backend
DB
:v0.8.15
Migrations
1
Порядок выката и миграции
Slide 139
Slide 139 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Backend
DB
:v0.8.15
Migrations
1
Порядок выката и миграции
Slide 140
Slide 140 text
:v0.7.14
->
0.8.15
:v0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Backend
DB
:v0.8.15
Migrations
1
Порядок выката и миграции
Slide 141
Slide 141 text
:v0.7.14
->
0.8.15
:v0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Backend
DB
:v0.8.15
Migrations
1
Порядок выката и миграции
Slide 142
Slide 142 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Backend
DB
:v0.8.15
Migrations
1
Порядок выката и миграции
Slide 143
Slide 143 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
Порядок выката и миграции
Slide 144
Slide 144 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
Порядок выката и миграции
Slide 145
Slide 145 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
Порядок выката и миграции
Slide 146
Slide 146 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
Порядок выката и миграции
Slide 147
Slide 147 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
:v0.8.15
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
Порядок выката и миграции
Slide 148
Slide 148 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
:v0.8.15
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
Порядок выката и миграции
Slide 149
Slide 149 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.7.14
:v0.8.15
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
Порядок выката и миграции
Slide 150
Slide 150 text
:v0.7.14
->
0.8.15
:v0.7.14
:v0.8.15
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
Порядок выката и миграции
Slide 151
Slide 151 text
:v0.7.14
->
0.8.15
:v0.8.15
:v0.7.14
:v0.8.15
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
Порядок выката и миграции
Slide 152
Slide 152 text
:v0.7.14
->
0.8.15
:v0.8.15
:v0.7.14
:v0.8.15
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
Порядок выката и миграции
Slide 153
Slide 153 text
:v0.7.14
->
0.8.15
:v0.8.15
:v0.8.15
:v0.8.15
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
Порядок выката и миграции
Slide 154
Slide 154 text
:v0.8.15
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
:v0.8.15
:v0.8.15
:v0.8.15
Порядок выката и миграции
Slide 155
Slide 155 text
:v0.8.15
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
:v0.8.15
:v0.8.15
:v0.8.15
Порядок выката и миграции
Ура!
Выкатилось!
Slide 156
Slide 156 text
Ура!
Выкатилось!
:v0.8.15
Кейс #1
Backend
:v0.8.15
Migrations
DB
1
:v0.8.15
:v0.8.15
:v0.8.15
Порядок выката и миграции
Slide 157
Slide 157 text
backend
3
migrations
DB
1
Порядок выката и миграции
Кейс #1
Slide 158
Slide 158 text
backend
3
migrations
DB
1
использует
использует
Порядок выката и миграции
Кейс #1
Slide 159
Slide 159 text
backend
3
migrations
DB
1
использует
использует
косвенно
зависит
Порядок выката и миграции
Кейс #1
Slide 160
Slide 160 text
Кейс #2
Порядок выката и миграции
Slide 161
Slide 161 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
:v0.8.15
Порядок выката и миграции
Slide 162
Slide 162 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
:v0.8.15
1
Порядок выката и миграции
Slide 163
Slide 163 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
:v0.8.15
1
Порядок выката и миграции
Slide 164
Slide 164 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Slide 165
Slide 165 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Slide 166
Slide 166 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Slide 167
Slide 167 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Slide 168
Slide 168 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Slide 169
Slide 169 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Slide 170
Slide 170 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Slide 171
Slide 171 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Slide 172
Slide 172 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Slide 173
Slide 173 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Slide 174
Slide 174 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
Порядок выката и миграции
:v0.8.15
Slide 175
Slide 175 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
Порядок выката и миграции
:v0.8.15
Slide 176
Slide 176 text
Кейс #2
Backend
Migrations
DB
:v0.8.15
1
Порядок выката и миграции
:v0.8.15
Slide 177
Slide 177 text
backend
3
migrations
DB
1
использует
использует
косвенно
зависит
Резюме
Порядок выката и миграции
Slide 178
Slide 178 text
Bootstrap базы
4/8
Slide 179
Slide 179 text
Dump
Bootstrap базы
Seed
Slide 180
Slide 180 text
Dump
Bootstrap базы
Seed
DB
Slide 181
Slide 181 text
Dump
Bootstrap базы
Seed
DB load dump
Slide 182
Slide 182 text
Dump
Bootstrap базы
Seed
DB load dump
migrations
Slide 183
Slide 183 text
Dump
Bootstrap базы
Seed
DB load dump
migrations
Slide 184
Slide 184 text
Dump
Bootstrap базы
Seed
DB load dump
Backend migrations
Slide 185
Slide 185 text
Dump
Bootstrap базы
Seed
DB load dump
Backend migrations
Slide 186
Slide 186 text
Dump
Bootstrap базы
Backend
DB load dump
migrations
DB
Seed
Slide 187
Slide 187 text
Dump
Bootstrap базы
Backend
DB load dump
migrations
DB migrations
Seed
Slide 188
Slide 188 text
Dump
Bootstrap базы
Backend
DB load dump
migrations
DB migrations
seed
Seed
Slide 189
Slide 189 text
Dump
Bootstrap базы
Backend
DB load dump
migrations
DB migrations
seed
Seed
Slide 190
Slide 190 text
Dump
Bootstrap базы
Backend
DB load dump
migrations Backend
DB migrations
seed
Seed
Slide 191
Slide 191 text
Dump
Bootstrap базы
Backend
DB load dump
migrations Backend
DB migrations
seed
Seed
Slide 192
Slide 192 text
Скорость
bootstrap’а
Занимаемое
место
Полезность
Сложность
реализации
Пустая база
только структура
5 sec
Seed/fixtures
из текущего бранча
1 min
Ночной дамп
с seeds/fixtures из master
10 sec
Дамп
“для staging”
1 hour
Ночной дамп
“для staging”
30 sec
Дамп
с production
30 min
Ночной дамп
с production
1 min
Slide 193
Slide 193 text
Скорость
bootstrap’а
Занимаемое
место
Полезность
Сложность
реализации
Пустая база
только структура
Seed/fixtures
из текущего бранча
Ночной дамп
с seeds/fixtures из master
10 sec
Дамп
“для staging”
Ночной дамп
“для staging”
30 sec
Дамп
с production
Ночной дамп
с production
Отображение
branch: new-interface
Динамические окружения
один проект
Slide 244
Slide 244 text
Отображение
branch: new-interface
Динамические окружения
один проект
namespace: new-interface
new-interface.review.example.com
Slide 245
Slide 245 text
Отображение
branch: new-interface
Динамические окружения
один проект
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один проект
+ SLUG
Slide 246
Slide 246 text
Отображение
branch: new-interface
Динамические окружения
один проект
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один проект
+ SLUG
namespace: feature-llll-dfjre3
feature-llll-dfjre3.review.example.com
Slide 247
Slide 247 text
Отображение
branch: new-interface
Динамические окружения
один проект
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один проект
+ SLUG
namespace: feature-llll-dfjre3
feature-llll-dfjre3.review.example.com
несколько
проектов
Slide 248
Slide 248 text
Отображение
branch: new-interface
Динамические окружения
один проект
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один проект
+ SLUG
namespace: feature-llll-dfjre3
feature-llll-dfjre3.review.example.com
несколько
проектов
project: gimli
branch: bar
Slide 249
Slide 249 text
Отображение
branch: new-interface
Динамические окружения
один проект
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один проект
+ SLUG
namespace: feature-llll-dfjre3
feature-llll-dfjre3.review.example.com
несколько
проектов
namespace: gimli-bar
project: gimli
gimli-bar.review.example.com
branch: bar
Slide 250
Slide 250 text
Отображение
branch: new-interface
Динамические окружения
один проект
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один проект
+ SLUG
namespace: feature-llll-dfjre3
feature-llll-dfjre3.review.example.com
несколько
проектов
namespace: gimli-bar
project: gimli
gimli-bar.review.example.com
branch: bar
Slide 251
Slide 251 text
Несколько советов
Динамические окружения
Минимизировать
использование ресурсов
Slide 252
Slide 252 text
Несколько советов
Динамические окружения
Минимизировать
использование ресурсов
Целиком в Kubernetes
(включая все СУБД)
Slide 253
Slide 253 text
Несколько советов
Динамические окружения
Минимизировать
использование ресурсов
Целиком в Kubernetes
(включая все СУБД)
Ограничить
публичный доступ
Slide 254
Slide 254 text
Несколько советов
Динамические окружения
Минимизировать
использование ресурсов
Целиком в Kubernetes
(включая все СУБД)
Ограничить
публичный доступ
Как-то ограничивать
разработчиков
Slide 255
Slide 255 text
Несколько советов
Динамические окружения
Минимизировать
использование ресурсов
Целиком в Kubernetes
(включая все СУБД)
Ограничить
публичный доступ
Как-то ограничивать
разработчиков
24×7×365 L1/L2/L3/+ DevOps SLA
30+
… и по доступной цене
Slide 277
Slide 277 text
Наши Docker-проекты
github.com/flant/dapp
github.com/flant/loghouse
Дмитрий Столяров
[email protected]
linkedin.com/in/distol
github.com/distol
Всем спасибо!
Наш блог на Хабрахабре
habrahabr.ru/company/flant/
Наш youtube-канал
youtube.com/c/flant