Wie baue ich Microservices mit Kubernetes from Scratch – in 10 Tagen?

Speaker

Alexander Troppmann

Software Craftsman & Architect

 

  • software architecture
  • full-stack development
  • DevOps / k8s & cloud
  • training for dev teams
  • agile transformation

Use Case – "Tenkeyoho" Wetterstation

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
  • Tools, z.B. Terragrunt, AWS Control Tower, 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
  • Libraries einsetzen für mehrere Log Streams

DAY SEVEN Monitoring und Instrumentierung

Structured Logging

DAY SEVEN Monitoring und Instrumentierung

Distributed Tracing

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

DAY TEN

Wie geht’s weiter? (Ausblick)

Kubernetes und Cloud-native Patterns, CNCF Landscape, Medium.com

THANK YOU!

Alexander Troppmann

Software Craftsman & Architect

 

  • XING: bit.ly/2P4UZoo
  • https://www.linkedin.com/in/atroppmann/
  • me@talex.dev