Date post: | 21-Jan-2018 |
Category: |
Engineering |
Upload: | ontico |
View: | 263 times |
Download: | 3 times |
Дмитрий СтоляровCTO & Co-founder
v1
Лучшие практики CI/CD с Kubernetes и GitLab
Лучшие практики Continuous Delivery с Docker
RootConf 2016
Собираем Docker-образы быстро и удобно
Highload 2016
Наш опыт с Kubernetesв небольших проектах
RootConf 2017
Лучшие практики CI/CD с Kubernetes и GitLab
Highload 2017
ВЫЗДЕСЬ
youtube.com/c/flant
Опыт
приложений уже в production120готово, скоро в production+19в работе+20
Опыт
до конца года+22приложение!=181
по состоянию на 4 ноября 2017
проект в kubernetes
приложений уже в production 21
до конца года+4ждемваш проект+?
120готово, скоро в production+19в работе+20до конца года+22приложение!=181
Опыт
по состоянию на 4 ноября 2017
Язык100 Node.js
47 PHP18 Ruby10 Python10 JavaScript
4 Go4 C#2 Scala2 Elixir1 Java
по состоянию на 4 ноября 2017
Язык100 Node.js
47 PHP18 Ruby10 Python10 JavaScript
4 Go4 C#2 Scala2 Elixir1 Java
Фреймворк17 Yii12 Rails
7 Django7 Laravel4 Socket.IO4 .NET Core3 Bitrix2 Meteor.JS6 Другие
по состоянию на 4 ноября 2017
Язык100 Node.js
47 PHP18 Ruby10 Python10 JavaScript
4 Go4 C#2 Scala2 Elixir1 Java
Фреймворк17 Yii12 Rails
7 Django7 Lavarel4 Socket.IO4 .NET Core3 Bitrix2 Meteor.JS6 Другие
Package Manager
96 npm32 Composer27 Yarn19 Bundler
7 pip2 sbt2 .NET Core2 hex2 Другие
по состоянию на 4 ноября 2017
Язык100 Node.js
47 PHP18 Ruby10 Python10 JavaScript
4 Go4 C#2 Scala2 Elixir1 Java
Фреймворк17 Yii12 Rails
7 Django7 Lavarel4 Socket.IO4 .NET Core3 Bitrix2 Meteor.JS6 Другие
Package Manager
96 npm32 Composer27 Yarn19 Bundler
7 pip2 sbt2 .NET Core2 hex2 Другие
по состоянию на 4 ноября 2017
DBMS
40 PostgreSQL39 MySQL27 MongoDB
2 Cassandra3 Другие
Язык100 Node.js
47 PHP18 Ruby10 Python10 JavaScript
4 Go4 C#2 Scala2 Elixir1 Java
Фреймворк17 Yii12 Rails
7 Django7 Lavarel4 Socket.IO4 .NET Core3 Bitrix2 Meteor.JS6 Другие
Package Manager
96 npm32 Composer27 Yarn19 Bundler
7 pip2 sbt2 .NET Core2 hex2 Другие
по состоянию на 4 ноября 2017
DBMS
40 PostgreSQL39 MySQL27 MongoDB
2 Cassandra3 Другие
In-memory store
43 Redis24 Memcahed
Язык100 Node.js
47 PHP18 Ruby10 Python10 JavaScript
4 Go4 C#2 Scala2 Elixir1 Java
Фреймворк17 Yii12 Rails
7 Django7 Lavarel4 Socket.IO4 .NET Core3 Bitrix2 Meteor.JS6 Другие
Package Manager
96 npm32 Composer27 Yarn19 Bundler
7 pip2 sbt2 .NET Core2 hex2 Другие
по состоянию на 4 ноября 2017
DBMS
40 PostgreSQL39 MySQL27 MongoDB
2 Cassandra3 Другие
In-memory store
43 Redis24 Memcahed
Queue
37 RabbitMQ15 Redis
8 Nats2 PGQ1 Kafka
Язык100 Node.js
47 PHP18 Ruby10 Python10 JavaScript
4 Go4 C#2 Scala2 Elixir1 Java
Фреймворк17 Yii12 Rails
7 Django7 Lavarel4 Socket.IO4 .NET Core3 Bitrix2 Meteor.JS6 Другие
Package Manager
96 npm32 Composer27 Yarn19 Bundler
7 pip2 sbt2 .NET Core2 hex2 Другие
по состоянию на 4 ноября 2017
DBMS
40 PostgreSQL39 MySQL27 MongoDB
2 Cassandra3 Другие
In-memory store
43 Redis24 Memcahed
Queue
37 RabbitMQ15 Redis
8 Nats2 PGQ1 Kafka
Search
30 Elasticsearch
12 Sphinx
Язык100 Node.js
47 PHP18 Ruby10 Python10 JavaScript
4 Go4 C#2 Scala2 Elixir1 Java
Фреймворк17 Yii12 Rails
7 Django7 Lavarel4 Socket.IO4 .NET Core3 Bitrix2 Meteor.JS6 Другие
Package Manager
96 npm32 Composer27 Yarn19 Bundler
7 pip2 sbt2 .NET Core2 hex2 Другие
DBMS
40 PostgreSQL39 MySQL27 MongoDB
2 Cassandra3 Другие
Queue
37 RabbitMQ15 Redis
8 Nats2 PGQ1 Kafka
Search
30 Elasticsearch
12 Sphinx
In-memory store
43 Redis24 Memcahed
по состоянию на 4 ноября 2017
Язык100 Node.js
47 PHP18 Ruby10 Python10 JavaScript
4 Go4 C#2 Scala2 Elixir1 Java
Фреймворк17 Yii12 Rails
7 Django7 Lavarel4 Socket.IO4 .NET Core3 Bitrix2 Meteor.JS6 Другие
Package Manager
96 npm32 Composer27 Yarn19 Bundler
7 pip2 sbt2 .NET Core2 hex2 Другие
DBMS
40 PostgreSQL39 MySQL27 MongoDB
2 Cassandra3 Другие
Queue
37 RabbitMQ15 Redis
8 Nats2 PGQ1 Kafka
Search
30 Elasticsearch
12 Sphinx
In-memory store
43 Redis24 Memcahed
по состоянию на 4 ноября 2017
команд30+ клиентов25приложение181
Что же такое CI/CD?
git
build
test
release
operate
Что же такое CI/CD?
git
build
test
release
operate
Continuous
Intergation?Continuous
Deployment?Continuous
Delivery?
Что же такое CI/CD?
git
build
test
release
operate
Continuous
Intergation?
ОНО РАБОТАЕТ
Continuous
Deployment?Continuous
Delivery?
Что же такое CI/CD?
git
build
test
release
operate
Что же такое CI/CD?
git
build
test
release
operate
Какой CI/CD бывает?Факторы, влияющие на сложность
Основной процесс Тестирование
Разделение прав доступа
Архитектура приложения
Какой CI/CD бывает?Факторы / Основной процесс
Какой CI/CD бывает?Факторы / Основной процесс
Одно окружение
Какой CI/CD бывает?Факторы / Основной процесс
Одно окружение
Несколько окружений
Какой CI/CD бывает?Факторы / Основной процесс
Одно окружение
Несколько окружений
Динамические окружения
Какой CI/CD бывает?Факторы / Основной процесс
Одно окружение
Несколько окружений
Динамические окружения
Несколько площадок
Какой CI/CD бывает?Факторы / Основной процесс
Одно окружение
Несколько окружений
Динамические окружения
Несколько площадок
Какой CI/CD бывает?Факторы / Тестирование
Какой CI/CD бывает?Факторы / Тестирование
Анализ кода
Какой CI/CD бывает?Факторы / Тестирование
Анализ кода
Тесты без окружения Unit
Какой CI/CD бывает?Факторы / Тестирование
Анализ кода
Тесты без окружения
Тесты в окружении
Unit
Functional, Integration
Какой CI/CD бывает?Факторы / Тестирование
Анализ кода
Тесты без окружения
Тесты в окружении
Тесты в «полном» окружении
Unit
Functional, Integration
End-to-end, Performance regression
Какой CI/CD бывает?Факторы / Тестирование
Анализ кода
Тесты без окружения
Тесты в окружении
Тесты в «полном» окружении
Unit
Functional, Integration
End-to-end, Performance regression
Какой CI/CD бывает?Факторы / Разделение прав доступа
Какой CI/CD бывает?Факторы / Разделение прав доступа
Простое разделение прав доступа
Какой CI/CD бывает?Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
Какой CI/CD бывает?Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
Multi stage approval
Какой CI/CD бывает?Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
Multi stage approval
Quorum approval
Какой CI/CD бывает?Факторы / Разделение прав доступа
Простое разделение прав доступа
Разные права на окружения
Multi stage approval
Quorum approval
Какой CI/CD бывает?Факторы / Архитектура приложения
Какой CI/CD бывает?Факторы / Архитектура приложения
Stateless приложение
Какой CI/CD бывает?Факторы / Архитектура приложения
Stateless приложение
Stateful приложение
Какой CI/CD бывает?Факторы / Архитектура приложения
Stateless приложение
Stateful приложение
Многокомпонентное приложение
Какой CI/CD бывает?Факторы / Архитектура приложения
Stateless приложение
Stateful приложение
Многокомпонентное приложение
Микросервисная архитектура
Какой CI/CD бывает?Факторы / Архитектура приложения
Stateless приложение
Stateful приложение
Многокомпонентное приложение
Микросервисная архитектура
git + shell
Docker
Kubernetes + Helm
Kubernetes + Helm + Gitlab
Kubernetes + Helm+ Gitlab Enterprise
Какой CI/CD бывает?Дополнительные требования
Какой CI/CD бывает?Дополнительные требования
Быстро
Какой CI/CD бывает?Дополнительные требования
Быстро
Надёжно
Какой CI/CD бывает?Дополнительные требования
Быстро
НадёжноВыкат и откат с гарантией и без простоя
Какой CI/CD бывает?Дополнительные требования
Быстро
НадёжноВыкат и откат с гарантией и без простоя
SLA 99.9%
Какой CI/CD бывает?Дополнительные требования
Быстро
Надёжно
Дёшево
Выкат и откат с гарантией и без простоя
SLA 99.9%
Какой CI/CD бывает?Дополнительные требования
Быстро
Надёжно
Дёшево
Выкат и откат с гарантией и без простоя
SLA 99.9%
Затраты на управление / администрирование
Какой CI/CD бывает?Дополнительные требования
Быстро
Надёжно
Дёшево
Выкат и откат с гарантией и без простоя
SLA 99.9%
Затраты на управление / администрирование
Затраты на инфраструктуру
Какой CI/CD бывает?Дополнительные требования
Быстро
Надёжно
Дёшево
Выкат и откат с гарантией и без простоя
SLA 99.9%
Затраты на управление / администрирование
Затраты на инфраструктуру
Какой CI/CD бывает?Особые требования Флант
Какой CI/CD бывает?Особые требования Флант
Open Source
Разномасштабность
Интероперабельность
Простота эксплуатации
Будущее
Инструменты
Инструменты Kubernetes
Инструменты Kubernetes
«Чёрный ящик»
YAML Declarative DSL
N
Deployment StatefulSet
Service Ingress
Job CronJob
N
Инструменты
Стандарт для нас
Инструменты
Инструменты
Управление пакетами
Состоит из 2-х частей
helm (client), tiller (server)
Chart – название пакетов
метаописание, yaml-шаблоны
Наша утилита
Улучшает сборку
Улучшает deploy (чуть-чуть)
github.com/flant/dapp
git
build
test
release
operate
git operate build test release
git
build
test
release
operate
git operate build test release
git operate build test release
git operate build test release
git operate build test release
.gitlab-ci.yaml
git operate build test release
.gitlab-ci.yaml
git operate build test release
.gitlab-ci.yaml
Dockerfile
git operate build test release
.gitlab-ci.yaml
Dockerfile
docker build
Docker-image
git operate build test release
.gitlab-ci.yaml
Dockerfile
docker build
Docker-image
Dockerregistry
git operate build test release
.gitlab-ci.yaml
Dockerfile
docker build
Docker-image
Dockerregistry
git operate build test release
.gitlab-ci.yaml
Dockerfile
docker build
Docker-image
Docker-image
+tests
Dockerregistry
git operate build test release
.gitlab-ci.yaml
Dockerfile
docker build
Docker-image
Docker-image
+tests
Dockerregistry
.helm
backend.yaml
frontend.yaml
cron.yaml
git operate build test release
.gitlab-ci.yaml
Dockerfile
docker build
Docker-image
Docker-image
+tests
Dockerregistry
.helm
backend.yaml
frontend.yaml
cron.yaml
helm install
git operate build test release
.gitlab-ci.yaml
Dockerfile
docker build
Docker-image
Docker-image
+tests
Dockerregistry
.helm
backend.yaml
frontend.yaml
cron.yaml
helm install
git operate
Dockerfile
.helm
backend.yaml
frontend.yaml
cron.yaml
docker build
Docker-image
Docker-image
+
.gitlab-ci.yaml
tests
Dockerregistry
build test release
helm install
.helm
git operate
backend.yaml
frontend.yaml
cron.yaml
Docker-image
Docker-image
+
.gitlab-ci.yaml
tests
Dockerregistry
build test release
Dockerfile
docker build
helm install
.helm
git operate
backend.yaml
frontend.yaml
cron.yaml
Docker-image
Docker-image
+
.gitlab-ci.yaml
tests
Dockerregistry
build test release
docker build
helm install
Dappfile
.helm
git operate
backend.yaml
frontend.yaml
cron.yaml
Docker-image
Docker-image
+
.gitlab-ci.yaml
tests
Dockerregistry
build test release
Dappfile
dapp build
helm install
.helm
git operate
backend.yaml
frontend.yaml
cron.yaml
Docker-image
Docker-image
+
.gitlab-ci.yaml
tests
Dockerregistry
build test release
Dappfile
dapp build
dapp kube deploy
.helm
git operate
backend.yaml
frontend.yaml
cron.yaml
Docker-image
Docker-image
+
.gitlab-ci.yaml
tests
Dockerregistry
build test release
Dappfile
dapp build
dapp kube deploy
Демо на нашем стенде
Приходите в любое время, мы будем показывать, как вся эта связка работает в деталях и с примерами. И будем отвечать на любые ваши вопросы.
CI/CD с Kubernetes и Gitlabtips & tricks
Что должно быть в Docker образе?
1/8
Что должно быть в Docker образе?
Всё, что нужно для работы приложения!
Что должно быть в Docker образе?Системные компоненты
# apt-get install php-fpm
Что должно быть в Docker образе?Системные компоненты
# apt-get install php-fpm
Package manager
Что должно быть в Docker образе?Системные компоненты
# apt-get install php-fpm
Package manager Dependencies
Что должно быть в Docker образе?Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
Что должно быть в Docker образе?Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
Исходный код
Что должно быть в Docker образе?Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
Исходный код Собранные ассеты
Что должно быть в Docker образе?Системные компоненты
# apt-get install php-fpm
Системные библиотеки
# apt-get install libxml2
Package manager Dependencies
Готовые конфигиИсходный код Собранные ассеты
One image to rule them all
2/8
One image to rule them all
git
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
QA
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
QA
Всё ок!
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
QA
Всё ок!
dockerfile
composer.json
***.phpprod
uctio
n
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
QA
dockerfile
composer.json
***.phpprod
uctio
n
Всё ок!
Dockerобраз
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
QA
dockerfile
composer.json
***.phpprod
uctio
n
Всё ок!
Dockerобраз
:pro
duct
ion
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
QA
dockerfile
composer.json
***.phpprod
uctio
n
Всё ок!
Dockerобраз
:pro
duct
ion=
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
QA
dockerfile
composer.json
***.phpprod
uctio
n
Всё ок!
Dockerобраз
:pro
duct
ion=
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
QA
dockerfile
composer.json
***.phpprod
uctio
n
Всё ок!
Dockerобраз
:pro
duct
ion=
:v0.7.23
:v0.7.23
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
QA
dockerfile
composer.json
***.phpprod
uctio
n
Всё ок!
Dockerобраз
:pro
duct
ion=
:v0.7.23
:v0.7.23
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
QA
dockerfile
composer.json
***.phpprod
uctio
n
Всё ок!
Dockerобраз
:pro
duct
ion=
:v0.7.23
:v0.7.23
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
QA
dockerfile
composer.json
***.phpprod
uctio
n
Всё ок!
Dockerобраз
:pro
duct
ion=
:v0.7.23
:v0.7.23
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
dockerfile
composer.json
***.phpprod
uctio
n
Dockerобраз
:pro
duct
ion=
:v0.7.23
:v0.7.23
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
dockerfile
composer.json
***.phpprod
uctio
n
Dockerобраз
:pro
duct
ion=
:v0.7.23
:v0.7.23
QA
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
dockerfile
composer.json
***.phpprod
uctio
n
Dockerобраз
:pro
duct
ion=
:v0.7.23
:v0.7.23
QA
Всё ок!
One image to rule them all
dockerfile
composer.json
***.phpmas
ter
git
Dockerобраз :m
aste
r
dockerfile
composer.json
***.phpprod
uctio
n
Dockerобраз
:pro
duct
ion=
:v0.7.23
:v0.7.23
QA
Всё ок!
One image to rule them allКакие бранчи собирать? Как тегировать образы?
One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
git tag
One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag
One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag релизные образы
One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag релизные образы
dev r
eview
integ
ration
demo
One image to rule them all
git branch
Какие бранчи собирать? Как тегировать образы?
временные образы
git tag релизные образы
dev r
eview
integ
ration
demo
stagin
g
qa
prod
uctio
n
Порядок выката и миграции
3/8
Кейс #1
Back
end
Порядок выката и миграции
Кейс #1
Back
end
1
DB
Порядок выката и миграции
:v0.7.14
Кейс #1
Back
end
1
DB
Порядок выката и миграции
:v0.7.14
Back
end
DB
1
Кейс #1Порядок выката и миграции
Deploy
Кейс #1
Back
end
DB
Mig
ratio
ns1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.8.15
Deploy
:v0.7.14 -> 0.8.15
Кейс #1
Back
end
DB
:v0.8.15
Mig
ratio
ns1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
:v0.7.14
Кейс #1
Back
end
DB
:v0.8.15
Mig
ratio
ns1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
:v0.7.14
Кейс #1
Back
end
DB
:v0.8.15
Mig
ratio
ns1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Back
end
DB
:v0.8.15
Mig
ratio
ns1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Back
end
DB
:v0.8.15
Mig
ratio
ns1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Back
end
DB
:v0.8.15
Mig
ratio
ns1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Back
end
DB
:v0.8.15
Mig
ratio
ns1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Back
end
DB
:v0.8.15
Mig
ratio
ns1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Back
end
DB
:v0.8.15
Mig
ratio
ns1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Back
end
DB
:v0.8.15
Mig
ratio
ns1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
:v0.8.15
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
:v0.8.15
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.7.14
:v0.8.15
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.7.14
:v0.8.15
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.8.15
:v0.7.14
:v0.8.15
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.8.15
:v0.7.14
:v0.8.15
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
Порядок выката и миграции
:v0.7.14 -> 0.8.15
:v0.8.15
:v0.8.15
:v0.8.15
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
Порядок выката и миграции
:v0.8.15
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
:v0.8.15
:v0.8.15
:v0.8.15
Порядок выката и миграции
:v0.8.15
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
:v0.8.15
:v0.8.15
:v0.8.15
Порядок выката и миграции
Ура!
Выкатилось!
Ура!
Выкатилось!:v0.8.15
Кейс #1
Back
end
:v0.8.15
Mig
ratio
ns
DB
1
:v0.8.15
:v0.8.15
:v0.8.15
Порядок выката и миграции
backend3
migrationsDB1
Порядок выката и миграцииКейс #1
backend3
migrationsDB1
исполь
зует
использует
Порядок выката и миграцииКейс #1
backend3
migrationsDB1
исполь
зует
использует
косвенно зависит
Порядок выката и миграцииКейс #1
Кейс #2Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
:v0.8.15
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
:v0.8.15
1
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
:v0.8.15
1
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
:v0.8.15
Порядок выката и миграции
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
Порядок выката и миграции
:v0.8.15
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
Порядок выката и миграции
:v0.8.15
Кейс #2
Back
end
Mig
ratio
ns
DB
:v0.8.15
1
Порядок выката и миграции
:v0.8.15
backend3
migrationsDB1
исполь
зует
использует
косвенно зависит
РезюмеПорядок выката и миграции
Bootstrap базы
4/8
Dump
Bootstrap базы
Seed
Dump
Bootstrap базы
Seed
DB
Dump
Bootstrap базы
Seed
DB load dump
Dump
Bootstrap базы
Seed
DB load dump
migrations
Dump
Bootstrap базы
Seed
DB load dump
migrations
Dump
Bootstrap базы
Seed
DB load dump
Backend migrations
Dump
Bootstrap базы
Seed
DB load dump
Backend migrations
Dump
Bootstrap базы
Backend
DB load dump
migrations
DB
Seed
Dump
Bootstrap базы
Backend
DB load dump
migrations
DB migrations
Seed
Dump
Bootstrap базы
Backend
DB load dump
migrations
DB migrations
seed
Seed
Dump
Bootstrap базы
Backend
DB load dump
migrations
DB migrations
seed
Seed
Dump
Bootstrap базы
Backend
DB load dump
migrations Backend
DB migrations
seed
Seed
Dump
Bootstrap базы
Backend
DB load dump
migrations Backend
DB migrations
seed
Seed
Скорость bootstrap’а
Занимаемое место Полезность Сложность
реализации
Пустая база только структура 5 sec
Seed/fixtures из текущего бранча 1 min
Ночной дамп с seeds/fixtures из master 10 sec
Дамп “для staging” 1 hour
Ночной дамп “для staging” 30 sec
Дамп с production 30 min
Ночной дамп с production 1 min
Скорость bootstrap’а
Занимаемое место Полезность Сложность
реализации
Пустая база только структура
Seed/fixtures из текущего бранча
Ночной дамп с seeds/fixtures из master 10 sec
Дамп “для staging”
Ночной дамп “для staging” 30 sec
Дамп с production
Ночной дамп с production
Deploy
Bootstrap базы
Load: Seeds
Load: Nightly staging dump
Build
Build Deploy
Load: Nightly seeds (from master)
Выкат действительно без простоя
5/8
Выкат действительно без простоя
Выкат действительно без простоя
example.com
Выкат действительно без простоя
example.com
Выкат действительно без простоя
example.com
Выкат действительно без простоя
example.com Graceful shutdown
Выкат действительно без простоя
Graceful shutdownexample.com
Выкат действительно без простоя
Graceful shutdownexample.com
Выкат действительно без простоя
Graceful shutdownexample.com
Выкат действительно без простоя
Graceful shutdownexample.com
Выкат действительно без простоя
Graceful shutdownexample.com
Readiness probe
Выкат действительно без простоя
Graceful shutdownexample.com
Readiness probe
Проверьте (чем угодно)
Выкат действительно без простоя
Graceful shutdownexample.com
Readiness probe
Проверьте (чем угодно)
Правильный размер pod-а и политика обновления
Атомарность выката
6/8
Атомарность выката
Атомарность выката
Environments
production = v0.7.14
Атомарность выката
Environments
production = v0.7.14
backend3
memcached
3cron-foo
cron-bar
cron-baz
Redis3
BackgroundJobs
3
Sphinx2
DB3
Атомарность выката
Environments
production = v0.7.14
backend3
memcached
3cron-foo
cron-bar
cron-baz
Redis3
BackgroundJobs
3
Sphinx2
DB3
:v0.7.14
:v0.7.14
:v0.7.14
:v0.7.14
Атомарность выката
backend3
memcached
3cron-foo
cron-bar
cron-baz
Redis3
BackgroundJobs
3
Sphinx2
DB3
Environments
Pipelines
v0.8.15
:v0.7.14
:v0.7.14
:v0.7.14
:v0.7.14
production = v0.7.14
Атомарность выката
Deploy
backend3
memcached
3cron-foo
cron-bar
cron-baz
Redis3
BackgroundJobs
3
Sphinx2
DB3
Environments
Pipelines
v0.8.15
:v0.7.14
:v0.7.14
:v0.7.14
:v0.7.14
production = v0.7.14
Атомарность выката
Deploy
backend3
memcached
3cron-foo
cron-bar
cron-baz
Redis3
BackgroundJobs
3
Sphinx2
DB3
Environments
Pipelines
v0.8.15
:v0.7.14
:v0.7.14
:v0.7.14
:v0.7.14
production = v0.7.14
Атомарность выката
Deploy
backend3
memcached
3cron-foo
cron-bar
cron-baz
Redis3
BackgroundJobs
3
Sphinx2
DB3
Environments
Pipelines
v0.8.15
:v0.7.14
:v0.7.14
:v0.7.14
:v0.7.14
production = v0.7.14
Атомарность выката
Deploy
backend3
memcached
3cron-foo
cron-bar
cron-baz
Redis3
BackgroundJobs
3
Sphinx2
DB3
Environments
Pipelines
v0.8.15
:v0.7.14
:v0.7.14
:v0.7.14
:v0.7.14
production = v0.7.14
:v0.7.15
Deploy
memcached
3
Redis3
DB3
Environments
Pipelines
v0.8.15
production = v0.7.14
cron-foo
cron-bar
cron-baz
BackgroundJobs
3
Sphinx2
backend3
:v0.7.14
:v0.7.14
:v0.7.14
:v0.7.14
Атомарность выката
:v0.7.15
Deploy
memcached
3
Redis3
DB3
Environments
Pipelines
v0.8.15
production = v0.7.14
cron-foo
cron-bar
cron-baz
BackgroundJobs
3
Sphinx2
backend3
:v0.7.14
:v0.7.14
:v0.7.14
Атомарность выката
:v0.8.15
:v0.7.15
Deploy
memcached
3
Redis3
DB3
Environments
Pipelines
v0.8.15
production = v0.7.14
cron-foo
cron-bar
cron-baz
BackgroundJobs
3
Sphinx2
backend3
:v0.7.14
-> 0.8.
15
:v0.7.14
-> 0.8.
15
:v0.7.14
-> 0.8.
15
:v0.8.15
Атомарность выката
:v0.7.15
Deploy
memcached
3
Redis3
DB3
Environments
Pipelines
v0.8.15
production = v0.7.14
cron-foo
cron-bar
cron-baz
BackgroundJobs
3
Sphinx2
backend3
:v0.8.15
Атомарность выката
:v0.7.14
-> 0.8.
15
:v0.8.15
:v0.8.15
:v0.7.15
Deploy
memcached
3
Redis3
DB3
Environments
Pipelines
v0.8.15
production = v0.7.14
cron-foo
cron-bar
cron-baz
BackgroundJobs
3
Sphinx2
backend3
:v0.7.14
-> 0.8.
15
:v0.8.15
Атомарность выката
:v0.8.15
:v0.8.15
:v0.7.15
Deploy
memcached
3
Redis3
DB3
Environments
Pipelines
v0.8.15
production = v0.7.14
cron-foo
cron-bar
cron-baz
BackgroundJobs
3
Sphinx2
backend3
:v0.7.14
-> 0.8.
15
:v0.8.15
Атомарность выката
ошибка
:v0.8.15
:v0.8.15
:v0.7.15
Deploy
memcached
3
Redis3
DB3
Environments
Pipelines
v0.8.15
production = v0.7.14
cron-foo
cron-bar
cron-baz
BackgroundJobs
3
Sphinx2
backend3
:v0.7.14
-> 0.8.
15
:v0.8.15
Атомарность выката
ошибка
:v0.8.15
:v0.8.15
:v0.7.15
Deploy
memcached
3
Redis3
DB3
Environments
Pipelines
v0.8.15
production = v0.7.14
cron-foo
cron-bar
cron-baz
BackgroundJobs
3
Sphinx2
backend3
:v0.7.14
-> 0.8.
15
:v0.8.15
Атомарность выката
ошибка
:v0.8.15
:v0.8.15
✖
Deployошибка
:v0.7.15
memcached
3
Redis3
DB3
cron-foo
cron-bar
cron-baz
BackgroundJobs
3
Sphinx2
backend
Pipelines
v0.8.15 ✖
Environments3
Атомарность выката
production = v0.7.14
:v0.7.14
-> 0.8.
15
:v0.8.15
:v0.8.15
:v0.8.15
:v0.7.15
Deploy
memcached
3
Redis3
DB3
Environments
Pipelines
v0.8.15
production = v0.7.14
cron-foo
cron-bar
cron-baz
BackgroundJobs
3
Sphinx2
backend3
:v0.7.14
-> 0.8.
15
:v0.8.15
Атомарность выката
ошибка
:v0.8.15
:v0.8.15
✖
Динамические окружения
7/8
Динамические окружения
Ingress Controller
Динамические окружения*.review.example.com
Ingress Controller
Динамические окружения*.review.example.com
Ingress Controller
git
Динамические окружения*.review.example.com
Ingress Controller
git
feat
ure-
x
***.php
Динамические окружения*.review.example.com
Ingress Controller
git
feat
ure-
x
***.php
namespace: feature-x
Динамические окружения*.review.example.com
Ingress Controller
git
feat
ure-
x
***.php
namespace: feature-x
feature-x.review.example.com
Динамические окружения*.review.example.com
Ingress Controller
git
feat
ure-
x
***.php
namespace: feature-x
feature-x.review.example.com
abc ***.php
Динамические окружения*.review.example.com
Ingress Controller
git
feat
ure-
x
***.php
namespace: feature-x
feature-x.review.example.com
abc ***.php
abc.review.example.com
namespace: abc
Динамические окружения*.review.example.com
Ingress Controller
git
feat
ure-
x
***.php
namespace: feature-x
feature-x.review.example.com
abc ***.php
abc.review.example.com
namespace: abcfeat
ure-
foo
***.php
Динамические окружения*.review.example.com
Ingress Controller
feature-x.review.example.com
namespace: feature-x
abc.review.example.com
namespace: abc
feature-foo.review.example.com
namespace: feature-foo
git
feat
ure-
xab
cfe
atur
e-fo
o
***.php
***.php
***.php
Динамические окружения*.review.example.com
Ingress Controller
feature-x.review.example.com
namespace: feature-x
feature-foo.review.example.com
namespace: feature-foo
git
feat
ure-
xfe
atur
e-fo
o
***.php
***.php
abc.review.example.com
namespace: abc
Динамические окружения*.review.example.com
Ingress Controller
feature-x.review.example.com
namespace: feature-x
feature-foo.review.example.com
namespace: feature-foo
git
feat
ure-
xfe
atur
e-fo
o
***.php
***.php
Динамические окружения*.review.example.com
Ingress Controller
feature-x.review.example.com
namespace: feature-x
feature-foo.review.example.com
namespace: feature-foo
git
feat
ure-
foo
***.php
Динамические окружения*.review.example.com
Ingress Controller
feature-foo.review.example.com
namespace: feature-foo
git
feat
ure-
foo
***.php
Отображение
branch: new-interface
Динамические окруженияод
ин п
роек
т
Отображение
branch: new-interface
Динамические окруженияод
ин п
роек
т
namespace: new-interface
new-interface.review.example.com
Отображение
branch: new-interface
Динамические окруженияод
ин п
роек
т
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один
про
ект
+ SL
UG
Отображение
branch: new-interface
Динамические окруженияод
ин п
роек
т
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один
про
ект
+ SL
UG namespace: feature-llll-dfjre3
feature-llll-dfjre3.review.example.com
Отображение
branch: new-interface
Динамические окруженияод
ин п
роек
т
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один
про
ект
+ SL
UG namespace: feature-llll-dfjre3
feature-llll-dfjre3.review.example.com
неск
ольк
опр
оект
ов
Отображение
branch: new-interface
Динамические окруженияод
ин п
роек
т
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один
про
ект
+ SL
UG namespace: feature-llll-dfjre3
feature-llll-dfjre3.review.example.com
неск
ольк
опр
оект
ов project: gimli
branch: bar
Отображение
branch: new-interface
Динамические окруженияод
ин п
роек
т
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один
про
ект
+ SL
UG namespace: feature-llll-dfjre3
feature-llll-dfjre3.review.example.com
неск
ольк
опр
оект
ов namespace: gimli-barproject: gimli
gimli-bar.review.example.combranch: bar
Отображение
branch: new-interface
Динамические окруженияод
ин п
роек
т
namespace: new-interface
new-interface.review.example.com
branch: feature/LLLL___#1342
один
про
ект
+ SL
UG namespace: feature-llll-dfjre3
feature-llll-dfjre3.review.example.com
неск
ольк
опр
оект
ов namespace: gimli-barproject: gimli
gimli-bar.review.example.combranch: bar
Несколько советовДинамические окружения
Минимизировать использование ресурсов
Несколько советовДинамические окружения
Минимизировать использование ресурсов
Целиком в Kubernetes (включая все СУБД)
Несколько советовДинамические окружения
Минимизировать использование ресурсов
Целиком в Kubernetes (включая все СУБД)
Ограничить публичный доступ
Несколько советовДинамические окружения
Минимизировать использование ресурсов
Целиком в Kubernetes (включая все СУБД)
Ограничить публичный доступ
Как-то ограничивать разработчиков
Несколько советовДинамические окружения
Минимизировать использование ресурсов
Целиком в Kubernetes (включая все СУБД)
Ограничить публичный доступ
Как-то ограничивать разработчиков
Deploy (auto)
Load: Seeds
Load: Nightly staging dump
Build
Build Deploy
Load: Nightly seeds (from master)
Динамические окружения
Deploy (auto)
Load: Seeds
Load: Nightly staging dump
Build
Build Deploy
Load: Nightly seeds (from master)
Stop environment
Динамические окружения
Тесты
8/8
Тесты / Анализ кода build test release
Тесты / Анализ кода build test release
run tests
Тесты / Тесты без окружения (Unit) build test release
Тесты / Тесты без окружения (Unit) build test release
Dockerfile
docker build
Docker-image
Тесты / Тесты без окружения (Unit) build test release
docker build
Docker-imageDockerfile
docker run
Docker-image
+
Тесты / В окружении (Function, Integration)
build test release
Тесты / В окружении (Function, Integration)
build test release
Dockerfile
Тесты / В окружении (Function, Integration)
build test release
Dockerfile
docker build
Docker-image
Тесты / В окружении (Function, Integration)
build test release
Dockerfile
docker build
Docker-image
Dockerregistry
Тесты / В окружении (Function, Integration)
build test release
Dockerfile
docker build
Docker-image
Dockerregistry
.helm
Тесты / В окружении (Function, Integration)
build test release
Dockerfile
docker build
Docker-image
Dockerregistry
.helm
helm install
Тесты / В окружении (Function, Integration)
build test release
helm install
docker build
Docker-image
Job
Dockerregistry
namespace: test-abc
Dockerfile
.helm
Тесты / В окружении (Function, Integration)
build test release
helm install
docker build
Docker-image
helm delete --purge
Job
Dockerregistry
namespace: test-abc
Dockerfile
.helm
Конец
Kubernetes + Helm + Gitlab
Kubernetes + Helm+ Gitlab
Флант
24×7×365 L1/L2/L3/+ DevOps SLA
30+
24×7×365 L1/L2/L3/+ DevOps SLA
30+
… и по доступной цене
Наши 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
git operate
Dockerfile
.helm
backend.yaml
frontend.yaml
cron.yaml
docker build
Docker-image
Docker-image
+
.gitlab-ci.yaml
tests
Dockerregistry
build test release
helm install