Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Zero touch app delivery, auto-scale and load ba...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Vicente De Luca
July 14, 2015
Technology
84
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Zero touch app delivery, auto-scale and load balancing
Vicente De Luca
July 14, 2015
Other Decks in Technology
See All in Technology
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
4
1.1k
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
490
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
470
Getting Started with Google Antigravity
glaforge
0
300
go-sqletch
moznion
0
140
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
130
Browser Spec: Testing Hotwire with Ruby
takahashim
1
120
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
200
WasmをRustにする
sansantech
PRO
0
250
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
110
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
300
20261017福岡devIO 「AIは"良いダッシュボード"を作れるか?
jtakeda
0
140
Featured
See All Featured
Claude Code のすすめ
schroneko
67
230k
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
Accessibility Awareness
sabderemane
1
250
The Cost Of JavaScript in 2023
addyosmani
55
10k
Marketing to machines
jonoalderson
1
5.9k
Designing for Timeless Needs
cassininazir
1
530
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
A Tale of Four Properties
chriscoyier
163
24k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
310
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Transcript
ZER0 TOUCH App Deployment and Load Balancing Vicente De Luca©
2015 -
[email protected]
1
whoami Vicente De Luca Network Engineer @ Zendesk - Unix
since 90's - IPv6 addicted - RC flying (and crashing) passionate http://nethero.org @zenvdeluca Vicente De Luca© 2015 -
[email protected]
2
Problems Traditional App Deploy - NetOps Vicente De Luca© 2015
-
[email protected]
3
What was wrong? • Ticket asking LB resources • Multiple
teams • Complex and manual process • Prone to human errors • Painful on growing companies Vicente De Luca© 2015 -
[email protected]
4
Solution Vicente De Luca© 2015 -
[email protected]
5
How to solve? • End to end automation • Pain
less migration • Known tool • Not increasing architecture complexity Vicente De Luca© 2015 -
[email protected]
6
HOW? (NetOps tasks) Vicente De Luca© 2015 -
[email protected]
7
Ingredients • Load Balancer ! • Service Discovery ! •
Template Config Render ! Vicente De Luca© 2015 -
[email protected]
8
Load Balancer What we already had F5 BIG-IP Viprion 2400
(http://f5.com/) Why we use it? ASIC Routing / Linux / Partition Alternatives? Haproxy / Keepalived Vicente De Luca© 2015 -
[email protected]
9
Service Discovery Consul (http://consul.io/) Why we use it? Service catalog
/ Distributed Health Checks query via REST or DNS / Agents are clients Alternatives? etcd / zookeeper, but just use consul :) Vicente De Luca© 2015 -
[email protected]
10
Consul How we use it! • Server register itself to
Consul local datacenter cluster • Publish own services with health checks • Maintain a distributed key/value store • lightweight binary that runs inside BIG-IP Vicente De Luca© 2015 -
[email protected]
11
Template Config Rendering What we used? consul-template (https://github.com/hashicorp/consul- template) How
we use it! - lightweight binary that runs inside BIG-IP - Subscribes to Consul services / hc / kv changes - Generate new configuration at change - reload load balancer with new config Vicente De Luca© 2015 -
[email protected]
12
Service Registration Example { "service": { "name": "http", "tags": ["primary"],
"port":80, "check": { "id": "http_check", "name": "HTTP Health Check", "script": "curl -H 'Host=www.mydomain.com' http://localhost", "interval": "5s" } } } Vicente De Luca© 2015 -
[email protected]
13
Service Query Example DNS $ host http.service.consul http.service.consul has address
10.0.1.10 Vicente De Luca© 2015 -
[email protected]
14
Service Query Example HTTP API $ curl localhost:8500/v1/catalog/service/http?pretty { "Node":
"srv1.nethero.org", "Address": "10.0.1.10", "ServiceName": "http", "ServiceTags": [ "primary" ], "ServiceAddress": "10.0.1.10", "ServicePort": 80 } Vicente De Luca© 2015 -
[email protected]
15
Consul Template Config Example consul = "127.0.0.1:8500" retry = "10s"
max_stale = "10m" log_level = "warn" pid_file = "/var/run/consul-template.pid" syslog { enabled = true facility = "user" } template { source = "/etc/consul-templates/production.ctmpl" destination = "/config/partitions/CONSUL/rendered-config" command = "/sbin/zconsul_postrender CONSUL" } Vicente De Luca© 2015 -
[email protected]
16
BIG-IP Consul Template (Golang) {{ range services }}{{ with $serviceMap
:= .}} {{if and (.Tags.Contains "load_balance") }} {{ range service $serviceMap.Name }} {{if and (.Tags.Contains "load_balance") }} ltm node {{ .Node }} { address {{ .Address }} } ltm pool POOL-{{ $serviceMap.Name | toUpper }} { members { {{range service $serviceMap.Name }}{{if and (.Tags.Contains "load_balance") }} {{.Node}}:{{.Port}} { address {{.Address}} } {{end}}{{end}} } monitor /Common/tcp } {{ range service $serviceMap.Name }}{{if (.Tags.Contains "vip") }} ltm virtual VS-{{ $serviceMap.Name | toUpper }}-VIP-{{.Port}} { destination {{.Address}}:{{.Port}} ip-protocol tcp mask 255.255.255.255 pool POOL-{{ $serviceMap.Name | toUpper }} profiles { fastL4 { } } source 0.0.0.0/0 source-address-translation { type automap } } {{ end }}{{end}}{{end}}{{end}}{{end}}{{end}}{{end}} Vicente De Luca© 2015 -
[email protected]
17
BIG-IP Rendered Config example ltm node /CONSUL/docker3.aws1.nethero.org { address 10.0.100.6
} ltm node /CONSUL/docker4.aws1.nethero.org { address 10.0.100.7 } ltm pool /CONSUL/POOL-VOLUNTEER-WEB { members { /CONSUL/docker3.aws1.nethero.org:58358 { address 10.0.100.6 } /CONSUL/docker4.aws1.nethero.org:58358 { address 10.0.100.7 } } monitor /Common/tcp } ltm virtual /CONSUL/VS-VOLUNTEER-WEB-VIP-9080 { destination /CONSUL/10.0.250.10:9080 ip-protocol tcp mask 255.255.255.255 pool /CONSUL/POOL-VOLUNTEER-WEB profiles { /Common/fastL4 { } } source 0.0.0.0/0 source-address-translation { type automap } translate-address enabled translate-port enabled } Vicente De Luca© 2015 -
[email protected]
18
BIG-IP: /var/log/user.log Thu Jul 9 20:50:04 PDT 2015 - [CONSUL]
config sync started Loading configuration... /config/partitions/CONSUL/bigip.conf Saving running configuration... /config/partitions/CONSUL/bigip.conf Thu Jul 9 20:50:06 PDT 2015 - [CONSUL] Virtual Servers loaded from Consul app catalog: /CONSUL/VS-ALPHA-WEB-VIP-6090 (/CONSUL/10.0.250.10:6090) /CONSUL/VS-LEGION-WEB-VIP-9033 (/CONSUL/10.0.250.10:9033) /CONSUL/VS-VOLUNTEER-WEB-VIP-9080 (/CONSUL/10.0.250.10:glrpc) /CONSUL/VS-XPTO-WEB-VIP-6080 (/CONSUL/10.0.250.10:6080) Thu Jul 9 20:50:06 PDT 2015 - [CONSUL] import completed $ curl 10.0.250.10:6080 Hello world% Vicente De Luca© 2015 -
[email protected]
19
Vicente De Luca© 2015 -
[email protected]
20
TL;DR • Consul for Service Discovery • consul-template to render
config and reload BIG-IP partition • F5 BIG-IP as our Load Balancer choice • new partition for each consul template instance Vicente De Luca© 2015 -
[email protected]
21
QUESTIONS? Vicente De Luca© 2015 -
[email protected]
22
THANKS! Vicente De Luca© 2015 -
[email protected]
23