Потребность в отстроенном процессе Continuous Delivery встает перед каждым развивающимся highload-проектом. Чем больше серверов и составных приложений, чем выше динамика релизов, тем раньше проект сталкивается с данной потребностью, и тем острее она стоит.
Многие команды эксплуатации смогли отстроить этот процесс, некоторые добились впечатляющих результатов, а некоторые — потерпели неудачу. Но все из них знают, что их процесс можно улучшить: сделать быстрее, надежнее, предсказуемее и удобнее.
В этом докладе я хочу обобщить и систематизировать лучшие практики построения процесса Continuous Delivery с использованием актуальных Open Source технологий (Docker, Chef, Gitlab, Kubernetes), а также обозначить известные проблемы и потенциальные пути их решения.
Будет предпринята попытка однозначно ответить на следующие практические вопросы:
- Почему пора всем переходить на Docker? Как лучше собирать Docker-образы? Как лучше доставлять и хранить Docker-образы?
- Как правильно построить процесс разработки Infrastructure as Code (IaC)?
- Как оптимально интегрировать автоматическое и ручное тестирование в процесс Continuous Delivery?
- Как перестать бояться регулярных выкатов новых версий и сделать этот процесс надежным?
- Почему Continuous Delivery не заканчивается релизом новой версии и зачем нужен Kubernetes?
35. Запуск “двух версий”
V1 V2
:80 :81 Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэшем, собственные пути
36. Запуск “двух версий”
V1 V2
:80 :81 Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэшем, собственные пути
IPC
общая память, семафоры, сообщения
37. Запуск “двух версий”
V1 V2
Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэшем, собственные пути
IPC
общая память, семафоры, сообщения
PID
идентификаторы процессов, видимость
:80 :81
42. Запуск “двух версий”
V1
:80
V2
:80
Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэшем, собственные пути
IPC
общая память, семафоры, сообщения
43. Запуск “двух версий”
V1
:80
V2
:80
Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэшем, собственные пути
IPC
общая память, семафоры, сообщения
PID
идентификаторы процессов, видимость
44. Запуск “двух версий”
V1
:80
V2
:80
Docker даёт гарантию изоляции ресурсов
Сетевые ресурсы
порты, сетевые интерфейсы
Файловая система
pid-файлы, директории с кэшем, собственные пути
IPC
общая память, семафоры, сообщения
PID
идентификаторы процессов, видимость
62. Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, bundler, pip, npm, composer и их зависимостей
63. Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, bundler, pip, npm, composer и их зависимостей
64. Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, bundler, pip, npm, composer и их зависимостей
Обновление системного ПО
65. Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, bundler, pip, npm, composer и их зависимостей
Обновление системного ПО
66. Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, bundler, pip, npm, composer и их зависимостей
Обновление системного ПО
Возможность отката
67. Zero Downtime Deployment
Конфликт общих ресурсов
ФС, сокеты, порты, инит-скрипты
Конфликт зависимостей приложений
bower, bundler, pip, npm, composer и их зависимостей
Обновление системного ПО
Возможность отката
88. Воспроизводимость
Выкат на несколько кластеров / площадок
Локальный запуск точной копии
Тестовое окружение → Продакшн
Выкат на множество серверов
89. Выкат на несколько кластеров / площадок
Локальный запуск точной копии
Тестовое окружение → Продакшн
Выкат на множество серверов
Запуск “старых” версий
Воспроизводимость
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. Несколько проектов
git project_1
Код nginx
git project_2
Код
git project_3
Код
git project_4
Код
Код nginx
git project_6
Код nginx
git project_5
nginx
nginx nginx
136. Несколько проектов
git project_1
Код nginx
git project_2
Код
git project_3
Код
git project_4
Код
Код nginx
git project_6
Код nginx
git project_5
nginx
nginx nginx
170. Как найти старую версию?
Git → Docker
Какие бранчи собирать?
Как тегировать образы?
171. Как найти старую версию?
Git → Docker
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
172. Как найти старую версию?
Git → Docker
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Что побывало в продакшне? На какую версию откатиться?
173. Какие из образов должны проходить QA?
Как найти старую версию?
Git → Docker
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Что побывало в продакшне? На какую версию откатиться?
244. Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из образов должны проходить QA?
245. Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из образов должны проходить QA?
246. Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из образов должны проходить QA?
Что побывало в продакшне? На какую версию откатиться?
247. Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из образов должны проходить QA?
Что побывало в продакшне? На какую версию откатиться?
релиз багфикс итерация QA6.0.3
248. Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из образов должны проходить QA?
Что побывало в продакшне? На какую версию откатиться?
релиз багфикс итерация QA6.0.3
249. Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из образов должны проходить QA?
Что побывало в продакшне? На какую версию откатиться?
релиз багфикс итерация QA6.0.3
250. Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из образов должны проходить QA?
Что побывало в продакшне? На какую версию откатиться?
251. Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из образов должны проходить QA?
Что побывало в продакшне? На какую версию откатиться?
Как найти старую версию?
252. Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из образов должны проходить QA?
Что побывало в продакшне? На какую версию откатиться?
Как найти старую версию?
git tag docker tag
253. Git`о Docker`ный workflow
Какие бранчи собирать?
Как тегировать образы?
Какой коммит на продакшне? Дельта выката?
Какие из образов должны проходить QA?
Что побывало в продакшне? На какую версию откатиться?
Как найти старую версию?
347. #1: Используйте Docker
#2: One image to rule them all
#3: Инфраструктура – это код
#4: Свяжите Git и Docker
348. #1: Используйте Docker
#2: One image to rule them all
#3: Инфраструктура – это код
#4: Свяжите Git и Docker
#5: Регламентируйте порядок выката
349. #1: Используйте Docker
#2: One image to rule them all
#3: Инфраструктура – это код
#4: Свяжите Git и Docker
#5: Регламентируйте порядок выката
#6: Используйте готовую платформу
350. Приглашаем в гости
на наш стенд В3
LINUX-КВЕСТ
Удивительный квест для самых
отважных сисадминов.
Записывайтесь прямо сейчас
и покажите свой опыт
в Linux-кунгфу.
1 июня, 12:30
Участникам потребуется ssh-клиент ;)
351. 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