Slide 1

Slide 1 text

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

Slide 41

Slide 41 text

Какой CI/CD бывает? Факторы / Архитектура приложения Stateless приложение Stateful приложение

Slide 42

Slide 42 text

Какой CI/CD бывает? Факторы / Архитектура приложения Stateless приложение Stateful приложение Многокомпонентное приложение

Slide 43

Slide 43 text

Какой CI/CD бывает? Факторы / Архитектура приложения Stateless приложение Stateful приложение Многокомпонентное приложение Микросервисная архитектура

Slide 44

Slide 44 text

Какой CI/CD бывает? Факторы / Архитектура приложения Stateless приложение Stateful приложение Многокомпонентное приложение Микросервисная архитектура

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

git + shell

Slide 47

Slide 47 text

Docker

Slide 48

Slide 48 text

Kubernetes + Helm

Slide 49

Slide 49 text

Kubernetes + Helm + Gitlab

Slide 50

Slide 50 text

Kubernetes + Helm + Gitlab Enterprise

Slide 51

Slide 51 text

Какой CI/CD бывает? Дополнительные требования

Slide 52

Slide 52 text

Какой 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 Разномасштабность Интероперабельность Простота эксплуатации Будущее

Slide 62

Slide 62 text

Инструменты

Slide 63

Slide 63 text

Инструменты Kubernetes

Slide 64

Slide 64 text

Инструменты Kubernetes «Чёрный ящик» YAML Declarative DSL

Slide 65

Slide 65 text

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 77

Slide 77 text

git operate build test release .gitlab-ci.yaml Dockerfile docker build Docker- image

Slide 78

Slide 78 text

git operate build test release .gitlab-ci.yaml Dockerfile docker build Docker- image Docker registry

Slide 79

Slide 79 text

git operate build test release .gitlab-ci.yaml Dockerfile docker build Docker- image Docker registry

Slide 80

Slide 80 text

git operate build test release .gitlab-ci.yaml Dockerfile docker build Docker- image Docker- image + tests Docker registry

Slide 81

Slide 81 text

git operate build test release .gitlab-ci.yaml Dockerfile docker build Docker- image Docker- image + tests Docker registry .helm backend.yaml frontend.yaml cron.yaml

Slide 82

Slide 82 text

git operate build test release .gitlab-ci.yaml Dockerfile docker build Docker- image Docker- image + tests Docker registry .helm backend.yaml frontend.yaml cron.yaml helm install

Slide 83

Slide 83 text

git operate build test release .gitlab-ci.yaml Dockerfile docker build Docker- image Docker- image + tests Docker registry .helm backend.yaml frontend.yaml cron.yaml helm install

Slide 84

Slide 84 text

git operate Dockerfile .helm backend.yaml frontend.yaml cron.yaml docker build Docker- image Docker- image + .gitlab-ci.yaml tests Docker registry build test release helm install

Slide 85

Slide 85 text

.helm git operate backend.yaml frontend.yaml cron.yaml Docker- image Docker- image + .gitlab-ci.yaml tests Docker registry build test release Dockerfile docker build helm install

Slide 86

Slide 86 text

.helm git operate backend.yaml frontend.yaml cron.yaml Docker- image Docker- image + .gitlab-ci.yaml tests Docker registry build test release docker build helm install Dappfile

Slide 87

Slide 87 text

.helm git operate backend.yaml frontend.yaml cron.yaml Docker- image Docker- image + .gitlab-ci.yaml tests Docker registry build test release Dappfile dapp build helm install

Slide 88

Slide 88 text

.helm git operate backend.yaml frontend.yaml cron.yaml Docker- image Docker- image + .gitlab-ci.yaml tests Docker registry build test release Dappfile dapp build dapp kube deploy

Slide 89

Slide 89 text

.helm git operate backend.yaml frontend.yaml cron.yaml Docker- image Docker- image + .gitlab-ci.yaml tests Docker registry build test release Dappfile dapp build dapp kube deploy

Slide 90

Slide 90 text

Демо на нашем стенде Приходите в любое время, мы будем показывать, как вся эта связка работает в деталях и с примерами. И будем отвечать на любые ваши вопросы.

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

Slide 194

Slide 194 text

