
Jelto Wodstrcil

Site Reliability Engineer @ Traum-Ferienwohnungen GmbH
Slides: https://jel.to/k8s
Programm
- Grundlagen
- Evolution von Infrastruktur
- Container, Image, Docker
- Kubernetes
- Überblick
- Nodes, Pods, Deployments, Services
- Prinzipien
- Ausblicke
Grundlagen
Evolution von Deploy-Infrastruktur

Grundlagen
Containervirtualisierung
- Zusammenfassung von Anwendung, Abhängigkeiten und Konfiguration in standardisiertem Format („Image“)
- Ausführung in isolierter und kontrollierter Umgebung (cgroups, namespaces)
- Bekanntes Beispiel: Docker bzw. LXC
Grundlagen
Applicationtack

Grundlagen
Orchestrierung
- Hilfsmittel bei der Verwaltung von komplexen Systemen mit vielen Komponenten (VMs, Containern, usw.)
- Automatisierung von Workflows
- z.B Updates oder Failover
- Überwachung von Funktionalität
- Installation von Abhängigkeiten
Kubernetes Überblick
- Open-Source-System zur Automatisierung der Bereitstellung, Skalierung und Verwaltung von Container-Anwendungen
- Entwickelt von Google („Borg“), gespendet an die Cloud Native Computing Foundation

Kubernetes Überblick

Kubernetes Überblick

Kubernetes Nodes
- Physische oder virtuelle Maschinen im Cluster
- Verarbeiten anfallenden Workload
- Werden über das kubelet vom Master verwaltet
- Kubelet läuft auf jedem Node und startet und stoppt Container
- Enthält Container-Runtime
Kubernetes Pods
- Kleinste deploybare Einheit
- Besteht aus einen oder mehreren Container mit geteilten Ressourcen
- Werden vom Scheduler auf Nodes gestartet, gestoppt und verteilt
Kubernetes Deployment
- Abstraktion um Gruppe von identischen Pods zu verwalten
- Anzahl von laufenden Instanzen (Replicas)
- Aktualisierung der Pods über Rolling Updates
Kubernetes Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-server
spec:
replicas: 1
template:
metadata:
labels:
run: hello-server
spec:
containers:
- image: gcr.io/google-samples/hello-app:1.0
name: hello-server
Kubernetes Prinzipien
- Prinzipien von Kubernetes am Beispiel des Deployments
- Deklarative Konfiguration
- Skalierung
- Immutable Infrastructure
- Selbstheilende Systeme
Deklarative Konfiguration und Skalierung
Deklarative Konfiguration und Skalierung
- Sobald Desired State beschrieben wurde, stellt Kubernetes diesen her
- Deklarativer Ansatz vereinfacht Installation auf verschiedenen Clustern
- Unterstützt durch Abstraktion von Ressourcen
Deklarative Konfiguration und Skalierung
- Skalierung einfach (Replicas = n)
- Ausblick: Autoscaling
- HorizontalPodAutoscaler
- Autoscaling in Nodepool
Immutable Infrastructure
- Artefakt wird zur Laufzeit nicht verändert, stattdessen neu erstellt (instanziiert)
- Nachvollziehbar was wann wie gemacht wurde
- Einfache CI und Rollbacks
Selbstheilende Systeme
- Kubernetes überwacht Status des Systems
- Falls Actual State != Desired State werden Maßnahmen getroffen
- Healthchecking
- Readiness Probes
- Liveness Probes
Kubernetes Services
- Abstraktion für Zugriff auf Dienste
- Wahl des Backends über Label
- Routing des Traffics über iptables Rules
- Zugriff intern über my-svc.my-namespace.svc.cluster.local
source
Kubernetes Services
apiVersion: v1
kind: Service
metadata:
labels:
run: hello-server
name: hello-service
namespace: default
spec:
clusterIP: 10.15.246.205
externalTrafficPolicy: Cluster
ports:
- nodePort: 31318
port: 8080
protocol: TCP
targetPort: 8080
selector:
run: hello-server
type: LoadBalancer
Ausblicke
- Jobs/CronJobs
- Ressources
- Volumes
- DaemonSet/StatefulSet
- Templating (Helm)
Kubernetes in der Praxis
- Nutzung von Kubernetes seit 2016
- Exklusivbetrieb auf Kubernetes 2018
- Clustergröße:
- 380 CPUs
- 1.5 TB RAM
- 1400 Container
