Docker und Kubernetes sind in aller Munde – und das auch zu Recht. Aber muss ich wirklich beide Tools in jedem Projekt einsetzen? Kann ich nicht auch eine Microservice-Architektur entwickeln und pflegen, ohne alles in Container zu packen? Am Beispiel des Backends von waipu.tv wird gezeigt, dass leichtgewichtigere Ansätze auch im Jahr 2017 (und darüber hinaus) noch ihre Daseinsberechtigung haben und dass ein stabiles Microservice-Backend auf AWS auch ganz ohne Container Spaß macht.
Event: x-celerate, 10.10.2017
Speaker: Michael Bruns (Software-Entwickler und -Architekt bei inovex)
Weitere Tech-Vorträge: https://www.inovex.de/de/content-pool/vortraege
Weitere Tech-Artikel: https://www.inovex.de/blog/
Automating Google Workspace (GWS) & more with Apps Script
Müssen es denn immer gleich Docker und Kubernetes sein?!
1. Müssen es denn immer
gleich Docker und
Kubernetes sein?!
Michael Bruns
inovex GmbH
2. › I’m perfectly fine with using Docker or Kubernetes
› Really!
› The same goes for Docker Swarm, Rocket, Rancher, …
› No kidding!
› I just like to use the right tool for the job in a proper way
2Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
Disclaimer
3. 3Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
Use the right tool for the job...
...and use it wisely!
4. 4Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
Please allow me to introduce myself:
› Software developer, architect, ...
› AWS fanboy
› Built quite a bit of waipu.tv
› http://sayat.me/mbruns
Michael Bruns
inovex GmbH
5. 5Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
What did we build?
AuthRegistration PlayoutEPG Recording
Users Streaming
......
Third
Party
...
6. › Don’t build a platform, use one - in our case: AWS
› Use what’s already there: EC2, RDS, S3, Elasticsearch,
Kinesis, Route53, Lambda ...
› Add shared stuff (e.g. JVM, nginx) to base image (AMI)
› Leave the rest to the services
6Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
How did we build it?
7. › Foster DevOps, i.e. tear down all political and
technological barriers
› Choose the right tool for the job:
Terraform, GitLab CI, Prometheus, …
› Make infrastructure reproducible
7Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
How did we build it?
8. › 50+ EC2 instances, 25+ Auto-Scaling Groups,
25+ ELBs, 75+ Security Groups
› ~30m objects / 3+ TB in S3 Buckets
› ~60m documents stored in Elasticsearch
› 50+ Git Repositories with GitLab CI
8Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
What did we use?
9. › ~10 Lambdas (growing a lot)
› 5 PostgreSQL databases, 6 Redis Caches
› 75+ DNS entries
› Java, JS, Clojure (and some Ruby, Lua, Go, …)
› ~15 people working in 5+ locations
9Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
What did we use?
10. › Declarative definition of infrastructure
› Reproducible
› Local vs remote states
› Easily understable
10Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
Terraform
11. 11Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
Terraform - Examples
12. 12Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
Terraform - Examples
13. › Continuous Integration & Deployment
› Pipelines
› Stages, Environments, Variables, Tags, …
› Easy integration of runners
13Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
GitLab CI
14. 14Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
GitLab CI - Examples
15. 15Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
GitLab CI - Examples
16. 16Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
GitLab CI - Examples
17. 17Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
The whole pipeline
Local Git
Repo
GitLab
Repo
GitLab CI Build
(Gradle,
Leiningen, …)
GitLab CI
Deployment
(Terraform)
Dev
GitLab CI
Deployment
(Terraform)
GitLab CI
Deployment
(Terraform)
Preview Prod
auto auto
manually manually
GitLab CI
Tests
auto
GitLab CI
Tests
auto
18. 18Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
So why didn’t we use
Docker and Kubernetes?
19. › Which problem are you actually trying to solve?
› Will Docker and/or Kubernetes really stop you from
making the same old mistakes?
› Don’t you want to avoid complexity and get going?
› Is it really the platform you want to start with?
19Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
Don’t put the cart before the horse!
20. 20Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
The Turducken - Creation
http://www.seriouseats.com/2012/11/the-food-lab-the-ulimate-turducken.html
21. 21Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
The Turducken - Result
http://www.seriouseats.com/2012/11/the-food-lab-the-ulimate-turducken.html
22. › Kubernetes & Docker is a cloud in the cloud
› It adds several layers of abstraction
› It takes an experienced person to handle it
› You should prepare the interior first, and add the outer
layers when you know how the interior works
22Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
The Turducken - Analogy
23. › We know how the interior works
› We have loosely coupled services
› We know which load to expect, how many customers to
expect, we have a working deployment pipeline, ...
› Maybe we should start using Kubernetes now after all?!
23Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
The Turducken - Conclusion
24. 24Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
So everything is great
without Docker and Kubernetes?
25. › Real-life conversation from another project:
› Manager: “We need Microservices!”
› Me: “Ok. Why?”
› Manager: “Err…”
› Me: “Did you at least talk to Dev and Ops?”
› Manager: “Err…”
25Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
When to consider a platform right away?
26. › Real-life conversation from another project:
› Me: “Can we operate the VMs with our team?”
› Manager: “No, the Ops team does that.”
› Me: “Can we shift people from the Ops team to our team?”
› Manager: “No.”
› Me: “Ok… Then I need to talk to the Ops team.”
› Manager: “You can’t, they’re too busy with their roadmap.”
26Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
When to consider a platform right away?
27. › Real-life conversation from another project:
› Me: “We need two small VMs, one per data center.”
› Ops: “We don’t do it that way. You’ll get three per
data-center, 64 GB RAM and 6 CPUs each.”
› Me: “What?! Well, alright... Is it possible to get them
by this afternoon?”
› Ops: “Nah, average delivery time is eight weeks.”
27Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
When to consider a platform right away?
28. 28Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
Tools will not fix your people issues!
Thanks to @IanDCrosby for the inspiration!
29. 29Müssen es denn immer gleich Docker und Kubernetes sein?! - Michael Bruns
One final note...
Both lines have the same length?
Don’t believe anything
just because it’s written on a slide!
Thanks to @danielbryantuk for the inspiration!
>
>
<
<
30. Vielen Dank
Michael Bruns
inovex GmbH
Ludwig-Erhard-Allee 6
76131 Karlsruhe
michael.bruns@inovex.de
Twitter: @der_miggel Feedback:
http://sayat.me/mbruns