Deploy Bootstrap базы Load: Seeds Load: Nightly staging dump Build Build Deploy Load: Nightly seeds (from master)

Slide 195

Slide 195 text

Выкат действительно без простоя 5/8

Slide 196

Slide 196 text

Выкат действительно без простоя

Slide 197

Slide 197 text

Выкат действительно без простоя example.com

Slide 198

Slide 198 text

Выкат действительно без простоя example.com

Slide 199

Slide 199 text

Выкат действительно без простоя example.com

Slide 200

Slide 200 text

Выкат действительно без простоя example.com Graceful shutdown

Slide 201

Slide 201 text

Выкат действительно без простоя Graceful shutdown example.com

Slide 202

Slide 202 text

Выкат действительно без простоя Graceful shutdown example.com

Slide 203

Slide 203 text

Выкат действительно без простоя Graceful shutdown example.com

Slide 204

Slide 204 text

Выкат действительно без простоя Graceful shutdown example.com

Slide 205

Slide 205 text

Выкат действительно без простоя Graceful shutdown example.com Readiness probe

Slide 206

Slide 206 text

Выкат действительно без простоя Graceful shutdown example.com Readiness probe Проверьте (чем угодно)

Slide 207

Slide 207 text

Выкат действительно без простоя Graceful shutdown example.com Readiness probe Проверьте (чем угодно) Правильный размер pod-а и политика обновления

Slide 208

Slide 208 text

Атомарность выката 6/8

Slide 209

Slide 209 text

Атомарность выката

Slide 210

Slide 210 text

Атомарность выката Environments production = v0.7.14

Slide 211

Slide 211 text

Атомарность выката Environments production = v0.7.14 backend 3 memcached 3 cron-foo cron-bar cron-baz Redis 3 Background Jobs 3 Sphinx 2 DB 3

Slide 212

Slide 212 text

Атомарность выката Environments production = v0.7.14 backend 3 memcached 3 cron-foo cron-bar cron-baz Redis 3 Background Jobs 3 Sphinx 2 DB 3 :v0.7.14 :v0.7.14 :v0.7.14 :v0.7.14

Slide 213

Slide 213 text

Атомарность выката backend 3 memcached 3 cron-foo cron-bar cron-baz Redis 3 Background Jobs 3 Sphinx 2 DB 3 Environments Pipelines v0.8.15 :v0.7.14 :v0.7.14 :v0.7.14 :v0.7.14 production = v0.7.14

Slide 214

Slide 214 text

Атомарность выката Deploy backend 3 memcached 3 cron-foo cron-bar cron-baz Redis 3 Background Jobs 3 Sphinx 2 DB 3 Environments Pipelines v0.8.15 :v0.7.14 :v0.7.14 :v0.7.14 :v0.7.14 production = v0.7.14

Slide 215

Slide 215 text

Атомарность выката Deploy backend 3 memcached 3 cron-foo cron-bar cron-baz Redis 3 Background Jobs 3 Sphinx 2 DB 3 Environments Pipelines v0.8.15 :v0.7.14 :v0.7.14 :v0.7.14 :v0.7.14 production = v0.7.14

Slide 216

Slide 216 text

Атомарность выката Deploy backend 3 memcached 3 cron-foo cron-bar cron-baz Redis 3 Background Jobs 3 Sphinx 2 DB 3 Environments Pipelines v0.8.15 :v0.7.14 :v0.7.14 :v0.7.14 :v0.7.14 production = v0.7.14

Slide 217

Slide 217 text

Атомарность выката Deploy backend 3 memcached 3 cron-foo cron-bar cron-baz Redis 3 Background Jobs 3 Sphinx 2 DB 3 Environments Pipelines v0.8.15 :v0.7.14 :v0.7.14 :v0.7.14 :v0.7.14 production = v0.7.14

Slide 218

Slide 218 text

:v0.7.15 Deploy memcached 3 Redis 3 DB 3 Environments Pipelines v0.8.15 production = v0.7.14 cron-foo cron-bar cron-baz Background Jobs 3 Sphinx 2 backend 3 :v0.7.14 :v0.7.14 :v0.7.14 :v0.7.14 Атомарность выката

Slide 219

Slide 219 text

