Kubernetes in der Praxis

Wir suchen laufend. Werkstudent(en|innen) und. Absolvent(en|innen)!. Folien: http://bit.ly/k8s-praxis [email protected]. @tobstarr.
573KB Größe 8 Downloads 596 Ansichten
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