Successfully reported this slideshow.
Your SlideShare is downloading. ×

Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 352 Ad

Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)

Download to read offline

Потребность в отстроенном процессе Continuous Delivery встает перед каждым развивающимся highload-проектом. Чем больше серверов и составных приложений, чем выше динамика релизов, тем раньше проект сталкивается с данной потребностью, и тем острее она стоит.

Многие команды эксплуатации смогли отстроить этот процесс, некоторые добились впечатляющих результатов, а некоторые — потерпели неудачу. Но все из них знают, что их процесс можно улучшить: сделать быстрее, надежнее, предсказуемее и удобнее.

В этом докладе я хочу обобщить и систематизировать лучшие практики построения процесса Continuous Delivery с использованием актуальных Open Source технологий (Docker, Chef, Gitlab, Kubernetes), а также обозначить известные проблемы и потенциальные пути их решения.

Будет предпринята попытка однозначно ответить на следующие практические вопросы:
- Почему пора всем переходить на Docker? Как лучше собирать Docker-образы? Как лучше доставлять и хранить Docker-образы?
- Как правильно построить процесс разработки Infrastructure as Code (IaC)?
- Как оптимально интегрировать автоматическое и ручное тестирование в процесс Continuous Delivery?
- Как перестать бояться регулярных выкатов новых версий и сделать этот процесс надежным?
- Почему Continuous Delivery не заканчивается релизом новой версии и зачем нужен Kubernetes?

Потребность в отстроенном процессе Continuous Delivery встает перед каждым развивающимся highload-проектом. Чем больше серверов и составных приложений, чем выше динамика релизов, тем раньше проект сталкивается с данной потребностью, и тем острее она стоит.

Многие команды эксплуатации смогли отстроить этот процесс, некоторые добились впечатляющих результатов, а некоторые — потерпели неудачу. Но все из них знают, что их процесс можно улучшить: сделать быстрее, надежнее, предсказуемее и удобнее.

В этом докладе я хочу обобщить и систематизировать лучшие практики построения процесса Continuous Delivery с использованием актуальных Open Source технологий (Docker, Chef, Gitlab, Kubernetes), а также обозначить известные проблемы и потенциальные пути их решения.

Будет предпринята попытка однозначно ответить на следующие практические вопросы:
- Почему пора всем переходить на Docker? Как лучше собирать Docker-образы? Как лучше доставлять и хранить Docker-образы?
- Как правильно построить процесс разработки Infrastructure as Code (IaC)?
- Как оптимально интегрировать автоматическое и ручное тестирование в процесс Continuous Delivery?
- Как перестать бояться регулярных выкатов новых версий и сделать этот процесс надежным?
- Почему Continuous Delivery не заканчивается релизом новой версии и зачем нужен Kubernetes?

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Similar to Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант) (20)

Advertisement

More from Ontico (20)

Recently uploaded (20)

