Nasazení, škálování a monitorování stavové aplikace

Úvod do Kubernetes

Frank Heilmann

Platform Architect and Freelance Instructor

Opakování: bezstavové aplikace

  • Stručné opakování: bezstavové aplikace odpovídají objektu "Deployment" v Kubernetes
  • Používají se, pokud všechny Pody aplikace plní stejné úkoly
  • Stavové aplikace potřebují Pody tvořící sadu, které však mohou zpracovávat různé úkoly a data
  • Velká část poznatků o Deployments platí i pro StatefulSets
Úvod do Kubernetes

Stavové aplikace

  • Stavové aplikace:

    • obecný koncept
    • dobře zapadají do Kubernetes
    • ukládají určitý stav
  • Po přerušení nebo zastavení může nová replika (Pod) načíst uložený stav a pokračovat v činnosti

  • Příklad:
    • Databázový backend (např. PostgreSQL) poskytuje data frontendu prostřednictvím 3 Podů.
    • Při každé aktualizaci dat přes kterýkoliv Pod musí být tato data uložena
    • Po ukončení Podu je vytvořen nový, který musí načíst uložený stav
Úvod do Kubernetes

Kubernetes StatefulSets

  • Stavové aplikace odpovídají objektu "Kubernetes StatefulSet"
  • Ukázkový manifest obsahuje stejné sekce jako Deployment:
    • apiVersion, kind, metadata, spec, template
  • replicas definuje počet Podů v StatefulSet
  • O selector více později
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>
Úvod do Kubernetes

Nasazení do clusteru Kubernetes

  • StatefulSet se nasazuje podobně jako Deployment: kubectl apply -f <manifest.yml>
  • Po nasazení se StatefulSet vytváří odlišně než Deployment:
    • Pody jsou vytvářeny postupně, ne všechny najednou
    • Pody dostávají předvídatelné názvy jako pod-0, pod-1, pod-2 atd.
  • To znamená: na rozdíl od Podů v Deploymentu mají Pody StatefulSetu identitu a stav
  • Různé Pody StatefulSetu s různou identitou tak mohou plnit různé role v aplikaci
Úvod do Kubernetes

Škálování StatefulSetu

  • StatefulSets lze škálovat nahoru i dolů, stejně jako Deployments:
    • Změnou počtu replicas v manifestu a opětovným nasazením,
    • nebo příkazem kubectl scale statefulsets ...
  • Při škálování nahoru jsou nové Pody vytvářeny postupně:
    • např. nejprve pod-0, pod-1, pod-2, poté pod-3, pak pod-4
  • Při škálování dolů jsou naposledy vytvořené Pody odstraněny jako první:
    • např. nejprve pod-4, poté pod-3
Úvod do Kubernetes

Monitorování StatefulSetu

  • Monitorování umožňuje reakci na problémy jako výpadky, špičky zatížení nebo chybějící úložiště – stejně jako u Deployments
  • Pro základní monitorování zde používáme kubectl
  • Typické příkazy: stejné jako u Deployments
  • Příklad 1: kubectl get pods vrátí všechny Pody StatefulSetu s jejich aktuálním stavem
  • Příklad 2: kubectl get services vrátí všechny služby, které StatefulSet může využívat
Úvod do Kubernetes

Pojďme procvičovat!

Úvod do Kubernetes

Preparing Video For Download...