Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Infrastructure testing using Kubernetes
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ran Tavory
February 24, 2019
Programming
0
570
Infrastructure testing using Kubernetes
Testing Kafka replication using uReplicator, using Kubernetes, Prometheus, Grafana and friends
Ran Tavory
February 24, 2019
Tweet
Share
More Decks by Ran Tavory
See All by Ran Tavory
go-grpc-channelz: a Go based UI for gRPC's channelz
rantav
0
630
Code Review (Navy Hackathon)
rantav
0
93
Infrastructure Testing Using Kubernetes And Golang
rantav
0
110
Interview Workshop - Technical Questions
rantav
0
360
Code Review Best Practices
rantav
0
110
Code Review @ AppsFlyer
rantav
0
100
GraphQL at Yodas
rantav
2
180
Git for champs
rantav
0
170
Code Review at Yodas
rantav
0
200
Other Decks in Programming
See All in Programming
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
6
1.9k
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
370
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.3k
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
990
Oxlint JS plugins
kazupon
1
580
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
600
Vibe codingでおすすめの言語と開発手法
uyuki234
0
220
ThorVG Viewer In VS Code
nors
0
760
Oxlintはいいぞ
yug1224
5
1.3k
高速開発のためのコード整理術
sutetotanuki
1
380
AI巻き込み型コードレビューのススメ
nealle
0
100
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
170
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The Limits of Empathy - UXLibs8
cassininazir
1
210
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
Music & Morning Musume
bryan
47
7.1k
Building AI with AI
inesmontani
PRO
1
680
Measuring & Analyzing Core Web Vitals
bluesmoon
9
750
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
290
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
Become a Pro
speakerdeck
PRO
31
5.8k
Balancing Empowerment & Direction
lara
5
880
Transcript
Infrastructure testing using Kubernetes @rantav
Infrastructure testing using Kubernetes OR: Testing Kafka replication over the
Atlantic using Golang, Kubernetes and friends
THE GOAL Test Kafka replication across the Atlantic
Hello! I am Ran Tavory I work on multi-region You
can find me @rantav (slack/twitter/email) 4
The Goal: Test Kafka Replication ⊙ Replicate 30MB - 300MB
of traffic per second ⊙ Validate correctness ⊙ Measure latency ⊙ Run test cases ◦ Broker crash, cluster resize, packet loss... 5
HOW ? High level design 6
Kafka Replication From https://github.com/AppsFlyer/kafka-mirror-tester 7
With a home-grown producer and consumer 8
WHAT DO WE WANT? 9 DOCUMENTATION
WHAT DO WE WANT? 10 REPRODUCIBILITY
WHAT DO WE WANT? 11 MONITORING
KUBERNETES 12
You keep saying this word Kubernetes What does it mean?
13
A brief introduction to Kubernetes 14
CLUSTER MANAGER Kubernetes is a 15
NODES The host running a kubelet and a set of
Pods 16 It manages
PODS Pods consist of 1 or more containers 17 Nodes
contain
DEPLOYMENTS A set of stateless pods 18 Pods run
STATEFUL SET A set of stateful pods 19 Pods also
run
KUBECTL The k8s CLI 20 You control k8s using
“
$ make k8s-all 22
What does that do? ⊙ Provision VMs in AWS ⊙
Setup VPCs, Subnets, Routing Tables ⊙ Create Security Groups ⊙ Setup Load Balancers ⊙ Install Kubernetes (etcd, masters, nodes) ⊙ Setup Monitoring (Prometheus & Grafana and install dashboard) ⊙ Install Weave Scope ⊙ Install Kafkas (and test them) ⊙ Install uReplicator (and test it) ⊙ Install test programs ⊙ And more… (ASGs, DHCP etc) 23
$ kops create cluster \ --zones us-east-1a,us-east-1b,us-east-1c \ --node-count 40
\ --node-size i3.large \ --master-size m4.large \ --master-zones us-east-1a \ --networking calico \ --cloud aws 24
What are we building? us-east-1 25 eu-west-1
What are we building? us-east-1 40 nodes k8s cluster 26
eu-west-1 48 nodes k8s cluster
What are we building? us-east-1 40 nodes k8s cluster 30
brokers kafka cluster 27 eu-west-1 48 nodes k8s cluster 30 brokers kafka cluster
What are we building? us-east-1 40 nodes k8s cluster 30
brokers kafka cluster 28 eu-west-1 48 nodes k8s cluster 30 brokers kafka cluster 8 workers uReplicator
What are we building? us-east-1 40 nodes k8s cluster 30
brokers kafka cluster 10 producers 29 eu-west-1 48 nodes k8s cluster 30 brokers kafka cluster 8 workers uReplicator 4 consumers
30 End Result
31 Grafana Dashboard
32 Prometheus
33 Weave Scope
34 Weave Scope
35 Weave Scope
36 kubectl example
TEST IT. Let’s put all this to test now 37
$ kubectl \ --context us-east-1.k8s.local \ -n kafka-source \ delete
pod kafka-source-2 38 KILL A BROKER
39 KILL A BROKER
$ kubectl \ --context us-east-1.k8s.local \ -n kafka-source \ scale
\ statefulset kafka-source \ --replicas 29 40 RESIZE KAFKA CLUSTER
41 RESIZE KAFKA CLUSTER
$ kubectl \ --context eu-west-1.k8s.local \ -n ureplicator \ scale
deployment \ ureplicator-worker \ --replicas 9 42 ADD uREPLICATOR WORKER
43 ADD uREPLICATOR WORKER
$ make k8s-redeploy-tests 44 ADD NEW TOPIC
45 ADD NEW TOPIC
$ make k8s-kafka-shell-source $ bin/kafka-topics.sh --zookeeper zookeeper:2181 --alter --topic topic5
--partitions 300 46 ADD PARTITIONS
$ kubectl --context eu-west-1.k8s.local \ -n ureplicator port-forward \ ureplicator-controller-76ff85b889-l9mzl
9000 $ curl -X DELETE http://localhost:9000/topics/topic5 $ curl -X POST -d \ '{"topic":"topic5", "numPartitions":"300"}' \ http://localhost:9000/topics 47 ADD PARTITIONS (cont)
48 PACKET LOSS
49 PACKET LOSS
CODE DEEP DIVE Kubernetes, head first (just a few bites)
50
51 Kafka kind: StatefulSet replicas: 30
Kafka Main container 52 image ports resources probes
53 Kafka config
54 Metrics sidecar container
55 Kafka anti- affinity
56 uReplicator deployment
57 Producer deployment
58 Consumer deployment
59 Service monitoring
CODE DEEP DIVE Golang Producer/Consumer (just a few bites) 60
61 Producer Main loop
62 Producer channels p.ProduceChannel() <- m
63 Consumer Main loop Loop until: signaled || done. Process
event Type switch
64 Consumer Process message
“ Question: How can multiple consumers validate message arrival order?
65
66 Producer Sequence numbers messageKey = seq % partitions perKeySeq
= seq / partitions
$ make k8s-delete-all 67
68
Thanks! Any questions? You can find me at @rantav &
[email protected]
69 This presentation: https://speakerdeck.com/rantav/infrastructure-testing-using-kubernetes