Advertisement

Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)

  1. 1. Лучшие практики Continuous Delivery с Docker Дмитрий Столяров v3
  2. 2. Привет! # whoami dmitry.stolyarov # hostname -d flant.ru # cat /etc/motd Лучшие практики Continuous Delivery с Docker
  3. 3. flant.ru
  4. 4. Continuous Delivery git build test release operate
  5. 5. Continuous Delivery git build test release operate Зачем?
  6. 6. Continuous Delivery git build test release operate
  7. 7. Опыт OpenSolaris Zones # capsh --print | grep experience
  8. 8. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones # capsh --print | grep experience
  9. 9. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 # capsh --print | grep experience
  10. 10. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 LXC # capsh --print | grep experience
  11. 11. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 jailer by flant 2009 LXC # capsh --print | grep experience
  12. 12. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 jailer by flant 2009 LXC Docker 2013, осень # capsh --print | grep experience
  13. 13. Опыт Gentoo и Linux-VServer 2006 OpenSolaris Zones procfs v1 by flant 2008 jailer by flant 2009 LXC Docker 2013, осень Docker 2014, 6 июня # capsh --print | grep experience
  14. 14. Клиенты Первый канал Forbes.ru Лепра и Dirty Ситимобил Нотамедиа # capsh --print | grep clients
  15. 15. Внедрения # capsh --print | grep implementations 10+ прошлых поколений с 2011 года
  16. 16. Внедрения 4 проекта уже в продакшне # capsh --print | grep implementations 10+ прошлых поколений с 2011 года
  17. 17. Внедрения 4 проекта уже в продакшне # capsh --print | grep implementations 10+ прошлых поколений с 2011 года 2 проекта на подходе
  18. 18. Зачем Docker? ?
  19. 19. Zero Downtime Deployment V1 Старая версия работает
  20. 20. Zero Downtime Deployment V1 Старая версия работает Старая версия остановлена
  21. 21. Zero Downtime Deployment V1 V2 Старая версия работает Старая версия остановлена Новая версия “прогревается”
  22. 22. Zero Downtime Deployment V1 V2 V2 Старая версия работает Старая версия остановлена Новая версия “прогревается” Новая версия работает
  23. 23. Zero Downtime Deployment V1 V2 V2 Старая версия работает Старая версия остановлена Новая версия “прогревается” Новая версия работает
  24. 24. Zero Downtime Deployment V1 Старая версия работает
  25. 25. Zero Downtime Deployment V1 Старая версия работает Новая версия “прогревается” V2V1
  26. 26. Zero Downtime Deployment V1 V2 Старая версия работает Новая версия “прогревается” Переключили трафик V2V1 V1
  27. 27. Zero Downtime Deployment V1 V2 V2 Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена V2V1 V1
  28. 28. Zero Downtime Deployment V1 V2 V2 Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена V2V1 V1
  29. 29. Zero Downtime Deployment V1 V2 V2 V1 V2 V2V2V1 V1
  30. 30. Zero Downtime Deployment V1 V2 V2 V1 V2 V2V2V1 V1
  31. 31. Запуск “двух версий” V1 :80
  32. 32. Запуск “двух версий” V1 :80 V2
  33. 33. Запуск “двух версий” V1 :80 V2 :81
  34. 34. Запуск “двух версий” V1 V2 :80 :81 Сетевые ресурсы порты, сетевые интерфейсы
  35. 35. Запуск “двух версий” V1 V2 :80 :81 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути
  36. 36. Запуск “двух версий” V1 V2 :80 :81 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути IPC общая память, семафоры, сообщения
  37. 37. Запуск “двух версий” V1 V2 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути IPC общая память, семафоры, сообщения PID идентификаторы процессов, видимость :80 :81
  38. 38. Убрать конфликты можно...
  39. 39. Запуск “двух версий” V1 :80 V2 :80
  40. 40. Запуск “двух версий” V1 :80 V2 :80 Сетевые ресурсы порты, сетевые интерфейсы
  41. 41. Запуск “двух версий” V1 :80 V2 :80 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути
  42. 42. Запуск “двух версий” V1 :80 V2 :80 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути IPC общая память, семафоры, сообщения
  43. 43. Запуск “двух версий” V1 :80 V2 :80 Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути IPC общая память, семафоры, сообщения PID идентификаторы процессов, видимость
  44. 44. Запуск “двух версий” V1 :80 V2 :80 Docker даёт гарантию изоляции ресурсов Сетевые ресурсы порты, сетевые интерфейсы Файловая система pid-файлы, директории с кэшем, собственные пути IPC общая память, семафоры, сообщения PID идентификаторы процессов, видимость
  45. 45. Обновление зависимостей V1 PHP v1 driver v1
  46. 46. Обновление зависимостей V1 PHP v1 driver v1 V1 V2 PHP driver v1 driver v2
  47. 47. Обновление зависимостей V1 PHP v1 driver v1 V1 V2 PHP driver v1 driver v2 V1 V2 PHP v1 driver v1 PHP v2 driver v2
  48. 48. Обновление зависимостей V1 PHP v1 driver v1 V1 V2 PHP driver v1 driver v2 V1 V2 PHP v1 driver v1 PHP v2 driver v2
  49. 49. Разрулить конфликты зависимостей тоже можно...
  50. 50. Главный паттерн V1 Старая версия работает 1
  51. 51. Главный паттерн V1 V1 V2 Старая версия работает Новая версия “прогревается” 1 2
  52. 52. Главный паттерн V1 V1 V2 V1 V2 Старая версия работает Новая версия “прогревается” Переключили трафик 1 2 3
  53. 53. Главный паттерн V1 V1 V2 V1 V2 V2 Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена 1 2 3 4
  54. 54. Главный паттерн дырявый openssl дырявый openssl безопасный openssl дырявый openssl безопасный openssl безопасный openssl Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена 1 2 3 4
  55. 55. Главный паттерн Ubuntu 14.04 Ubuntu 14.04 Ubuntu 16.04 Ubuntu 14.06 Ubuntu 16.04 Ubuntu 16.04 Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена 1 2 3 4
  56. 56. Главный паттерн Старая версия работает Новая версия “прогревается” Переключили трафик Старая версия остановлена 1 2 3 4
  57. 57. Независимость Ubuntu
  58. 58. Независимость Ubuntu CentOS
  59. 59. Независимость Ubuntu CentOS Slackware Enterprise Linux
  60. 60. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты
  61. 61. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты
  62. 62. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей
  63. 63. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей
  64. 64. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей Обновление системного ПО
  65. 65. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей Обновление системного ПО
  66. 66. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей Обновление системного ПО Возможность отката
  67. 67. Zero Downtime Deployment Конфликт общих ресурсов ФС, сокеты, порты, инит-скрипты Конфликт зависимостей приложений bower, bundler, pip, npm, composer и их зависимостей Обновление системного ПО Возможность отката
  68. 68. #1: Используйте Docker
  69. 69. Воспроизводимость программисты git
  70. 70. программисты staging git Воспроизводимость
  71. 71. программисты staging QA git Воспроизводимость
  72. 72. программисты staging production QA git Воспроизводимость
  73. 73. production
  74. 74. production
  75. 75. production
  76. 76. cервер #1 git Воспроизводимость
  77. 77. cервер #1 git зеркало пакетов Воспроизводимость
  78. 78. cервер #1 git зеркало пакетов обновлённое зеркало Воспроизводимость
  79. 79. cервер #1 git зеркало пакетов cервер #2 обновлённое зеркало Воспроизводимость
  80. 80. cервер #2
  81. 81. cервер#2
  82. 82. cервер #2
  83. 83. Разработчик: “У меня локально всё работает!”
  84. 84. … а разработчиков пускать на прод запретили.
  85. 85. Воспроизводимость Тестовое окружение → Продакшн
  86. 86. Воспроизводимость Тестовое окружение → Продакшн Выкат на множество серверов
  87. 87. Воспроизводимость Выкат на несколько кластеров / площадок Тестовое окружение → Продакшн Выкат на множество серверов
  88. 88. Воспроизводимость Выкат на несколько кластеров / площадок Локальный запуск точной копии Тестовое окружение → Продакшн Выкат на множество серверов
  89. 89. Выкат на несколько кластеров / площадок Локальный запуск точной копии Тестовое окружение → Продакшн Выкат на множество серверов Запуск “старых” версий Воспроизводимость
  90. 90. Гарантия воспроизводимости gitпрограммисты
  91. 91. Гарантия воспроизводимости gitпрограммисты docker образ
  92. 92. Гарантия воспроизводимости git тестовая площадка программисты docker образ
  93. 93. Гарантия воспроизводимости gitпрограммисты docker образ production тестовая площадка
  94. 94. Гарантия воспроизводимости gitпрограммисты docker образ программисты тестовая площадка production
  95. 95. Гарантия воспроизводимости gitпрограммисты docker образ другие площадки тестовая площадка production программисты
  96. 96. Гарантия воспроизводимости gitпрограммисты docker образ архив тестовая площадка production программисты другие площадки
  97. 97. #2: One image to rule them all
  98. 98. Разобрались с Docker ✔
  99. 99. ✔ Как собирать docker-образы? ? Разобрались с Docker ✔
  100. 100. Разобрались с Docker ✔ Как собирать docker-образы? ? Куда положить Dockerfile? ?
  101. 101. Код и инфраструктура development master git
  102. 102. Код и инфраструктура development master git V2 V1
  103. 103. staging production Код и инфраструктура development master git V2 V1
  104. 104. staging production Код и инфраструктура development master git V1 PHP 5.5 V2 V1
  105. 105. Код и инфраструктура development staging production master git V2 V1PHP 7 PHP 5.5 V2 V1
  106. 106. Код и инфраструктура development staging production master git V2 V1PHP 7 PHP 5.5 V2 V2
  107. 107. Код и инфраструктура development master staging production git V2 V2PHP 7 V2 V2 PHP 5.5
  108. 108. Код и инфраструктура development master staging production git V2 V2PHP 7 PHP 5.5 V2 V2
  109. 109. Код и инфраструктура development master V2 staging production V1 git V2 V1PHP 7 PHP 5.5
  110. 110. Код и инфраструктура development master V2 staging production V1 git V2 V1PHP 7 PHP 5.5 PHP 7 PHP 5.5
  111. 111. Код и инфраструктура development master V2 V1 git PHP 7 PHP 5.5 staging production V2 PHP 7 V1 PHP 5.5
  112. 112. Код и инфраструктура development master V2 staging production V2 git PHP 7 PHP 7 V2 PHP 7 V1 PHP 5.5
  113. 113. Код и инфраструктура development master staging production V2 git PHP 7 V2 PHP 7 V2 PHP 7 V2 PHP 7
  114. 114. … и должна жить с ним #3: Инфраструктура – это код
  115. 115. Код и многослойная архитектура nginx 1.2 V2 frontend backend production V1
  116. 116. Код и многослойная архитектура nginx 1.2 V2 nginx 1.3 V2 frontend backend staging production V1
  117. 117. Код и многослойная архитектура nginx 1.2 V2 nginx 1.3 V2 frontend backend staging production V1
  118. 118. Код и многослойная архитектура nginx 1.2 V2 nginx 1.3 V2 frontend backend staging production V2
  119. 119. Код и многослойная архитектура nginx 1.2 V2 nginx 1.3 V2 frontend backend staging production V2
  120. 120. Код и многослойная архитектура nginx 1.3 V2 nginx 1.3 V2 frontend backend staging production V2
  121. 121. Код и многослойная архитектура V1 development PHP 5.5 git V2 production PHP 7
  122. 122. Код и многослойная архитектура V1 development PHP 5.5 nginx 1.2 git V2 production PHP 7 nginx 1.3
  123. 123. Код и многослойная архитектура V2 PHP 7 nginx 1.3 git программисты devops V2 docker-образ #1 PHP 7 nginx 1.3 docker-образ #2
  124. 124. … и это касается не только бекенда #3: Инфраструктура – это код
  125. 125. Несколько проектов git project_1 Код nginx
  126. 126. Несколько проектов git project_1 Код nginx git project_2 Код
  127. 127. Несколько проектов git project_1 Код nginx git project_2 Код nginx
  128. 128. Несколько проектов git project_1 Код nginx git project_2 Код nginx
  129. 129. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код nginx nginx
  130. 130. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код nginx nginx
  131. 131. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код git project_4 Код nginx nginx nginx
  132. 132. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код git project_4 Код Код nginx git project_6 Код nginx git project_5 nginx nginx nginx
  133. 133. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код git project_4 Код Код nginx git project_6 Код nginx git project_5 nginx nginx nginx
  134. 134. Несколько проектов git project_1 Код nginx git project_2 Код git project_3 Код git project_4 Код Код nginx git project_6 Код nginx git project_5 nginx nginx nginx
  135. 135. WET
  136. 136. WET we enjoy typing
  137. 137. WET we enjoy typing write everything twice
  138. 138. WET we enjoy typing write everything twice waste everyone's time
  139. 139. DRY
  140. 140. DRY don't repeat yourself
  141. 141. Несколько проектов git project_1 Код nginx
  142. 142. Несколько проектов git project_1 Код nginx git project_2 Код
  143. 143. Несколько проектов git project_1 Код git project_2 Код git nginx nginxnginx
  144. 144. Несколько проектов git project_1 Код nginx v1 git project_2 Код git nginx nginx v1
  145. 145. Несколько проектов git project_1 Код nginx v1 git project_2 Код git nginx nginx v1 nginx v1
  146. 146. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v2 nginx v1 nginx v1
  147. 147. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v2 nginx v2 nginx v1
  148. 148. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v2 nginx v2 nginx v2
  149. 149. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v2 nginx v3 nginx v2
  150. 150. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v2 nginx v3 nginx v3
  151. 151. Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2
  152. 152. bundler, composer, pip, npm, ... Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management
  153. 153. bundler, composer, pip, npm, ... Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management
  154. 154. Dockerfile Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ...
  155. 155. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ...
  156. 156. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef
  157. 157. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf
  158. 158. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf Puppet
  159. 159. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf Puppet + Librarian
  160. 160. Dockerfile + git submodules Несколько проектов git project_1 Код git project_2 Код git nginx nginx v4 nginx v4 nginx v2 Dependency management bundler, composer, pip, npm, ... Chef + Berkshelf Puppet + Librarian
  161. 161. … и требует соответствующих подходов #3: Инфраструктура – это код
  162. 162. Разобрались с Docker ✔
  163. 163. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔
  164. 164. Разобрались с Docker Интегрировали код инфраструктуры ✔ Когда собирать docker-образы? ? ✔
  165. 165. Разобрались с Docker Интегрировали код инфраструктуры ✔ Когда собирать docker-образы? Как лучше тегировать docker-образы? ? ? ✔
  166. 166. Git → Docker Какие бранчи собирать?
  167. 167. Git → Docker Какие бранчи собирать? Как тегировать образы?
  168. 168. Как найти старую версию? Git → Docker Какие бранчи собирать? Как тегировать образы?
  169. 169. Как найти старую версию? Git → Docker Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката?
  170. 170. Как найти старую версию? Git → Docker Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Что побывало в продакшне? На какую версию откатиться?
  171. 171. Какие из образов должны проходить QA? Как найти старую версию? Git → Docker Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Что побывало в продакшне? На какую версию откатиться?
  172. 172. master Временные образы
  173. 173. master Временные образы
  174. 174. master app:master Временные образы
  175. 175. master app:master preview Временные образы
  176. 176. master app:master preview app:master Временные образы
  177. 177. master app:master release_7 preview app:master Временные образы
  178. 178. master app:master release_7 app:release_7 preview app:master Временные образы
  179. 179. master app:master release_7 app:release_7 preview app:master Временные образы
  180. 180. master app:master release_7 app:release_7 preview app:master Временные образы
  181. 181. master app:master release_7 app:release_7 preview app:master Временные образы
  182. 182. release_7 app:release_7 preview Временные образы app:master master app:master
  183. 183. app:master release_7 app:release_7 preview Временные образы master app:master
  184. 184. release_7 app:release_7 preview Временные образы master app:master app:master
  185. 185. release_7 app:release_7 preview Временные образы master app:master app:master ≠
  186. 186. master app:master release_7 app:release_7 preview Временные образы app:master
  187. 187. master app:master release_7 app:release_7 preview app:master Временные образы
  188. 188. master app:master release_7 app:release_7 preview Временные образы app:master
  189. 189. feature_x master app:master release_7 app:release_7 preview app:feature_x Временные образы app:master
  190. 190. Временные образы Собирать все бранчи?
  191. 191. Временные образы Собирать все бранчи? Не стоит
  192. 192. Временные образы Собирать все бранчи? Не стоит master — общая интеграция
  193. 193. Временные образы master — общая интеграция release — интеграция релизов /^release_.*/ Собирать все бранчи? Не стоит
  194. 194. Временные образы master — общая интеграция release — интеграция релизов /^release_.*/ feature — интеграция “фич” /^feature_.*/ Собирать все бранчи? Не стоит
  195. 195. Временные образы master — общая интеграция release — интеграция релизов /^release_.*/ feature — интеграция “фич” /^feature_.*/ Выкатывать автоматом? Собирать все бранчи? Не стоит
  196. 196. Временные образы master — общая интеграция release — интеграция релизов /^release_.*/ feature — интеграция “фич” /^feature_.*/ Выкатывать автоматом? Как удобнее Собирать все бранчи? Не стоит
  197. 197. master 6.0.1 Релизные образы staging production
  198. 198. master Релизные образы app:6.0.1 6.0.1 staging production
  199. 199. staging production master Релизные образы app:6.0.1 6.0.1 app:6.0.1
  200. 200. staging production master release_7 Релизные образы 6.0.1 app:6.0.1 app:6.0.1
  201. 201. staging production 6.0.1master release_7 Релизные образы app:6.0.1 app:6.0.1
  202. 202. staging production 6.0.1master release_7 7.0.0 Релизные образы app:6.0.1 app:6.0.1
  203. 203. staging production 6.0.1master release_7 Релизные образы app:6.0.1 app:6.0.1 app:7.0.0 7.0.0
  204. 204. staging production 6.0.1master release_7 Релизные образы app:6.0.1 app:6.0.1 7.0.0 app:7.0.0 app:7.0.0
  205. 205. staging production 6.0.1master release_7 Релизные образы app:6.0.1 app:6.0.1 7.0.0 app:7.0.0 app:7.0.0
  206. 206. staging production 6.0.1 7.0.0 master release_7 Релизные образы app:6.0.1 app:6.0.1 app:7.0.0 app:7.0.0 ✗
  207. 207. staging production 6.0.1master release_7 7.0.0 Релизные образы app:6.0.1 app:6.0.1 app:7.0.0 app:7.0.0 ✗
  208. 208. staging production master release_7 7.0.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:7.0.0 ✗
  209. 209. staging production master release_7 7.0.0 6.1.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:7.0.0 ✗
  210. 210. staging production master release_7 7.0.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:7.0.0 ✗ app:6.1.0 6.1.0
  211. 211. staging production master release_7 7.0.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 6.1.0
  212. 212. staging production master release_7 7.0.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 6.1.0
  213. 213. staging production master release_7 7.0.0 release_8 Релизные образы 6.0.1 6.1.0 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0
  214. 214. staging production master release_7 7.0.0 release_8 Релизные образы 6.0.1 6.1.0 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0
  215. 215. staging production 6.1.0master release_7 7.0.0 release_8 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 ✗
  216. 216. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 ✗
  217. 217. staging production master release_7 7.0.0 release_8 6.1.0 6.1.1 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 ✗
  218. 218. staging production master release_7 7.0.0 release_8 6.1.0 6.1.1 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.0 ✗ app:6.1.0 ✗ app:6.1.1
  219. 219. staging production master release_7 7.0.0 release_8 6.1.0 6.1.1 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  220. 220. staging production master release_7 7.0.0 release_8 6.1.0 6.1.1 Релизные образы 6.0.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  221. 221. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  222. 222. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.0.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1 OK
  223. 223. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  224. 224. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  225. 225. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  226. 226. staging production master release_7 7.0.0 release_8 6.1.0 7.0.1 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1
  227. 227. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:6.1.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1 7.0.1
  228. 228. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1 7.0.1
  229. 229. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 app:6.1.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1 7.0.1
  230. 230. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:6.1.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1
  231. 231. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:6.1.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1 OK
  232. 232. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:7.0.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1
  233. 233. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:7.0.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1
  234. 234. staging production master release_7 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:7.0.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1
  235. 235. staging production master 7.0.0 release_8 6.1.0 Релизные образы 6.0.1 6.1.1 7.0.1 app:7.0.1 app:6.0.1 app:7.0.0 app:7.0.1 ✗ app:6.1.0 ✗ app:6.1.1 app:7.0.1
  236. 236. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы?
  237. 237. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? git branch git tag временные образы релизные образы
  238. 238. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы?
  239. 239. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката?
  240. 240. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? docker tag git tag
  241. 241. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката?
  242. 242. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA?
  243. 243. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA?
  244. 244. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться?
  245. 245. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? релиз багфикс итерация QA6.0.3
  246. 246. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? релиз багфикс итерация QA6.0.3
  247. 247. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? релиз багфикс итерация QA6.0.3
  248. 248. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться?
  249. 249. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? Как найти старую версию?
  250. 250. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? Как найти старую версию? git tag docker tag
  251. 251. Git`о Docker`ный workflow Какие бранчи собирать? Как тегировать образы? Какой коммит на продакшне? Дельта выката? Какие из образов должны проходить QA? Что побывало в продакшне? На какую версию откатиться? Как найти старую версию?
  252. 252. #4: Свяжите Git с Docker
  253. 253. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔
  254. 254. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔ Связали Git с Docker ✔
  255. 255. Чего не хватает? ? Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔ Связали Git с Docker ✔
  256. 256. frontend backend Последовательность выката nginx 1.2 HTTP PHP 5.5V1 Старая версия работает
  257. 257. frontend backend Последовательность выката nginx 1.2 HTTP nginx 1.2 HTTP Старая версия работает Обновили backend PHP 5.5V1 PHP 7V2 1
  258. 258. frontend backend Последовательность выката nginx 1.2 HTTP nginx 1.2 HTTP WS Старая версия работает Обновили backend PHP 5.5V1 PHP 7V2 1
  259. 259. frontend backend Последовательность выката nginx 1.2 HTTP nginx 1.2 HTTP WS nginx 1.3 HTTP WS Старая версия работает Обновили backend Обновили frontend PHP 5.5V1 PHP 7V2 PHP 7 1 V2 2
  260. 260. Последовательность выката PHP 5.5 HTTP nginx 1.2 HTTP WS nginx 1.3 HTTP WS Старая версия работает frontend backend V1 nginx 1.2 PHP 7V2 PHP 7V2 2 1 Обновили backend Обновили frontend
  261. 261. Последовательность выката PHP 5.5 HTTP Старая версия работает frontend backend V1 nginx 1.2
  262. 262. Последовательность выката PHP 5.5 HTTP nginx 1.3 HTTP Старая версия работает frontend backend V1 nginx 1.2 PHP 5.5V1 Обновили frontend 1
  263. 263. Последовательность выката PHP 5.5 HTTP nginx 1.3 HTTP nginx 1.3 HTTP WS Старая версия работает frontend backend V1 nginx 1.2 PHP 5.5V1 PHP 7V2 Обновили frontend Обновили backend 1 2
  264. 264. Последовательность выката PHP 5.5 HTTP nginx 1.3 HTTP nginx 1.3 HTTP WS Старая версия работает frontend backend V1 nginx 1.2 PHP 5.5V1 PHP 7V2 2 1 Обновили frontend Обновили backend
  265. 265. Например: frontend → migration → backend #5: Регламентируйте порядок выката
  266. 266. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔ Связали Git с Docker ✔
  267. 267. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔ Связали Git с Docker ✔ Установили порядок выката ✔
  268. 268. Интегрировали код инфраструктуры ✔ Разобрались с Docker ✔ Связали Git с Docker ✔ Установили порядок выката ✔ Снова чего-то не хватает? ?
  269. 269. Docker swarm Docker compose
  270. 270. Docker swarm Docker compose
  271. 271. Docker swarm Docker compose Consul Serf
  272. 272. Dokku Docker swarm Docker compose Consul Serf
  273. 273. Dokku Shipyard Docker swarm Docker compose Consul Serf
  274. 274. Dokku Shipyard Docker swarm Docker compose Consul Serf
  275. 275. Dokku Shipyard Docker swarm Docker compose Consul Serf
  276. 276. Accelerate Your Delivery
  277. 277. by Google
  278. 278. κυβερνήτης
  279. 279. кормчий
  280. 280. Readiness probe V1 Старая версия работает
  281. 281. Readiness probe V1 Старая версия работает V1 Новая версия прогревается V2
  282. 282. Readiness probe V1 Старая версия работает V1 Новая версия прогревается V2 V1 V2 Readiness probe
  283. 283. Readiness probe V1 Старая версия работает V1 Новая версия прогревается V2 V1 Readiness probe V2 V1 Переключили трафик V2 Старая версия остановлена V2
  284. 284. Synchronous update V1 V1 V1 V1 V1 V1 V1 V1
  285. 285. Synchronous update V1 V1 V1 V1 V1 V1 V1 V1
  286. 286. Synchronous update V1 V1 V1 V1 V1 V1 V1
  287. 287. Synchronous update V1 V1 V1 V1 V1 V1 V1
  288. 288. Synchronous update V1 V1 V1 V1 V1 V1
  289. 289. Synchronous update V1 V1 V1 V1 V1
  290. 290. Synchronous update V1 V1 V1 V1
  291. 291. Synchronous update V1 V1 V1 V1V2
  292. 292. Synchronous update V1 V1 V1 V1V2
  293. 293. Synchronous update V1 V1 V1 V1V2 V2
  294. 294. Synchronous update V1 V1 V1 V1V2 V2
  295. 295. Synchronous update V1 V1 V1 V1V2 V2 V2
  296. 296. Synchronous update V1 V1 V1 V1V2 V2 V2 V2
  297. 297. Synchronous update V1 V1 V1 V1V2 V2 V2 V2
  298. 298. Synchronous update V1 V1 V1V2 V2 V2 V2
  299. 299. Synchronous update V1 V1V2 V2 V2 V2
  300. 300. Synchronous update V2 V2 V2 V2
  301. 301. Synchronous update V2 V2 V2 V2 V2
  302. 302. Synchronous update V2 V2 V2 V2 V2 V2
  303. 303. Synchronous update V2 V2 V2 V2 V2 V2 V2 V2
  304. 304. Rolling update V1 V1 V1 V1 V1 V1 V1 V1
  305. 305. Rolling update V1 V1 V1 V1 V1 V1 V1 V1
  306. 306. Rolling update V1 V1 V1 V1 V1 V1 V1
  307. 307. Rolling update V2 V1 V1 V1 V1 V1 V1 V1
  308. 308. Rolling update V2 V1 V1 V1 V1 V1 V1 V1
  309. 309. Rolling update V2 V1 V1 V1 V1 V1 V1 V1
  310. 310. Rolling update V2 V1 V1 V1 V1 V1 V1
  311. 311. Rolling update V2 V2 V1 V1 V1 V1 V1 V1
  312. 312. Rolling update V2 V2 V1 V1 V1 V1 V1 V1
  313. 313. Rolling update V2 V2 V2 V1 V1 V1 V1 V1
  314. 314. Rolling update V2 V2 V2 V2 V1 V1 V1 V1
  315. 315. Rolling update V2 V2 V2 V2 V2 V1 V1 V1
  316. 316. Rolling update V2 V2 V2 V2 V2 V2 V1 V1
  317. 317. Rolling update V2 V2 V2 V2 V2 V2 V2 V1
  318. 318. Rolling update V2 V2 V2 V2 V2 V2 V2 V2
  319. 319. kubernetes & release readiness probe
  320. 320. kubernetes & release readiness probe synchronous update
  321. 321. kubernetes & release readiness probe synchronous update rolling update
  322. 322. kubernetes & release readiness probe synchronous update canary releases rolling update
  323. 323. kubernetes & operate service supervision
  324. 324. kubernetes & operate service supervision liveness probe
  325. 325. kubernetes & operate service supervision liveness probe self-healing
  326. 326. kubernetes & operate service supervision liveness probe autoscaling self-healing
  327. 327. kubernetes & operate service supervision liveness probe monitoring influx + grafana autoscaling self-healing
  328. 328. kubernetes & operate service supervision liveness probe monitoring influx + grafana autoscaling self-healing logging elastic + fluent + kibana
  329. 329. kubernetes Мощный фундамент
  330. 330. kubernetes Мощный фундамент Большие перспективы
  331. 331. kubernetes Мощный фундамент Большие перспективы Интеграция вместо велосипедов
  332. 332. kubernetes Мощный фундамент Большие перспективы Простота Интеграция вместо велосипедов
  333. 333. kubernetes Мощный фундамент Большие перспективы Невероятная совместимость Простота Интеграция вместо велосипедов
  334. 334. kubernetes Мощный фундамент Большие перспективы Невероятная совместимость Простота Интеграция вместо велосипедов Всеразмерность
  335. 335. … ведь она есть и работает! #6: Используйте готовую платформу
  336. 336. #1: Используйте Docker
  337. 337. #1: Используйте Docker #2: One image to rule them all
  338. 338. #1: Используйте Docker #2: One image to rule them all #3: Инфраструктура – это код
  339. 339. #1: Используйте Docker #2: One image to rule them all #3: Инфраструктура – это код #4: Свяжите Git и Docker
  340. 340. #1: Используйте Docker #2: One image to rule them all #3: Инфраструктура – это код #4: Свяжите Git и Docker #5: Регламентируйте порядок выката
  341. 341. #1: Используйте Docker #2: One image to rule them all #3: Инфраструктура – это код #4: Свяжите Git и Docker #5: Регламентируйте порядок выката #6: Используйте готовую платформу
  342. 342. Приглашаем в гости на наш стенд В3 LINUX-КВЕСТ Удивительный квест для самых отважных сисадминов. Записывайтесь прямо сейчас и покажите свой опыт в Linux-кунгфу. 1 июня, 12:30 Участникам потребуется ssh-клиент ;)
  343. 343. pam_docker github.com/flant/pam_docker Поддержите нас, поставьте ★ #1: Используйте Docker #2: One image to rule them all #3: Инфраструктура – это код #4: Свяжите Git и Docker #5: Регламентируйте порядок выката #6: Используйте готовую платформу Дмитрий Столяров dmitry.stolyarov@flant.ru flant.ru Работа в Нижнем Новгороде Пишите на hr@flant.ru Лучшие практики Continuous Delivery с Docker
  344. 344. Continuous Delivery git build test release operate Gitlab Kubernetes