2000 Build-Jobs, 35 aktive Entwicklungsprojekte, 250 Entwickler – um in diesem Setting die Build-Umgebung flexibel und gleichzeitig reproduzierbar zu halten, kommt bei Infonova ein Technologie-Stack bestehend aus Mesos, Docker, CoreOS und OpenStack zum Einsatz.
2. 2
❑ Bericht über einen spannenden Technologiestack
❑ Use Case einer Super CI / CD Umgebung eines Softwareunternehmens
mittlerer Größe
❑ Alle Lösungen in der “Private Cloud” und Open Source (on-premise)On
Premise
Was erwartet euch?
3. 3
❑ 350 Angestellte, 2 Standorte, ~250 Entwickler/Ops - Telekom
❑ 1 Operations-, 2 Entwicklungs-Abteilungen
❑ ~35 Projekte gleichzeitig
❑ Projekt 40 Personen -> 5 Personen
❑ ~2500 Build Jobs
Infonova Firmenstruktur
11. 11
Hatten wir das nicht immer schon? Eine kurze
Geschichte des Jenkins Build Server (1)
?
12. 12
Hatten wir das nicht immer schon? Eine kurze
Geschichte des Jenkins Build Server (2)
❑ Jedes Projekt hatte eigenen Jenkins
❑ Overhead für kleine Projekte zu groß
❑ Globaler Jenkins Master für alle Projekte
❑ Instabil
❑ Globaler Jenkins Master mit slaves auf einer Maschine
❑ Instabil
15. 15
❑ Bei geteilten Build Environments können Seiteneffekte zwischen Builds
auftreten
❑ Prozesse bleiben hängen, Festplatte wird voll, Build Artefakte bleiben
übrig, Threads bleiben hängen, ...
❑ Aufräum jobs
❑ Prozesse
❑ Files
❑ Reset VM's
❑ Reactivate Slave
❑ …Incident Tickets…
Zuverlässig (1)
16. 16
❑ Jenkins ist keine Tool zum Cluster Management
Zuverlässig (2)
… note that the slaves are a kind of a cluster, and operating a
cluster is always a non-trivial task … Jenkins is not a
clustering middleware, and therefore it doesn't make this any
easier.
20. 20
Zuverlässig + Flexibel?
❑ Bei geteilten Build Infrastrukturen sorgt Mesos dafür, dass sich die
Container nicht in die Quere kommen (kernel Message “sacrifice child”)
❑ Flexibel: Scheduler (jenkins mesos plugin) sucht sich die besten Job Offers
heraus, auf denen seine Tasks gestartet werden können
❑ Slaves werden garantiert nur einmal Verwendet (Stefan Eder, Alexander
Prattes)
27. 27
❑ Verwaltet Ressourcen des CoreOS Clusters auf Nodes
❑ Bietet Scheduler Interface für Tasks (Jenkins Slaves)
Mesos
28. 28
❑ DSL, die auf Taskebene lesbar ist
❑ Einfach zu lesen und zu verstehen
❑ Paralleles Ausführen von Konfigurations-Tasks auf Nodes
Konfigurationsmanagement mit Ansible
33. 33
❑ User
❑ Es hat immer funktioniert, ich habe nichts geändert. Jetzt geht es
"reproduzierbar" nicht mehr (super)
❑ Wir haben immer genug Ressourcen gehabt, jetzt bricht der Build ab! (super)
❑ Ich muss wirklich fünf Sekunden warten, bis ein build startet? (ne, maximal 2)
❑ Ich musste 15 Minuten warten, bis der Build startet (keine Ressourcen?)
❑ Wow, ich kann jetzt 40 Slaves vom selben Typ parallel starten (super)
❑ Infrastruktur
❑ CoreOS hat sich upgedatet, sollte es aber nicht (nicht gut)
❑ Docker Interfaces haben intern einen anderen tx Buffer als extern (nicht gut)
❑ Docker Cache spinnt (nicht gut)
❑ CoreOS hat bei 50% RAM usage major kernel pagefaults (nicht gut)
❑ Team
❑ Wie kann ich mich mit SSH in einem Docker Container einloggen (geht nicht)
❑ Warum soll ich nicht systemd / ... / im Docker Container verwenden (don’t!)
❑ Etwas unter root user laufen zu lassen, dass mach ich nicht (...)
❑ Jenkins
❑ Überlastung Jenkins Master Netzwerkkomponente (Channels) / Verbindungen
bei 0,5 - 1% gekappt
❑ Überlastung Jenkins Master beim Schreiben der Slave Config
Erfahrungsberichte zur Migration
34. 34
❑ Logging mit cadvisor, heapster, influxdb von kubernetes geborgt und
unseren Usern zu Verfügung gestellt
❑ Link mit Mesos UI in Internen Schulungen hergezeigt
❑ Chat mit Interessierten eingerichtet (Wichtig!)
Antwort: Transparenz
35. 35
❑ Stabile Builds sind wichtig für eine gut funktionierende CI / CD
❑ Flexibel und dynamisch verwendete Ressourcen sparen Energie und Geld
❑ Habt keine scheu davor Mesos, Coreos und Docker in Produktion zu
verwenden.
❑ Wenn es euch etwas bringt
Take Away Message