Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров...

Preview:

Citation preview

Дмитрий Столяров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

Дмитрий Столяров dmitry.stolyarov@flant.ru

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

Recommended