:v0.7.15 Deploy memcached 3 Redis 3 DB 3 Environments Pipelines v0.8.15 production = v0.7.14 cron-foo cron-bar cron-baz Background Jobs 3 Sphinx 2 backend 3 :v0.7.14 :v0.7.14 :v0.7.14 Атомарность выката :v0.8.15

Slide 220

Slide 220 text

:v0.7.15 Deploy memcached 3 Redis 3 DB 3 Environments Pipelines v0.8.15 production = v0.7.14 cron-foo cron-bar cron-baz Background Jobs 3 Sphinx 2 backend 3 :v0.7.14 -> 0.8.15 :v0.7.14 -> 0.8.15 :v0.7.14 -> 0.8.15 :v0.8.15 Атомарность выката

Slide 221

Slide 221 text

:v0.7.15 Deploy memcached 3 Redis 3 DB 3 Environments Pipelines v0.8.15 production = v0.7.14 cron-foo cron-bar cron-baz Background Jobs 3 Sphinx 2 backend 3 :v0.8.15 Атомарность выката :v0.7.14 -> 0.8.15 :v0.8.15 :v0.8.15

Slide 222

Slide 222 text

:v0.7.15 Deploy memcached 3 Redis 3 DB 3 Environments Pipelines v0.8.15 production = v0.7.14 cron-foo cron-bar cron-baz Background Jobs 3 Sphinx 2 backend 3 :v0.7.14 -> 0.8.15 :v0.8.15 Атомарность выката :v0.8.15 :v0.8.15

Slide 223

Slide 223 text

:v0.7.15 Deploy memcached 3 Redis 3 DB 3 Environments Pipelines v0.8.15 production = v0.7.14 cron-foo cron-bar cron-baz Background Jobs 3 Sphinx 2 backend 3 :v0.7.14 -> 0.8.15 :v0.8.15 Атомарность выката ошибка :v0.8.15 :v0.8.15

Slide 224

Slide 224 text

:v0.7.15 Deploy memcached 3 Redis 3 DB 3 Environments Pipelines v0.8.15 production = v0.7.14 cron-foo cron-bar cron-baz Background Jobs 3 Sphinx 2 backend 3 :v0.7.14 -> 0.8.15 :v0.8.15 Атомарность выката ошибка :v0.8.15 :v0.8.15

Slide 225

Slide 225 text

:v0.7.15 Deploy memcached 3 Redis 3 DB 3 Environments Pipelines v0.8.15 production = v0.7.14 cron-foo cron-bar cron-baz Background Jobs 3 Sphinx 2 backend 3 :v0.7.14 -> 0.8.15 :v0.8.15 Атомарность выката ошибка :v0.8.15 :v0.8.15 ✖

Slide 226

Slide 226 text

Deploy ошибка :v0.7.15 memcached 3 Redis 3 DB 3 cron-foo cron-bar cron-baz Background Jobs 3 Sphinx 2 backend Pipelines v0.8.15 ✖ Environments 3 Атомарность выката production = v0.7.14 :v0.7.14 -> 0.8.15 :v0.8.15 :v0.8.15 :v0.8.15

Slide 227

Slide 227 text

:v0.7.15 Deploy memcached 3 Redis 3 DB 3 Environments Pipelines v0.8.15 production = v0.7.14 cron-foo cron-bar cron-baz Background Jobs 3 Sphinx 2 backend 3 :v0.7.14 -> 0.8.15 :v0.8.15 Атомарность выката ошибка :v0.8.15 :v0.8.15 ✖

Slide 228

Slide 228 text

Динамические окружения 7/8

Slide 229

Slide 229 text

Динамические окружения Ingress Controller

Slide 230

Slide 230 text

Динамические окружения *.review.example.com Ingress Controller

Slide 231

Slide 231 text

Динамические окружения *.review.example.com Ingress Controller git

Slide 232

Slide 232 text

Динамические окружения *.review.example.com Ingress Controller git feature-x ***.php

Slide 233

Slide 233 text

Динамические окружения *.review.example.com Ingress Controller git feature-x ***.php namespace: feature-x

Slide 234

Slide 234 text

Динамические окружения *.review.example.com Ingress Controller git feature-x ***.php namespace: feature-x feature-x.review.example.com

Slide 235

Slide 235 text

