Implementeren, schalen en monitoren van een stateful-applicatie

Introductie tot Kubernetes

Frank Heilmann

Platform Architect and Freelance Instructor

Recap stateless apps

  • Korte recap: stateless apps komen overeen met "Deployments" in Kubernetes
  • Gebruik je als elke Pod precies dezelfde taken heeft
  • Stateful apps hebben Pods die bij elkaar horen in een set, maar aan verschillende taken en data kunnen werken
  • Veel van wat we leerden over Deployments geldt ook voor StatefulSets
Introductie tot Kubernetes

Stateful applicaties

  • Stateful apps:

    • algemeen concept
    • passen goed bij Kubernetes
    • slaan state op
  • Bij onderbreking of stop kan een nieuwe replica (Pod) de opgeslagen state lezen en doorgaan vanaf die state

  • Voorbeeld:
    • Een database-backend (bijv. PostgreSQL) levert data aan een frontend met 3 Pods.
    • Telkens wanneer we data updaten via een Pod, moet die data worden gepersisteerd
    • Als een Pod stopt, wordt een nieuwe gemaakt die de opgeslagen state moet oppakken
Introductie tot Kubernetes

Kubernetes StatefulSets

  • Stateful apps vertaal je naar "Kubernetes StatefulSets"
  • Een voorbeeldmanifest bevat dezelfde secties als:
    • apiVersion, kind, metadata, spec, template
  • replicas bepaalt het aantal Pods in de StatefulSet
  • Meer over selector later
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: <deployment name>
  labels:
    app: <a label for the application>
spec:
  replicas: <number of initial replicas>
  selector:
    matchLabels:
      app: <matches the label above>
  template:
    metadata:
      labels:
        app: <label to be given to each pod>
    spec:
      containers:
      - name: <container name>
        image: <the image to be used>
        ports:
        - containerPort: <ports for networking>
Introductie tot Kubernetes

Deployen naar een Kubernetes-cluster

  • StatefulSet wordt vergelijkbaar gedeployed als Deployments: kubectl apply -f <manifest.yml>
  • Na deployen wordt een StatefulSet anders aangemaakt dan een Deployment:
    • Pods worden één voor één gemaakt, niet allemaal tegelijk zoals bij een Deployment
    • Pods krijgen voorspelbare namen zoals pod-0, pod-1, pod-2, etc.
  • Dit betekent: in tegenstelling tot Pods van een Deployment hebben Pods van een StatefulSet een identiteit en state
  • Daardoor kunnen verschillende Pods in een StatefulSet met verschillende identiteit verschillende rollen hebben
Introductie tot Kubernetes

Een StatefulSet schalen

  • Net als Deployments kun je StatefulSets opschalen of afschalen:
    • Pas het aantal replicas aan in de manifest en apply opnieuw,
    • Of gebruik het commando kubectl scale statefulsets ...
  • Bij opschalen worden nieuwe Pods één voor één gemaakt:
    • bijv. pod-0, pod-1, pod-2, eerst pod-3, daarna pod-4 wordt toegevoegd
  • Bij afschalen worden laatst gemaakte Pods eerst verwijderd:
    • bijv. eerst pod-4, dan pod-3
Introductie tot Kubernetes

Een StatefulSet monitoren

  • Net als bij Deployments laat monitoring je reageren op problemen zoals storingen, piekbelasting of ontbrekende storage
  • Hier gebruiken we kubectl voor basis-monitoring
  • Typische commando’s: hetzelfde als bij Deployments
  • Voorbeeld 1: kubectl get pods toont alle pods in een StatefulSet met hun huidige status
  • Voorbeeld 2: kubectl get services toont alle services die een StatefulSet kan gebruiken
Introductie tot Kubernetes

Laten we oefenen!

Introductie tot Kubernetes

Preparing Video For Download...