Driftsättning, skalning och övervakning av en tillståndskänslig applikation

Introduktion till Kubernetes

Frank Heilmann

Platform Architect and Freelance Instructor

Repetition: tillståndslösa applikationer

  • Kort repetition: tillståndslösa applikationer mappas till "Deployments" i Kubernetes
  • Används när varje Pod i applikationen utför exakt samma uppgifter
  • Tillståndskänsliga applikationer behöver Pods som hör ihop i en mängd, men kan arbeta med olika uppgifter och data
  • Mycket av det vi lärt oss om Deployments gäller även StatefulSets
Introduktion till Kubernetes

Tillståndskänsliga applikationer

  • Tillståndskänsliga appar:

    • allmänt koncept
    • passar väl i Kubernetes
    • sparar ett visst tillstånd
  • När de avbryts eller stoppas kan en ny replik (Pod) läsa det sparade tillståndet och fortsätta därifrån

  • Exempel:
    • En databas-backend (t.ex. PostgreSQL) levererar data till en frontend via 3 Pods.
    • Varje gång data uppdateras via någon av Pods måste den datan sparas persistent
    • När en Pod avslutas skapas en ny, som behöver läsa in det sparade tillståndet
Introduktion till Kubernetes

Kubernetes StatefulSets

  • Tillståndskänsliga applikationer motsvarar "Kubernetes StatefulSets"
  • Ett exempelmanifest består av samma sektioner som:
    • apiVersion, kind, metadata, spec, template
  • replicas anger antalet Pods i StatefulSet
  • Mer om selector senare
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>
Introduktion till Kubernetes

Driftsättning i ett Kubernetes-kluster

  • StatefulSet driftsätts på liknande sätt som Deployments: kubectl apply -f <manifest.yml>
  • När det väl driftsätts skapas ett StatefulSet annorlunda än ett Deployment:
    • Pods skapas en i taget, inte alla samtidigt som i ett Deployment
    • Pods får förutsägbara namn som pod-0, pod-1, pod-2 osv.
  • Det innebär: till skillnad från Pods i ett Deployment har Pods i ett StatefulSet en identitet och ett tillstånd
  • Därmed kan olika Pods i ett StatefulSet med olika identiteter fylla olika roller i en applikation
Introduktion till Kubernetes

Skalning av ett StatefulSet

  • Precis som Deployments kan StatefulSets skalas upp eller ned:
    • Antingen ändrar du antalet replicas i manifestet och tillämpar det igen,
    • eller använder kommandot kubectl scale statefulsets ...
  • Vid uppskalning skapas nya Pods en i taget:
    • t.ex. läggs pod-3 till efter pod-0, pod-1, pod-2, sedan pod-4
  • Vid nedskalning tas de senast skapade Pods bort först:
    • t.ex. först pod-4, sedan pod-3
Introduktion till Kubernetes

Övervaka ett StatefulSet

  • Precis som för Deployments möjliggör övervakning reaktioner på alla typer av problem, som avbrott, belastningstoppar eller sakrad lagring
  • Här använder vi kubectl för grundläggande övervakningsuppgifter
  • Typiska kommandon: samma som för Deployments
  • Exempel 1: kubectl get pods returnerar alla pods i ett StatefulSet med deras aktuella status
  • Exempel 2: kubectl get services returnerar alla tjänster som ett StatefulSet kan använda
Introduktion till Kubernetes

Nu kör vi en övning!

Introduktion till Kubernetes

Preparing Video For Download...