Kubernetes in der Praxis Tobias Schwab, Co-Founder von PhraseApp
http://bit.ly/k8s-praxis
Architektur von PhraseApp ● ● ● ● ● ● ●
monolithische Ruby on Rails Anwendung Web/API-Komponente Asynchrone Hintergrundprozesse Message Queue: SQS Relationale Datenbank: MySQL Such-Index: ElasticSearch Cache: Redis
Architektur von PhraseApp Benutzerin
CLI-Client
WWW / API
SQS
Redis
ElasticSearch
Workers
MySQL
Problemstellung ● ● ● ●
Konfigurationsmanagement Releasezyklus Horizontale Skalierung Ressourcenauslastung
Konfigurationsmanagement ● ● ● ● ●
Betriebsystem: Kernel, Betriebssystem Version Pakete: Datenbanktreiber, libxml, etc. Laufzeitumgebung: ruby Bibliotheken (gems): Ruby on Rails, nokogiri, etc. Quelltext und Assets (JavaScript, CSS, Bilder, etc.)
Konfigurationsmanagement: Updatezyklus
app
N x pro Tag
gems
1 x pro Woche
OS packages
1 pro Monat
ruby
1 mal pro Quartal
OS
1-2 x pro Jahr
Releasezyklus ● ● ● ●
kleine, unabhängige Änderungen mehrmals täglich automatisiert wiederholbar
Skalierung und Ressourcenauslastung
> 3x Wochenende
Continuous Delivery Software schneller und häufiger ● ● ●
bauen testen veröffentlichen
Prinzipien ● ● ●
jeder kann jederzeit releasen DevOps: “you build it, you run it!” Automatisierung
Continuous Delivery Zyklus
Build
Test
Release
Validate
Containervirtualisierung ● ●
leichtgewichtig Isolation von ○ ○ ○ ○
● ●
CPU Hauptspeicher Dateisystem Netzwerk
immutable infrastructure docker, containerD, rkt, etc.
Demo
Containerorchestrierung Verteilung von Containern auf einer Menge von Knoten (Cluster) ● ● ● ● ●
Lastverteilung Replikation Überwachung und Ausfallsicherung Service Discovery API
Kubernetes
Framework to build distributed applications
Pods Menge eng gekoppelter Container auf dem selben Knoten ● ● ● ●
separate IP geteiltes Netzwerkinterface geteiltes Dateisystem Labels
Pods: Manifest kind: Pod apiVersion: v1 metadata: name: hello labels: run: hello spec: containers: - name: hello image: phraseapp/hello:v1
Services Zugriffspunkt für eine Menge logisch verknüpfter Pods (über Labels) auf mehreren Knoten.
Services: Manifest apiVersion: v1 kind: Service metadata: labels: run: hello name: hello spec: ports: - port: 80 targetPort: 8080 protocol: TCP selector: run: hello
Services und Pods
Service run=hello version=1
Pod run=hello Pod version=1 run=hello Pod version=1 run=hello version=1
Service run=hello
Service run=hello version=2
Pod run=hello Pod version=2 run=hello Pod version=2 run=hello version=2
Schnellstart ● ● ● ● ●
minikube GKE (Google Container Engine) kubeadm ... Kubernetes the Hard Way
Demo
Kubernetes: Deployment Deklarative Änderungen an Pods ●
Image
●
ENV
●
Konfiguration
●
Labels
Deployment-Prozess
2. push hook
1. git push Github
Jenkins
3. docker push
Entwicklerin
4. kubectl set image
5. docker pull Kubernetes
Registry
Referenzen ● ● ● ● ● ● ●
https://phraseapp.com https://martinfowler.com/books/continuousDelivery.html http://chadfowler.com/2013/06/23/immutable-deployments.html https://www.docker.com https://kubernetes.io https://github.com/kubernetes/minikube https://github.com/kelseyhightower/kubernetes-the-hard-way
Wir suchen laufend Werkstudent(en|innen) und Absolvent(en|innen)! Folien: http://bit.ly/k8s-praxis
[email protected] @tobstarr