Implementarea, scalarea și monitorizarea unei aplicații cu stare

Introducere în Kubernetes

Frank Heilmann

Platform Architect and Freelance Instructor

Recapitulare: Aplicații fără stare

  • Recapitulare: aplicațiile fără stare corespund „Deployment-urilor" în Kubernetes
  • Utilizate când fiecare Pod al aplicației are exact aceleași sarcini
  • Aplicațiile cu stare necesită Pod-uri care formează un set, dar pot lucra pe sarcini și date diferite
  • Majoritatea cunoștințelor despre Deployment-uri se aplică și StatefulSet-urilor
Introducere în Kubernetes

Aplicații cu stare

  • Aplicații cu stare:

    • concept general
    • se integrează bine în Kubernetes
    • salvează o stare
  • La întrerupere sau oprire, un nou Pod poate citi starea salvată și poate continua din acel punct

  • Exemplu:
    • Un backend de baze de date (ex. PostgreSQL) furnizează date unui frontend folosind 3 Pod-uri.
    • La fiecare actualizare a datelor printr-un Pod, datele trebuie persistate
    • Când un Pod se încheie, unul nou este creat și preia starea salvată
Introducere în Kubernetes

Kubernetes StatefulSets

  • Aplicațiile cu stare corespund „Kubernetes StatefulSets"
  • Un manifest exemplu conține aceleași secțiuni:
    • apiVersion, kind, metadata, spec, template
  • replicas definește numărul de Pod-uri din StatefulSet
  • Mai multe despre selector ulterior
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>
Introducere în Kubernetes

Implementarea într-un cluster Kubernetes

  • StatefulSet se implementează similar cu Deployments: kubectl apply -f <manifest.yml>
  • Odată implementat, un StatefulSet este creat diferit față de un Deployment:
    • Pod-urile sunt create unul câte unul, nu simultan ca în un Deployment
    • Pod-urile primesc nume previzibile: pod-0, pod-1, pod-2 etc.
  • Spre deosebire de Pod-urile unui Deployment, Pod-urile unui StatefulSet au identitate și stare proprie
  • Astfel, Pod-uri diferite ale unui StatefulSet pot îndeplini roluri diferite în aplicație
Introducere în Kubernetes

Scalarea unui StatefulSet

  • Ca și Deployment-urile, StatefulSet-urile pot fi scalate:
    • Modificați numărul de replicas în manifest și reaplicați,
    • Sau folosiți comanda kubectl scale statefulsets ...
  • La scalare în sus, Pod-urile noi sunt create unul câte unul:
    • ex: pod-0, pod-1, pod-2, apoi pod-3, ulterior pod-4
  • La scalare în jos, ultimele Pod-uri create sunt șterse primele:
    • ex: mai întâi pod-4, apoi pod-3
Introducere în Kubernetes

Monitorizarea unui StatefulSet

  • Ca în cazul Deployment-urilor, monitorizarea permite reacția la probleme precum întreruperi, vârfuri de încărcare sau stocare lipsă
  • Aici folosim kubectl pentru sarcini de bază
  • Comenzi tipice: aceleași ca pentru Deployment-uri
  • Exemplul 1: kubectl get pods returnează toate Pod-urile unui StatefulSet cu starea lor curentă
  • Exemplul 2: kubectl get services returnează toate serviciile utilizate de un StatefulSet
Introducere în Kubernetes

Să exersăm!

Introducere în Kubernetes

Preparing Video For Download...