Динамические окружения *.review.example.com Ingress Controller git feature-x ***.php namespace: feature-x feature-x.review.example.com abc ***.php

Slide 236

Slide 236 text

Динамические окружения *.review.example.com Ingress Controller git feature-x ***.php namespace: feature-x feature-x.review.example.com abc ***.php abc.review.example.com namespace: abc

Slide 237

Slide 237 text

Динамические окружения *.review.example.com Ingress Controller git feature-x ***.php namespace: feature-x feature-x.review.example.com abc ***.php abc.review.example.com namespace: abc feature-foo ***.php

Slide 238

Slide 238 text

Динамические окружения *.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 feature-x abc feature-foo ***.php ***.php ***.php

Slide 239

Slide 239 text

Динамические окружения *.review.example.com Ingress Controller feature-x.review.example.com namespace: feature-x feature-foo.review.example.com namespace: feature-foo git feature-x feature-foo ***.php ***.php abc.review.example.com namespace: abc

Slide 240

Slide 240 text

Динамические окружения *.review.example.com Ingress Controller feature-x.review.example.com namespace: feature-x feature-foo.review.example.com namespace: feature-foo git feature-x feature-foo ***.php ***.php

Slide 241

Slide 241 text

Динамические окружения *.review.example.com Ingress Controller feature-x.review.example.com namespace: feature-x feature-foo.review.example.com namespace: feature-foo git feature-foo ***.php

Slide 242

Slide 242 text

Динамические окружения *.review.example.com Ingress Controller feature-foo.review.example.com namespace: feature-foo git feature-foo ***.php

Slide 243

Slide 243 text

Отображение 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 (включая все СУБД) Ограничить публичный доступ Как-то ограничивать разработчиков

Slide 256

Slide 256 text

Deploy (auto) Load: Seeds Load: Nightly staging dump Build Build Deploy Load: Nightly seeds (from master) Динамические окружения

Slide 257

Slide 257 text

Deploy (auto) Load: Seeds Load: Nightly staging dump Build Build Deploy Load: Nightly seeds (from master) Stop environment Динамические окружения

Slide 258

Slide 258 text

Тесты 8/8

Slide 259

Slide 259 text

Тесты / Анализ кода build test

Slide 260

Slide 260 text

Тесты / Анализ кода build test run tests

Slide 261

Slide 261 text

Тесты / Тесты без окружения (Unit) build test

Slide 262

Slide 262 text

Тесты / Тесты без окружения (Unit) build test Dockerfile docker build Docker- image

Slide 263

Slide 263 text

Тесты / Тесты без окружения (Unit) build test docker build Docker- image Dockerfile docker run Docker- image +

Slide 264

Slide 264 text

Тесты / В окружении (Function, Integration) build test

Slide 265

Slide 265 text

Тесты / В окружении (Function, Integration) build test Dockerfile

Slide 266

Slide 266 text

Тесты / В окружении (Function, Integration) build test Dockerfile docker build Docker- image

Slide 267

Slide 267 text

Тесты / В окружении (Function, Integration) build test Dockerfile docker build Docker- image Docker registry

Slide 268

Slide 268 text

Тесты / В окружении (Function, Integration) build test Dockerfile docker build Docker- image Docker registry .helm

Slide 269

Slide 269 text

Тесты / В окружении (Function, Integration) build test Dockerfile docker build Docker- image Docker registry .helm helm install

Slide 270

Slide 270 text

Тесты / В окружении (Function, Integration) build test helm install docker build Docker- image Job Docker registry namespace: test-abc Dockerfile .helm

Slide 271

Slide 271 text

Тесты / В окружении (Function, Integration) build test helm install docker build Docker- image helm delete --purge Job Docker registry namespace: test-abc Dockerfile .helm

Slide 272

Slide 272 text

Конец

Slide 273

Slide 273 text

Kubernetes + Helm + Gitlab

Slide 274

Slide 274 text

Kubernetes + Helm + Gitlab Флант

Slide 275

Slide 275 text

24×7×365 L1/L2/L3/+ DevOps SLA 30+

Slide 276

Slide 276 text

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

Slide 278

Slide 278 text

git operate Dockerfile .helm backend.yaml frontend.yaml cron.yaml docker build Docker- image Docker- image + .gitlab-ci.yaml tests Docker registry build test release helm install