SlideShare a Scribd company logo
1 of 41
Download to read offline
Blue/Green Deployment with HAProxy
and Consul
Владимир Витков
2017.08.26 / VarnaConf
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Кой е пред вас
• Владимир
• Системен Администратор
• Привърженик на FOSS но не и зеалот
• Експериментатор
• Относително приятен човек за разговор*
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Census
• Програмисти
• Администратори
• Performance
• Agile
• QA
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Agile and DevOps
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Какво е Agile
• Идеология за разработка на софтуер
• Това което се ползва
• Нещо прекрасно
• . . . но но съвсем
• Периоди на разработка с функционалност
• Много караници
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Agile е методология за разработка на софтуер. Целият процес на
разработване на софтуер е разделен на малки периоди в които
трябва да се разработи и представи нова функционалност. Тази
функционалност може да е малка или не но трябва да бъде
завършена в този цикъл (което често не се получава). Това е
като цяло процес който се ползва все повече, и често в резултат
се появяват не особенно завършни приложения и/или
функционалности. Доста хора твърдят че е нещо прекрасно
(най-вероятно по-добро дори от нарязания хляб), но това не е
точно така. Налага се често преоценяване на целите за спринта,
недовършена функционалност и не малко караници кое къде
трябва да се случи.
Какво е DevOps
• Смесица между администратор и разработчик
• Много автоматизация
• Управлениe на инфраструктура
• . . . като разработчик
• Отново много караници
Blue/Green Deployment with HAProxy and Consul Владимир Витков
DevOps е термин който малко или много описва текущата
насока в развитието на системната администрация. Терминът не
трябва да се възприема като длъжност, или обучение, или дори
начин на работа, а като начин на мислене. Насоката в мисленето
е да се автоматизира възможно най-голяма част от задачите
възникващи в процеса на работа. Често това включва
автоматизирано управление на инфраструктурата, Управление
на работещите приложения. Много сериозен мониторинг за
проблеми (и често автоматизирана реакция при проблеми).
Голяма част от мисленето скрито зад този термин е да смятате
инфраструктурата за променлива и динамична. Като нещо за
което не трябва да мислите много а да управлявате и
програмирате. Не си мислете че това е лесно. Включва доста
работа, доста караници със разработчици, откриване на
проблеми на най-неочакваните места, но и голямо удоволствие.
Защо Agile и DevOps
• Agile - много версии (и често)
• DevOps - мутираща инфраструктура
• Сборът? - голямо натоварване ако няма синхрон
• Бързо развитие на софтуера
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Защо споменавам това? Просто. Светът в който живеем е
динамичен (и софтуерът е динамичен). Agile предоставя
множество нови функционалности, които трябва да бъдат
изпробвани. DevOps предоставя възможност инфраструктурата
да се променя за реализиране на възможностите. Ако не са в
синхрон (като възможности) някой ще бъде много натоварен
(най-често DevOps хората).
The Problem
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Проблемът който имаме е как да имаме две (или повече)
едновеременно вървящи версии с възможности за тестване.
Допълнителен проблем е как да осигурим лесни възможности за
тестване, смяна на версиите без период на недостъпност и лесна
смяна на версиите. Имайки предвид възможността трябва да
имаме и лесен вариант за връщане на стара версия.
Приложението
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Просто приложение което да демонстрира идеята. Забелязвате
ли проблем?
The Solution
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Архитектура
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Решението е базирано на haproxy което излага на външният свят
няколко порта (по един за всяка група, един за текущо
активната версия и един за управление). Имаме key-value сървър
в който registrator приложението описва промените в сървърите
ни. haproxy контейнера автоматично регенерира собствената си
конфигурация в зависимост от вървящите контейнери. И може
ръчно да сменим текущо активната група контейнери.
Компоненти
• docker
• haproxy
• consul
• registrator
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Необходимите ни компоненти са: * docker - където ще си
работят нещата * haproxy - ефективен loadbalancer * consul -
key/value store * registrator - обновява информацията за
работещите контейнери в докер
Consul
• Контейнер предоставящ key/value услуга
• Съхранява описанието на приложението ни
• Може да се клъстеризира
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Consul е key/value storage софтуер. Използваме го за да
съхраняваме информация за приложението ни. Може да се
съхранява произволна информация. Има и възможност за
проверки на достъпността.
Consul - starting
docker run --detach --restart=always 
--hostname consul-master --name consul-master 
gliderlabs/consul-server [-bootstrap]
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Registrator
• Динамично обновява Consul
• Попълва параметри за контейнери
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Registrator - starting
docker run --detach --restart=always 
--name registrator --hostname registrator 
--net=host 
--volume=/var/run/docker.sock:/tmp/docker.sock 
gliderlabs/registrator:latest consul://localhost:85
Blue/Green Deployment with HAProxy and Consul Владимир Витков
haproxy
• контейнер базиран на alpine linux
• haproxy
• consul-template
• nginx - holding pages
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Целта на този контейнер е да бъде load-balancer пред нашето
приложение и по автоматичен начин да може да сменя
активните групи. Конфигурацията се регенерира автоматично
при промяна на активните контейнери или ръчно прехвърляне.
Допълнително имаме nginx който сервира holding страници (ако
сме объркали нещо няма да е грозно).
haproxy - entrypoint
frontend http-in
bind *:80
# Generated automatically by consul-template
# blue if app-web and blue in service/app/color
# green if app-web and green in service/app/color
# else holding
use_backend app_{{with $cl:=key "service/app/color"
default_backend app_holding
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Основна входна точка. В зависимост от конкретната избрана
група трафика се насочва към нея. Ако по случайност няма
избрана група всичко се насочва към holding страница. Ако няма
активни сървъри в избраната група пак отиваме към холдинг
страница.
haproxy - holding
backend app_holding
server sink 127.0.0.1:59599
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Елементарна холдинг страница (nginx пренасочващ всичко към
локално копие със 503)
haproxy - color
listen app_green
bind *:18000
balance roundrobin
{{range $i,$s:=service "web"}}
{{if .Tags | contains "green"}}
server {{$i}}{{.Node}}green {{.Address}}:{{.Port}}
{{end}}
{{end}}
server sink 127.0.0.1:56569 backup
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Пример за една от групите. За всички инстанции които
дефинират че предоставят усуга web, ако в таговете им има
цвят (зелен) биват добавени. Имаме и допълнително
подсигуряване че ако нямаме контейнери в групата ще
сервираме холдинг страница.
haproxy - starting
docker run --detach --restart=always 
--env='CONSUL_CONNECT=172.17.42.1:8500' 
--hostname lb-prod --name lb-prod 
zeridon/haproxy-consul
Blue/Green Deployment with HAProxy and Consul Владимир Витков
The Demo
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Q/A
Blue/Green Deployment with HAProxy and Consul Владимир Витков
Контакти
• Владимир Витков
• vvitkov@linux-bg.org
• https://www.getoto.net/zeridon
• https://github.com/zeridon
• http://www.slideshare.net/zeridon
Blue/Green Deployment with HAProxy and Consul Владимир Витков

More Related Content

Similar to VarnaConf Blue/Green Deployments with Docker, HAProxy and Consul

безопасности защита на Web application
безопасности защита на Web applicationбезопасности защита на Web application
безопасности защита на Web applicationkarizka3
 
Python choreographe NAOqi Framework
Python choreographe NAOqi FrameworkPython choreographe NAOqi Framework
Python choreographe NAOqi FrameworkAtelier for robotics
 
High Volume Monitoring with Graphite
High Volume Monitoring with GraphiteHigh Volume Monitoring with Graphite
High Volume Monitoring with Graphitezeridon
 
Php security
Php securityPhp security
Php securityphristov
 
SEO курс 2014, лекция 4: Техническа оптимизация, част 2
SEO курс 2014, лекция 4: Техническа оптимизация, част 2SEO курс 2014, лекция 4: Техническа оптимизация, част 2
SEO курс 2014, лекция 4: Техническа оптимизация, част 2Lily Grozeva
 
SEO курс, лекция 13 - SEO инструментариум
SEO курс, лекция 13 - SEO инструментариумSEO курс, лекция 13 - SEO инструментариум
SEO курс, лекция 13 - SEO инструментариумLily Grozeva
 
HTML5 приложения за Android, урок 1
HTML5 приложения за Android, урок 1HTML5 приложения за Android, урок 1
HTML5 приложения за Android, урок 1Leon Anavi
 
[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with JenkinsBorislav Traykov
 
Google Cloud Natural Language for SEO
Google Cloud Natural Language for SEO  Google Cloud Natural Language for SEO
Google Cloud Natural Language for SEO Netpeak
 
Drupal course-plovdiv-week1-day-1
Drupal course-plovdiv-week1-day-1Drupal course-plovdiv-week1-day-1
Drupal course-plovdiv-week1-day-1Kalin Chernev
 
Life In the cloud
Life In the cloudLife In the cloud
Life In the cloudzeridon
 
FABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin NakovFABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin NakovSvetlin Nakov
 
Sdn nfv мрежова виртуализация
Sdn nfv мрежова виртуализацияSdn nfv мрежова виртуализация
Sdn nfv мрежова виртуализацияmartin.ivanov
 
Style and Standards in Technical Communications
Style and Standards in Technical CommunicationsStyle and Standards in Technical Communications
Style and Standards in Technical CommunicationsMariana Vacca
 
Web and WS based Embedded Systems
Web and WS based Embedded SystemsWeb and WS based Embedded Systems
Web and WS based Embedded SystemsNikolay Kakanakov
 
wtconference
wtconferencewtconference
wtconferenceunderlog
 
Конкурентни софтуерни архитектури
Конкурентни софтуерни архитектуриКонкурентни софтуерни архитектури
Конкурентни софтуерни архитектуриbraintechd
 

Similar to VarnaConf Blue/Green Deployments with Docker, HAProxy and Consul (20)

безопасности защита на Web application
безопасности защита на Web applicationбезопасности защита на Web application
безопасности защита на Web application
 
DrupalCamp Sofia 2015
DrupalCamp Sofia 2015DrupalCamp Sofia 2015
DrupalCamp Sofia 2015
 
Python choreographe NAOqi Framework
Python choreographe NAOqi FrameworkPython choreographe NAOqi Framework
Python choreographe NAOqi Framework
 
High Volume Monitoring with Graphite
High Volume Monitoring with GraphiteHigh Volume Monitoring with Graphite
High Volume Monitoring with Graphite
 
Php security
Php securityPhp security
Php security
 
SEO курс 2014, лекция 4: Техническа оптимизация, част 2
SEO курс 2014, лекция 4: Техническа оптимизация, част 2SEO курс 2014, лекция 4: Техническа оптимизация, част 2
SEO курс 2014, лекция 4: Техническа оптимизация, част 2
 
SEO курс, лекция 13 - SEO инструментариум
SEO курс, лекция 13 - SEO инструментариумSEO курс, лекция 13 - SEO инструментариум
SEO курс, лекция 13 - SEO инструментариум
 
HTML5 приложения за Android, урок 1
HTML5 приложения за Android, урок 1HTML5 приложения за Android, урок 1
HTML5 приложения за Android, урок 1
 
[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins[Dev.bg] CI from scratch with Jenkins
[Dev.bg] CI from scratch with Jenkins
 
Google Cloud Natural Language for SEO
Google Cloud Natural Language for SEO  Google Cloud Natural Language for SEO
Google Cloud Natural Language for SEO
 
PHP Introduction
PHP IntroductionPHP Introduction
PHP Introduction
 
Drupal course-plovdiv-week1-day-1
Drupal course-plovdiv-week1-day-1Drupal course-plovdiv-week1-day-1
Drupal course-plovdiv-week1-day-1
 
Life In the cloud
Life In the cloudLife In the cloud
Life In the cloud
 
FABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin NakovFABRIQ - Short - Svetlin Nakov
FABRIQ - Short - Svetlin Nakov
 
Drupal Security
Drupal SecurityDrupal Security
Drupal Security
 
Sdn nfv мрежова виртуализация
Sdn nfv мрежова виртуализацияSdn nfv мрежова виртуализация
Sdn nfv мрежова виртуализация
 
Style and Standards in Technical Communications
Style and Standards in Technical CommunicationsStyle and Standards in Technical Communications
Style and Standards in Technical Communications
 
Web and WS based Embedded Systems
Web and WS based Embedded SystemsWeb and WS based Embedded Systems
Web and WS based Embedded Systems
 
wtconference
wtconferencewtconference
wtconference
 
Конкурентни софтуерни архитектури
Конкурентни софтуерни архитектуриКонкурентни софтуерни архитектури
Конкурентни софтуерни архитектури
 

VarnaConf Blue/Green Deployments with Docker, HAProxy and Consul

  • 1. Blue/Green Deployment with HAProxy and Consul Владимир Витков 2017.08.26 / VarnaConf Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 2.
  • 3. Кой е пред вас • Владимир • Системен Администратор • Привърженик на FOSS но не и зеалот • Експериментатор • Относително приятен човек за разговор* Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 4. Census • Програмисти • Администратори • Performance • Agile • QA Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 5. Agile and DevOps Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 6.
  • 7. Какво е Agile • Идеология за разработка на софтуер • Това което се ползва • Нещо прекрасно • . . . но но съвсем • Периоди на разработка с функционалност • Много караници Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 8. Agile е методология за разработка на софтуер. Целият процес на разработване на софтуер е разделен на малки периоди в които трябва да се разработи и представи нова функционалност. Тази функционалност може да е малка или не но трябва да бъде завършена в този цикъл (което често не се получава). Това е като цяло процес който се ползва все повече, и често в резултат се появяват не особенно завършни приложения и/или функционалности. Доста хора твърдят че е нещо прекрасно (най-вероятно по-добро дори от нарязания хляб), но това не е точно така. Налага се често преоценяване на целите за спринта, недовършена функционалност и не малко караници кое къде трябва да се случи.
  • 9. Какво е DevOps • Смесица между администратор и разработчик • Много автоматизация • Управлениe на инфраструктура • . . . като разработчик • Отново много караници Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 10. DevOps е термин който малко или много описва текущата насока в развитието на системната администрация. Терминът не трябва да се възприема като длъжност, или обучение, или дори начин на работа, а като начин на мислене. Насоката в мисленето е да се автоматизира възможно най-голяма част от задачите възникващи в процеса на работа. Често това включва автоматизирано управление на инфраструктурата, Управление на работещите приложения. Много сериозен мониторинг за проблеми (и често автоматизирана реакция при проблеми). Голяма част от мисленето скрито зад този термин е да смятате инфраструктурата за променлива и динамична. Като нещо за което не трябва да мислите много а да управлявате и програмирате. Не си мислете че това е лесно. Включва доста работа, доста караници със разработчици, откриване на проблеми на най-неочакваните места, но и голямо удоволствие.
  • 11. Защо Agile и DevOps • Agile - много версии (и често) • DevOps - мутираща инфраструктура • Сборът? - голямо натоварване ако няма синхрон • Бързо развитие на софтуера Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 12. Защо споменавам това? Просто. Светът в който живеем е динамичен (и софтуерът е динамичен). Agile предоставя множество нови функционалности, които трябва да бъдат изпробвани. DevOps предоставя възможност инфраструктурата да се променя за реализиране на възможностите. Ако не са в синхрон (като възможности) някой ще бъде много натоварен (най-често DevOps хората).
  • 13. The Problem Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 14. Проблемът който имаме е как да имаме две (или повече) едновеременно вървящи версии с възможности за тестване. Допълнителен проблем е как да осигурим лесни възможности за тестване, смяна на версиите без период на недостъпност и лесна смяна на версиите. Имайки предвид възможността трябва да имаме и лесен вариант за връщане на стара версия.
  • 15. Приложението Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 16. Просто приложение което да демонстрира идеята. Забелязвате ли проблем?
  • 17. The Solution Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 18.
  • 19. Архитектура Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 20. Решението е базирано на haproxy което излага на външният свят няколко порта (по един за всяка група, един за текущо активната версия и един за управление). Имаме key-value сървър в който registrator приложението описва промените в сървърите ни. haproxy контейнера автоматично регенерира собствената си конфигурация в зависимост от вървящите контейнери. И може ръчно да сменим текущо активната група контейнери.
  • 21. Компоненти • docker • haproxy • consul • registrator Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 22. Необходимите ни компоненти са: * docker - където ще си работят нещата * haproxy - ефективен loadbalancer * consul - key/value store * registrator - обновява информацията за работещите контейнери в докер
  • 23. Consul • Контейнер предоставящ key/value услуга • Съхранява описанието на приложението ни • Може да се клъстеризира Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 24. Consul е key/value storage софтуер. Използваме го за да съхраняваме информация за приложението ни. Може да се съхранява произволна информация. Има и възможност за проверки на достъпността.
  • 25. Consul - starting docker run --detach --restart=always --hostname consul-master --name consul-master gliderlabs/consul-server [-bootstrap] Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 26. Registrator • Динамично обновява Consul • Попълва параметри за контейнери Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 27. Registrator - starting docker run --detach --restart=always --name registrator --hostname registrator --net=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest consul://localhost:85 Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 28. haproxy • контейнер базиран на alpine linux • haproxy • consul-template • nginx - holding pages Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 29. Целта на този контейнер е да бъде load-balancer пред нашето приложение и по автоматичен начин да може да сменя активните групи. Конфигурацията се регенерира автоматично при промяна на активните контейнери или ръчно прехвърляне. Допълнително имаме nginx който сервира holding страници (ако сме объркали нещо няма да е грозно).
  • 30. haproxy - entrypoint frontend http-in bind *:80 # Generated automatically by consul-template # blue if app-web and blue in service/app/color # green if app-web and green in service/app/color # else holding use_backend app_{{with $cl:=key "service/app/color" default_backend app_holding Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 31. Основна входна точка. В зависимост от конкретната избрана група трафика се насочва към нея. Ако по случайност няма избрана група всичко се насочва към holding страница. Ако няма активни сървъри в избраната група пак отиваме към холдинг страница.
  • 32. haproxy - holding backend app_holding server sink 127.0.0.1:59599 Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 33. Елементарна холдинг страница (nginx пренасочващ всичко към локално копие със 503)
  • 34. haproxy - color listen app_green bind *:18000 balance roundrobin {{range $i,$s:=service "web"}} {{if .Tags | contains "green"}} server {{$i}}{{.Node}}green {{.Address}}:{{.Port}} {{end}} {{end}} server sink 127.0.0.1:56569 backup Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 35. Пример за една от групите. За всички инстанции които дефинират че предоставят усуга web, ако в таговете им има цвят (зелен) биват добавени. Имаме и допълнително подсигуряване че ако нямаме контейнери в групата ще сервираме холдинг страница.
  • 36. haproxy - starting docker run --detach --restart=always --env='CONSUL_CONNECT=172.17.42.1:8500' --hostname lb-prod --name lb-prod zeridon/haproxy-consul Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 37. The Demo Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 38.
  • 39. Q/A Blue/Green Deployment with HAProxy and Consul Владимир Витков
  • 40.
  • 41. Контакти • Владимир Витков • vvitkov@linux-bg.org • https://www.getoto.net/zeridon • https://github.com/zeridon • http://www.slideshare.net/zeridon Blue/Green Deployment with HAProxy and Consul Владимир Витков