Wie baue ich Microservices mit Kubernetes from Scratch – in 10 Tagen?
Use Case – "Tenkeyoho" Wetterstation
- Anemometer (Windgeschwindigkeitssensor)
- Windrichtungssensor
- Pluviometer (Niederschlagssensor)
- Thermometer (Temperatursensor)
- Hygrometer (Luftfeuchtigkeitssensor)
Master Brick
Weather Bricklet
TinkerForge Stack
WS-6147
https://www.tinkerforge.com/de/
Use Case – "Tenkeyoho" Wetterstation
Master Brick
Weather Bricklet
TinkerForge Stack
WS-6147
Sensor Node
Raspberry Pi
Use Case – "Tenkeyoho" Wetterstation
WS-6147
Sensor Node
Data Logger
Data Enricher
InfluxDB
Grafana
MQTT Broker
Kubernetes Cluster
DAY ONE
Containerisierung
"Lasst uns diese Applikation mal kurz zusammendockern."
Dockerize
- Kubernetes Pods = Multi Container
- Varianten von Containern
- Init Container (z.B. Database Migrations)
- Sidecar Container (z.B. Realtime Configuration)
- Ambassador als Proxy Container
- "App" Container für Microservices
-
size matters ;)
https://github.com/GoogleContainerTools/distroless
DAY ONE Containerisierung
CI/CD Pipeline
- Docker Builds automatisieren
- automatische Deployments
- Push aus Pipeline heraus
- Pull via GitOps
- Container Registry
- private vs. public
- extern vs. Cloud Provider
- self-hosted
DAY ONE Containerisierung
Konfiguration I
- Docker Container = Application Black Box
- 12-Factor Best-Practices
- Kubernetes Patterns
- ENV
- Secrets
- ConfigMap
- Volume Mounts
DAY ONE Containerisierung
Konfiguration II
- via ENV (oder ConfigMap etc.) konfigurierbar
- Datenbank-Anbindung
- Loglevel
- Logging Server
- Feature Flags
- Tenant
- Ports
- Metrics Export
- Exponential Retry
- K/V Store Driver
DAY ONE Containerisierung
DAY TWO
Infrastructure as Code
"Neuer Cluster? Nee, nicht schon wieder so viele Knöpfe klicken."
Ansible
- Open Source Automatisierungstool in Python
- umfangreiches Ökosystem mit Community Modules
- Inventory mit Hosts
- Login via SSH
- Host Groups
- Dynamic Inventories
- Variablen und Templates
- Playbooks und Roles
- Style: Zielzustand von Ressourcen beschreiben
DAY TWO Infrastructure as Code
Terraform
- Automatisierungstool von Hashicorp
- Provider
- Resources
- Data Sources
- Modules
- Variablen
- (Shared) State
- Workspaces
- weitere Tools, z.B. Terragrunt oder Pulumi
- Style: deklarative Beschreibung des Zielzustands
DAY TWO Infrastructure as Code
DAY THREE
Kubernetes Setup
"Deployst du noch oder orchestrierst du schon?"
Small Kubernetes
DAY THREE Kubernetes Setup
Kubernetes the Hard Way
- Kubernetes auf Bare Metal
- 3 Master Nodes
- 3 Worker Nodes
- Loadbalancer für k8s Controlplane
-
HCloud via Terraform
- Controller Manager
- Networks via CNI
- Volumes via CSI
- Firewall
- Private LAN
- LB Provisioning via CCM
DAY THREE Kubernetes Setup
Kubernetes the Easy Way
- Digital Ocean & Co.
DAY THREE Kubernetes Setup
Kubernetes in the Cloud
- EKS
- S3 Bucket und DynamoDB
- IAM Permissions, Roles, Users
- VPC, Node Groups
- ALB, Cluster Auto-Scaler
- ExternalDNS
- CloudWatch und fluent-bit
- GKE
- AKS
DAY THREE Kubernetes Setup
DAY FOUR
Kubernetes Deployment
"Und wie bekomm ich das Zeug jetzt da rein?"
YAML Manifests
- mit kubectl in der Console unsere Applikation deployen
- Deployment
- ConfigMap
- Secret
- PVC
- Service
DAY FOUR Kubernetes Deployment
Helm Charts
- mit helm in der Console ganze Packages deployen
- Prometheus-Operator und Grafana
- MQTT Broker
- Postgres Database
- InfluxDB
- Traefik oder Nginx
- (Cert Manager)
DAY FOUR Kubernetes Deployment
DAY FIVE
Kubernetes Developer Tools
"Ich kann so nicht arbeiten!"
Console
DAY FIVE Kubernetes Developer Tools
UI
DAY FIVE Kubernetes Developer Tools
Local-dev
DAY FIVE Kubernetes Developer Tools
Fun Stuff
DAY FIVE Kubernetes Developer Tools
DAY SIX
Distributed Message Streaming
Reaktive Microservices sind skalierbar, resilient, fault-tolerant und außerdem cool :)
Mosquitto MQTT Broker
DAY SIX Distributed Message Streaming
NATS.io + JetStream
DAY SIX Distributed Message Streaming
DAY SEVEN
Monitoring und Instrumentierung
Laufzeitverhalten analysieren und Microservices an Learnings anpassen
Structured Logging
- Log Entry besteht aus Message und Attributen
- Anbindung an zentralen Logging Service z.B. Graylog
- Java Application, verwendet
- Elasticsearch
- MongoDB
- maximale Größe von Log Entrys beachten
- Namen von internen Attributen
- Attribute Values nur als Text oder Integer
- Java Application, verwendet
- Libraries einsetzen für mehrere Log Streams
DAY SEVEN Monitoring und Instrumentierung
Structured Logging
DAY SEVEN Monitoring und Instrumentierung
Distributed Tracing
- OpenTelemetry als Standard
- Zipkin
- Jaeger
DAY SEVEN Monitoring und Instrumentierung
Metrics Export – Prometheus
DAY SEVEN Monitoring und Instrumentierung
Metrics Visualisation – Grafana
DAY SEVEN Monitoring und Instrumentierung
DAY EIGHT
Persistenz
Welcome to Hell_of_Persistence™ in Kubernetes!
k8s Storage Overview
DAY EIGHT Persistenz
Beispiele – Storage Types
- AWS Elastic Block Store (EBS)
- Azure Disk
- Azure File
- GCE Persistent Disk
- Network File System (NFS) storage
- vSphere VMDK volume
- HCloud Volumes
DAY SEVEN Monitoring und Instrumentierung
Access Modes
- ReadWriteOnce (RWO) — volume can be mounted as read-write by a single node
- ReadOnlyMany (ROX) — volume can be mounted read-only by many nodes
- ReadWriteMany (RWX) — volume can be mounted as read-write by many nodes
- ReadWriteOncePod (RWOP) — volume can be mounted as read-write by a single Pod
DAY SEVEN Monitoring und Instrumentierung
DAY NINE
Ingress
"Kannst du das hier mal kurz live stellen? In einer Stunde ist mein Meeting."
Kubernetes Ingress
DAY NINE Ingress
Traefik
DAY NINE Ingress
Alternativen
- Nginx :-P
- Envoy
- Kong Ingress
- AWS Loadbalancer
DAY NINE Ingress
Add-ons
DAY NINE Ingress
THANK YOU!
Alexander Troppmann
Software Craftsman & Architect
- XING: bit.ly/2P4UZoo
- https://www.linkedin.com/in/atroppmann/
Wie baue ich Microservices mit Kubernetes from Scratch – in 10 Tagen? (public)
By Alexander Troppmann
Wie baue ich Microservices mit Kubernetes from Scratch – in 10 Tagen? (public)
Slides für CloudLand Talk am Donnerstag, 1. Juli 2022 um 11 Uhr, in der Green Area.
- 322