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 Владимир Витков
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 хората).
14. Проблемът който имаме е как да имаме две (или повече)
едновеременно вървящи версии с възможности за тестване.
Допълнителен проблем е как да осигурим лесни възможности за
тестване, смяна на версиите без период на недостъпност и лесна
смяна на версиите. Имайки предвид възможността трябва да
имаме и лесен вариант за връщане на стара версия.
20. Решението е базирано на haproxy което излага на външният свят
няколко порта (по един за всяка група, един за текущо
активната версия и един за управление). Имаме key-value сървър
в който registrator приложението описва промените в сървърите
ни. haproxy контейнера автоматично регенерира собствената си
конфигурация в зависимост от вървящите контейнери. И може
ръчно да сменим текущо активната група контейнери.
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 Владимир Витков
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 Владимир Витков
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 Владимир Витков