Лучшие практики CI/CD с Kubernetes и GitLab

93aef1d166a8a3536538eff713f80307?s=47 flant
November 07, 2017

Лучшие практики CI/CD с Kubernetes и GitLab

Доклад технического директора компании «Флант» (http://flant.ru/) Дмитрия Столярова на HighLoad++ 2017 про выстраивание процессов CI/CD в GitLab CI на базе инфраструктуры с Kubernetes.

* Текстовый обзор доклада: https://habr.com/company/flant/blog/345116/
* Видео с выступления: https://www.youtube.com/watch?v=G3nELxmECd8
* Анонс доклада на сайте конференции: http://www.highload.ru/2017/abstracts/3073

93aef1d166a8a3536538eff713f80307?s=128

flant

November 07, 2017
Tweet

Transcript

  1. Дмитрий Столяров CTO & Co-founder v1 Лучшие практики CI/CD с

    Kubernetes и GitLab
  2. Лучшие практики Continuous Delivery с Docker RootConf 2016 Собираем Docker-

    образы быстро и удобно Highload 2016 Наш опыт с Kubernetes в небольших проектах RootConf 2017 Лучшие практики CI/CD с Kubernetes и GitLab Highload 2017 ВЫ ЗДЕСЬ youtube.com/c/flant
  3. Опыт

  4. приложений уже в production 120 готово, скоро в production +19

    в работе +20 Опыт до конца года +22 приложение! =181 по состоянию на 4 ноября 2017
  5. проект в kubernetes приложений уже в production 21 до конца

    года +4 ждем ваш проект +? 120 готово, скоро в production +19 в работе +20 до конца года +22 приложение! =181 Опыт по состоянию на 4 ноября 2017
  6. Язык 100 Node.js 47 PHP 18 Ruby 10 Python 10

    JavaScript 4 Go 4 C# 2 Scala 2 Elixir 1 Java по состоянию на 4 ноября 2017
  7. Язык 100 Node.js 47 PHP 18 Ruby 10 Python 10

    JavaScript 4 Go 4 C# 2 Scala 2 Elixir 1 Java Фреймворк 17 Yii 12 Rails 7 Django 7 Laravel 4 Socket.IO 4 .NET Core 3 Bitrix 2 Meteor.JS 6 Другие по состоянию на 4 ноября 2017
  8. Язык 100 Node.js 47 PHP 18 Ruby 10 Python 10

    JavaScript 4 Go 4 C# 2 Scala 2 Elixir 1 Java Фреймворк 17 Yii 12 Rails 7 Django 7 Lavarel 4 Socket.IO 4 .NET Core 3 Bitrix 2 Meteor.JS 6 Другие Package Manager 96 npm 32 Composer 27 Yarn 19 Bundler 7 pip 2 sbt 2 .NET Core 2 hex 2 Другие по состоянию на 4 ноября 2017
  9. Язык 100 Node.js 47 PHP 18 Ruby 10 Python 10

    JavaScript 4 Go 4 C# 2 Scala 2 Elixir 1 Java Фреймворк 17 Yii 12 Rails 7 Django 7 Lavarel 4 Socket.IO 4 .NET Core 3 Bitrix 2 Meteor.JS 6 Другие Package Manager 96 npm 32 Composer 27 Yarn 19 Bundler 7 pip 2 sbt 2 .NET Core 2 hex 2 Другие по состоянию на 4 ноября 2017 DBMS 40 PostgreSQL 39 MySQL 27 MongoDB 2 Cassandra 3 Другие
  10. Язык 100 Node.js 47 PHP 18 Ruby 10 Python 10

    JavaScript 4 Go 4 C# 2 Scala 2 Elixir 1 Java Фреймворк 17 Yii 12 Rails 7 Django 7 Lavarel 4 Socket.IO 4 .NET Core 3 Bitrix 2 Meteor.JS 6 Другие Package Manager 96 npm 32 Composer 27 Yarn 19 Bundler 7 pip 2 sbt 2 .NET Core 2 hex 2 Другие по состоянию на 4 ноября 2017 DBMS 40 PostgreSQL 39 MySQL 27 MongoDB 2 Cassandra 3 Другие In-memory store 43 Redis 24 Memcahed
  11. Язык 100 Node.js 47 PHP 18 Ruby 10 Python 10

    JavaScript 4 Go 4 C# 2 Scala 2 Elixir 1 Java Фреймворк 17 Yii 12 Rails 7 Django 7 Lavarel 4 Socket.IO 4 .NET Core 3 Bitrix 2 Meteor.JS 6 Другие Package Manager 96 npm 32 Composer 27 Yarn 19 Bundler 7 pip 2 sbt 2 .NET Core 2 hex 2 Другие по состоянию на 4 ноября 2017 DBMS 40 PostgreSQL 39 MySQL 27 MongoDB 2 Cassandra 3 Другие In-memory store 43 Redis 24 Memcahed Queue 37 RabbitMQ 15 Redis 8 Nats 2 PGQ 1 Kafka
  12. Язык 100 Node.js 47 PHP 18 Ruby 10 Python 10

    JavaScript 4 Go 4 C# 2 Scala 2 Elixir 1 Java Фреймворк 17 Yii 12 Rails 7 Django 7 Lavarel 4 Socket.IO 4 .NET Core 3 Bitrix 2 Meteor.JS 6 Другие Package Manager 96 npm 32 Composer 27 Yarn 19 Bundler 7 pip 2 sbt 2 .NET Core 2 hex 2 Другие по состоянию на 4 ноября 2017 DBMS 40 PostgreSQL 39 MySQL 27 MongoDB 2 Cassandra 3 Другие In-memory store 43 Redis 24 Memcahed Queue 37 RabbitMQ 15 Redis 8 Nats 2 PGQ 1 Kafka Search 30 Elasticsearch 12 Sphinx
  13. Язык 100 Node.js 47 PHP 18 Ruby 10 Python 10

    JavaScript 4 Go 4 C# 2 Scala 2 Elixir 1 Java Фреймворк 17 Yii 12 Rails 7 Django 7 Lavarel 4 Socket.IO 4 .NET Core 3 Bitrix 2 Meteor.JS 6 Другие Package Manager 96 npm 32 Composer 27 Yarn 19 Bundler 7 pip 2 sbt 2 .NET Core 2 hex 2 Другие DBMS 40 PostgreSQL 39 MySQL 27 MongoDB 2 Cassandra 3 Другие Queue 37 RabbitMQ 15 Redis 8 Nats 2 PGQ 1 Kafka Search 30 Elasticsearch 12 Sphinx In-memory store 43 Redis 24 Memcahed по состоянию на 4 ноября 2017
  14. Язык 100 Node.js 47 PHP 18 Ruby 10 Python 10

    JavaScript 4 Go 4 C# 2 Scala 2 Elixir 1 Java Фреймворк 17 Yii 12 Rails 7 Django 7 Lavarel 4 Socket.IO 4 .NET Core 3 Bitrix 2 Meteor.JS 6 Другие Package Manager 96 npm 32 Composer 27 Yarn 19 Bundler 7 pip 2 sbt 2 .NET Core 2 hex 2 Другие DBMS 40 PostgreSQL 39 MySQL 27 MongoDB 2 Cassandra 3 Другие Queue 37 RabbitMQ 15 Redis 8 Nats 2 PGQ 1 Kafka Search 30 Elasticsearch 12 Sphinx In-memory store 43 Redis 24 Memcahed по состоянию на 4 ноября 2017 команд 30+ клиентов 25 приложение 181
  15. Что же такое CI/CD? git build test release operate

  16. Что же такое CI/CD? git build test release operate Continuous

    Intergation? Continuous Deployment? Continuous Delivery?
  17. Что же такое CI/CD? git build test release operate Continuous

    Intergation? ОНО РАБОТАЕТ Continuous Deployment? Continuous Delivery?
  18. Что же такое CI/CD? git build test release operate

  19. Что же такое CI/CD? git build test release operate

  20. Какой CI/CD бывает? Факторы, влияющие на сложность Основной процесс Тестирование

    Разделение прав доступа Архитектура приложения
  21. Какой CI/CD бывает? Факторы / Основной процесс

  22. Какой CI/CD бывает? Факторы / Основной процесс Одно окружение

  23. Какой CI/CD бывает? Факторы / Основной процесс Одно окружение Несколько

    окружений
  24. Какой CI/CD бывает? Факторы / Основной процесс Одно окружение Несколько

    окружений Динамические окружения
  25. Какой CI/CD бывает? Факторы / Основной процесс Одно окружение Несколько

    окружений Динамические окружения Несколько площадок
  26. Какой CI/CD бывает? Факторы / Основной процесс Одно окружение Несколько

    окружений Динамические окружения Несколько площадок
  27. Какой CI/CD бывает? Факторы / Тестирование

  28. Какой CI/CD бывает? Факторы / Тестирование Анализ кода

  29. Какой CI/CD бывает? Факторы / Тестирование Анализ кода Тесты без

    окружения Unit
  30. Какой CI/CD бывает? Факторы / Тестирование Анализ кода Тесты без

    окружения Тесты в окружении Unit Functional, Integration
  31. Какой CI/CD бывает? Факторы / Тестирование Анализ кода Тесты без

    окружения Тесты в окружении Тесты в «полном» окружении Unit Functional, Integration End-to-end, Performance regression
  32. Какой CI/CD бывает? Факторы / Тестирование Анализ кода Тесты без

    окружения Тесты в окружении Тесты в «полном» окружении Unit Functional, Integration End-to-end, Performance regression
  33. Какой CI/CD бывает? Факторы / Разделение прав доступа

  34. Какой CI/CD бывает? Факторы / Разделение прав доступа Простое разделение

    прав доступа
  35. Какой CI/CD бывает? Факторы / Разделение прав доступа Простое разделение

    прав доступа Разные права на окружения
  36. Какой CI/CD бывает? Факторы / Разделение прав доступа Простое разделение

    прав доступа Разные права на окружения Multi stage approval
  37. Какой CI/CD бывает? Факторы / Разделение прав доступа Простое разделение

    прав доступа Разные права на окружения Multi stage approval Quorum approval
  38. Какой CI/CD бывает? Факторы / Разделение прав доступа Простое разделение

    прав доступа Разные права на окружения Multi stage approval Quorum approval
  39. Какой CI/CD бывает? Факторы / Архитектура приложения

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

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

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

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

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

    приложение Многокомпонентное приложение Микросервисная архитектура
  45. None
  46. git + shell

  47. Docker

  48. Kubernetes + Helm

  49. Kubernetes + Helm + Gitlab

  50. Kubernetes + Helm + Gitlab Enterprise

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

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

  53. Какой CI/CD бывает? Дополнительные требования Быстро Надёжно

  54. Какой CI/CD бывает? Дополнительные требования Быстро Надёжно Выкат и откат

    с гарантией и без простоя
  55. Какой CI/CD бывает? Дополнительные требования Быстро Надёжно Выкат и откат

    с гарантией и без простоя SLA 99.9%
  56. Какой CI/CD бывает? Дополнительные требования Быстро Надёжно Дёшево Выкат и

    откат с гарантией и без простоя SLA 99.9%
  57. Какой CI/CD бывает? Дополнительные требования Быстро Надёжно Дёшево Выкат и

    откат с гарантией и без простоя SLA 99.9% Затраты на управление / администрирование
  58. Какой CI/CD бывает? Дополнительные требования Быстро Надёжно Дёшево Выкат и

    откат с гарантией и без простоя SLA 99.9% Затраты на управление / администрирование Затраты на инфраструктуру
  59. Какой CI/CD бывает? Дополнительные требования Быстро Надёжно Дёшево Выкат и

    откат с гарантией и без простоя SLA 99.9% Затраты на управление / администрирование Затраты на инфраструктуру
  60. Какой CI/CD бывает? Особые требования Флант

  61. Какой CI/CD бывает? Особые требования Флант Open Source Разномасштабность Интероперабельность

    Простота эксплуатации Будущее
  62. Инструменты

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

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

  65. N Deployment StatefulSet Service Ingress Job CronJob N

  66. Инструменты Стандарт для нас

  67. Инструменты

  68. Инструменты Управление пакетами Состоит из 2-х частей helm (client), tiller

    (server) Chart – название пакетов метаописание, yaml-шаблоны Наша утилита Улучшает сборку Улучшает deploy (чуть-чуть) github.com/flant/dapp
  69. git build test release operate

  70. git operate build test release git build test release operate

  71. git operate build test release

  72. git operate build test release

  73. git operate build test release

  74. git operate build test release .gitlab-ci.yaml

  75. git operate build test release .gitlab-ci.yaml

  76. git operate build test release .gitlab-ci.yaml Dockerfile

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

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

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

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

    image Docker- image + tests Docker registry
  81. 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
  82. 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
  83. 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
  84. 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
  85. .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
  86. .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
  87. .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
  88. .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
  89. .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
  90. Демо на нашем стенде Приходите в любое время, мы будем

    показывать, как вся эта связка работает в деталях и с примерами. И будем отвечать на любые ваши вопросы.
  91. CI/CD с Kubernetes и Gitlab tips & tricks

  92. Что должно быть в Docker образе? 1/8

  93. Что должно быть в Docker образе? Всё, что нужно для

    работы приложения!
  94. Что должно быть в Docker образе? Системные компоненты # apt-get

    install php-fpm
  95. Что должно быть в Docker образе? Системные компоненты # apt-get

    install php-fpm Package manager
  96. Что должно быть в Docker образе? Системные компоненты # apt-get

    install php-fpm Package manager Dependencies
  97. Что должно быть в Docker образе? Системные компоненты # apt-get

    install php-fpm Системные библиотеки # apt-get install libxml2 Package manager Dependencies
  98. Что должно быть в Docker образе? Системные компоненты # apt-get

    install php-fpm Системные библиотеки # apt-get install libxml2 Package manager Dependencies Исходный код
  99. Что должно быть в Docker образе? Системные компоненты # apt-get

    install php-fpm Системные библиотеки # apt-get install libxml2 Package manager Dependencies Исходный код Собранные ассеты
  100. Что должно быть в Docker образе? Системные компоненты # apt-get

    install php-fpm Системные библиотеки # apt-get install libxml2 Package manager Dependencies Готовые конфиги Исходный код Собранные ассеты
  101. One image to rule them all 2/8

  102. One image to rule them all git

  103. One image to rule them all dockerfile composer.json ***.php master

    git
  104. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ
  105. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master
  106. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master QA
  107. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master QA Всё ок!
  108. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master QA Всё ок! dockerfile composer.json ***.php production
  109. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master QA dockerfile composer.json ***.php production Всё ок! Docker образ
  110. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master QA dockerfile composer.json ***.php production Всё ок! Docker образ :production
  111. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master QA dockerfile composer.json ***.php production Всё ок! Docker образ :production =
  112. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master QA dockerfile composer.json ***.php production Всё ок! Docker образ :production =
  113. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master QA dockerfile composer.json ***.php production Всё ок! Docker образ :production = :v0.7.23 :v0.7.23
  114. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master QA dockerfile composer.json ***.php production Всё ок! Docker образ :production = :v0.7.23 :v0.7.23
  115. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master QA dockerfile composer.json ***.php production Всё ок! Docker образ :production = :v0.7.23 :v0.7.23
  116. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master QA dockerfile composer.json ***.php production Всё ок! Docker образ :production = :v0.7.23 :v0.7.23
  117. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master dockerfile composer.json ***.php production Docker образ :production = :v0.7.23 :v0.7.23
  118. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master dockerfile composer.json ***.php production Docker образ :production = :v0.7.23 :v0.7.23 QA
  119. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master dockerfile composer.json ***.php production Docker образ :production = :v0.7.23 :v0.7.23 QA Всё ок!
  120. One image to rule them all dockerfile composer.json ***.php master

    git Docker образ :master dockerfile composer.json ***.php production Docker образ :production = :v0.7.23 :v0.7.23 QA Всё ок!
  121. One image to rule them all Какие бранчи собирать? Как

    тегировать образы?
  122. One image to rule them all git branch Какие бранчи

    собирать? Как тегировать образы? git tag
  123. One image to rule them all git branch Какие бранчи

    собирать? Как тегировать образы? временные образы git tag
  124. One image to rule them all git branch Какие бранчи

    собирать? Как тегировать образы? временные образы git tag релизные образы
  125. One image to rule them all git branch Какие бранчи

    собирать? Как тегировать образы? временные образы git tag релизные образы dev review integration dem o
  126. One image to rule them all git branch Какие бранчи

    собирать? Как тегировать образы? временные образы git tag релизные образы dev review integration dem o staging qa production
  127. Порядок выката и миграции 3/8

  128. Кейс #1 Backend Порядок выката и миграции

  129. Кейс #1 Backend 1 DB Порядок выката и миграции

  130. :v0.7.14 Кейс #1 Backend 1 DB Порядок выката и миграции

  131. :v0.7.14 Backend DB 1 Кейс #1 Порядок выката и миграции

    Deploy
  132. Кейс #1 Backend DB Migrations 1 Порядок выката и миграции

    :v0.7.14 -> 0.8.15 :v0.8.15 Deploy
  133. :v0.7.14 -> 0.8.15 Кейс #1 Backend DB :v0.8.15 Migrations 1

    Порядок выката и миграции
  134. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 :v0.7.14 Кейс #1 Backend DB

    :v0.8.15 Migrations 1 Порядок выката и миграции
  135. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 :v0.7.14 Кейс #1 Backend DB

    :v0.8.15 Migrations 1 Порядок выката и миграции
  136. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 Кейс #1 Backend DB :v0.8.15

    Migrations 1 Порядок выката и миграции
  137. :v0.7.14 -> 0.8.15 :v0.8.15 :v0.7.14 :v0.7.14 Кейс #1 Backend DB

    :v0.8.15 Migrations 1 Порядок выката и миграции
  138. :v0.7.14 -> 0.8.15 :v0.8.15 :v0.7.14 :v0.7.14 Кейс #1 Backend DB

    :v0.8.15 Migrations 1 Порядок выката и миграции
  139. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 Кейс #1 Backend DB :v0.8.15

    Migrations 1 Порядок выката и миграции
  140. :v0.7.14 -> 0.8.15 :v0.8.15 :v0.7.14 :v0.7.14 Кейс #1 Backend DB

    :v0.8.15 Migrations 1 Порядок выката и миграции
  141. :v0.7.14 -> 0.8.15 :v0.8.15 :v0.7.14 :v0.7.14 Кейс #1 Backend DB

    :v0.8.15 Migrations 1 Порядок выката и миграции
  142. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 Кейс #1 Backend DB :v0.8.15

    Migrations 1 Порядок выката и миграции
  143. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 Кейс #1 Backend :v0.8.15 Migrations

    DB 1 Порядок выката и миграции
  144. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 Кейс #1 Backend :v0.8.15 Migrations

    DB 1 Порядок выката и миграции
  145. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 Кейс #1 Backend :v0.8.15 Migrations

    DB 1 Порядок выката и миграции
  146. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 Кейс #1 Backend :v0.8.15 Migrations

    DB 1 Порядок выката и миграции
  147. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 :v0.8.15 Кейс #1 Backend :v0.8.15

    Migrations DB 1 Порядок выката и миграции
  148. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 :v0.8.15 Кейс #1 Backend :v0.8.15

    Migrations DB 1 Порядок выката и миграции
  149. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.7.14 :v0.8.15 Кейс #1 Backend :v0.8.15

    Migrations DB 1 Порядок выката и миграции
  150. :v0.7.14 -> 0.8.15 :v0.7.14 :v0.8.15 Кейс #1 Backend :v0.8.15 Migrations

    DB 1 Порядок выката и миграции
  151. :v0.7.14 -> 0.8.15 :v0.8.15 :v0.7.14 :v0.8.15 Кейс #1 Backend :v0.8.15

    Migrations DB 1 Порядок выката и миграции
  152. :v0.7.14 -> 0.8.15 :v0.8.15 :v0.7.14 :v0.8.15 Кейс #1 Backend :v0.8.15

    Migrations DB 1 Порядок выката и миграции
  153. :v0.7.14 -> 0.8.15 :v0.8.15 :v0.8.15 :v0.8.15 Кейс #1 Backend :v0.8.15

    Migrations DB 1 Порядок выката и миграции
  154. :v0.8.15 Кейс #1 Backend :v0.8.15 Migrations DB 1 :v0.8.15 :v0.8.15

    :v0.8.15 Порядок выката и миграции
  155. :v0.8.15 Кейс #1 Backend :v0.8.15 Migrations DB 1 :v0.8.15 :v0.8.15

    :v0.8.15 Порядок выката и миграции Ура! Выкатилось!
  156. Ура! Выкатилось! :v0.8.15 Кейс #1 Backend :v0.8.15 Migrations DB 1

    :v0.8.15 :v0.8.15 :v0.8.15 Порядок выката и миграции
  157. backend 3 migrations DB 1 Порядок выката и миграции Кейс

    #1
  158. backend 3 migrations DB 1 использует использует Порядок выката и

    миграции Кейс #1
  159. backend 3 migrations DB 1 использует использует косвенно зависит Порядок

    выката и миграции Кейс #1
  160. Кейс #2 Порядок выката и миграции

  161. Кейс #2 Backend Migrations DB :v0.8.15 :v0.8.15 Порядок выката и

    миграции
  162. Кейс #2 Backend Migrations DB :v0.8.15 :v0.8.15 1 Порядок выката

    и миграции
  163. Кейс #2 Backend Migrations DB :v0.8.15 :v0.8.15 1 Порядок выката

    и миграции
  164. Кейс #2 Backend Migrations DB :v0.8.15 1 :v0.8.15 Порядок выката

    и миграции
  165. Кейс #2 Backend Migrations DB :v0.8.15 1 :v0.8.15 Порядок выката

    и миграции
  166. Кейс #2 Backend Migrations DB :v0.8.15 1 :v0.8.15 Порядок выката

    и миграции
  167. Кейс #2 Backend Migrations DB :v0.8.15 1 :v0.8.15 Порядок выката

    и миграции
  168. Кейс #2 Backend Migrations DB :v0.8.15 1 :v0.8.15 Порядок выката

    и миграции
  169. Кейс #2 Backend Migrations DB :v0.8.15 1 :v0.8.15 Порядок выката

    и миграции
  170. Кейс #2 Backend Migrations DB :v0.8.15 1 :v0.8.15 Порядок выката

    и миграции
  171. Кейс #2 Backend Migrations DB :v0.8.15 1 :v0.8.15 Порядок выката

    и миграции
  172. Кейс #2 Backend Migrations DB :v0.8.15 1 :v0.8.15 Порядок выката

    и миграции
  173. Кейс #2 Backend Migrations DB :v0.8.15 1 :v0.8.15 Порядок выката

    и миграции
  174. Кейс #2 Backend Migrations DB :v0.8.15 1 Порядок выката и

    миграции :v0.8.15
  175. Кейс #2 Backend Migrations DB :v0.8.15 1 Порядок выката и

    миграции :v0.8.15
  176. Кейс #2 Backend Migrations DB :v0.8.15 1 Порядок выката и

    миграции :v0.8.15
  177. backend 3 migrations DB 1 использует использует косвенно зависит Резюме

    Порядок выката и миграции
  178. Bootstrap базы 4/8

  179. Dump Bootstrap базы Seed

  180. Dump Bootstrap базы Seed DB

  181. Dump Bootstrap базы Seed DB load dump

  182. Dump Bootstrap базы Seed DB load dump migrations

  183. Dump Bootstrap базы Seed DB load dump migrations

  184. Dump Bootstrap базы Seed DB load dump Backend migrations

  185. Dump Bootstrap базы Seed DB load dump Backend migrations

  186. Dump Bootstrap базы Backend DB load dump migrations DB Seed

  187. Dump Bootstrap базы Backend DB load dump migrations DB migrations

    Seed
  188. Dump Bootstrap базы Backend DB load dump migrations DB migrations

    seed Seed
  189. Dump Bootstrap базы Backend DB load dump migrations DB migrations

    seed Seed
  190. Dump Bootstrap базы Backend DB load dump migrations Backend DB

    migrations seed Seed
  191. Dump Bootstrap базы Backend DB load dump migrations Backend DB

    migrations seed Seed
  192. Скорость bootstrap’а Занимаемое место Полезность Сложность реализации Пустая база только

    структура 5 sec Seed/fixtures из текущего бранча 1 min Ночной дамп с seeds/fixtures из master 10 sec Дамп “для staging” 1 hour Ночной дамп “для staging” 30 sec Дамп с production 30 min Ночной дамп с production 1 min
  193. Скорость bootstrap’а Занимаемое место Полезность Сложность реализации Пустая база только

    структура Seed/fixtures из текущего бранча Ночной дамп с seeds/fixtures из master 10 sec Дамп “для staging” Ночной дамп “для staging” 30 sec Дамп с production Ночной дамп с production
  194. Deploy Bootstrap базы Load: Seeds Load: Nightly staging dump Build

    Build Deploy Load: Nightly seeds (from master)
  195. Выкат действительно без простоя 5/8

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

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

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

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

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

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

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

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

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

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

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

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

    (чем угодно) Правильный размер pod-а и политика обновления
  208. Атомарность выката 6/8

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

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

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

    cron-foo cron-bar cron-baz Redis 3 Background Jobs 3 Sphinx 2 DB 3
  212. Атомарность выката 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
  213. Атомарность выката 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
  214. Атомарность выката 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
  215. Атомарность выката 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
  216. Атомарность выката 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
  217. Атомарность выката 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
  218. :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 Атомарность выката
  219. :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
  220. :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 Атомарность выката
  221. :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
  222. :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
  223. :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
  224. :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
  225. :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 ✖
  226. 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
  227. :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 ✖
  228. Динамические окружения 7/8

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

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

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

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

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

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

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

    feature-x.review.example.com abc ***.php
  236. Динамические окружения *.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
  237. Динамические окружения *.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
  238. Динамические окружения *.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
  239. Динамические окружения *.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
  240. Динамические окружения *.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
  241. Динамические окружения *.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
  242. Динамические окружения *.review.example.com Ingress Controller feature-foo.review.example.com namespace: feature-foo git feature-foo

    ***.php
  243. Отображение branch: new-interface Динамические окружения один проект

  244. Отображение branch: new-interface Динамические окружения один проект namespace: new-interface new-interface.review.example.com

  245. Отображение branch: new-interface Динамические окружения один проект namespace: new-interface new-interface.review.example.com

    branch: feature/LLLL___#1342 один проект + SLUG
  246. Отображение 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
  247. Отображение 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 несколько проектов
  248. Отображение 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
  249. Отображение 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
  250. Отображение 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
  251. Несколько советов Динамические окружения Минимизировать использование ресурсов

  252. Несколько советов Динамические окружения Минимизировать использование ресурсов Целиком в Kubernetes

    (включая все СУБД)
  253. Несколько советов Динамические окружения Минимизировать использование ресурсов Целиком в Kubernetes

    (включая все СУБД) Ограничить публичный доступ
  254. Несколько советов Динамические окружения Минимизировать использование ресурсов Целиком в Kubernetes

    (включая все СУБД) Ограничить публичный доступ Как-то ограничивать разработчиков
  255. Несколько советов Динамические окружения Минимизировать использование ресурсов Целиком в Kubernetes

    (включая все СУБД) Ограничить публичный доступ Как-то ограничивать разработчиков
  256. Deploy (auto) Load: Seeds Load: Nightly staging dump Build Build

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

    Deploy Load: Nightly seeds (from master) Stop environment Динамические окружения
  258. Тесты 8/8

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

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

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

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

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

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

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

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

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

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

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

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

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

    docker build Docker- image helm delete --purge Job Docker registry namespace: test-abc Dockerfile .helm
  272. Конец

  273. Kubernetes + Helm + Gitlab

  274. Kubernetes + Helm + Gitlab Флант

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

  276. 24×7×365 L1/L2/L3/+ DevOps SLA 30+ … и по доступной цене

  277. Наши 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
  278. 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