Wdrażanie, skalowanie i monitorowanie aplikacji stanowej

Wprowadzenie do Kubernetes

Frank Heilmann

Platform Architect and Freelance Instructor

Podsumowanie: aplikacje bezstanowe

  • Krótkie podsumowanie: aplikacje bezstanowe odpowiadają obiektowi „Deployment" w Kubernetes
  • Stosowane, gdy każdy Pod aplikacji wykonuje dokładnie te same zadania
  • Aplikacje stanowe wymagają Podów powiązanych w zbiór, lecz mogą wykonywać różne zadania i operować na różnych danych
  • Większość wiedzy o Deploymentach można zastosować również do StatefulSetów
Wprowadzenie do Kubernetes

Aplikacje stanowe

  • Aplikacje stanowe:

    • ogólna koncepcja
    • dobrze pasują do Kubernetes
    • zapisują pewien stan
  • Po przerwaniu lub zatrzymaniu nowa replika (Pod) może odczytać zapisany stan i kontynuować działanie

  • Przykład:
    • Backend bazy danych (np. PostgreSQL) dostarcza dane do frontendu za pomocą 3 Podów.
    • Każda aktualizacja danych przez dowolny Pod musi być utrwalona
    • Gdy Pod zostaje zakończony, tworzony jest nowy, który przejmuje zapisany stan
Wprowadzenie do Kubernetes

Kubernetes StatefulSets

  • Aplikacje stanowe odpowiadają obiektowi „Kubernetes StatefulSet"
  • Przykładowy manifest zawiera te same sekcje, co Deployment:
    • apiVersion, kind, metadata, spec, template
  • replicas definiuje liczbę Podów w StatefulSet
  • Więcej o selector w dalszej części
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>
Wprowadzenie do Kubernetes

Wdrażanie w klastrze Kubernetes

  • StatefulSet jest wdrażany podobnie jak Deployment: kubectl apply -f <manifest.yml>
  • Po wdrożeniu StatefulSet jest tworzony inaczej niż Deployment:
    • Pody są tworzone kolejno, nie wszystkie naraz jak w Deployment
    • Pody otrzymują przewidywalne nazwy: pod-0, pod-1, pod-2 itd.
  • Oznacza to: w przeciwieństwie do Podów Deploymentu, Pody StatefulSetu mają tożsamość i stan
  • Dzięki temu różne Pody StatefulSet o różnych tożsamościach mogą pełnić różne role w aplikacji
Wprowadzenie do Kubernetes

Skalowanie StatefulSet

  • Podobnie jak Deployment, StatefulSet można skalować w górę lub w dół:
    • Zmienić liczbę replicas w manifeście i ponownie zastosować,
    • Lub użyć polecenia kubectl scale statefulsets ...
  • Przy skalowaniu w górę nowe Pody są tworzone kolejno:
    • np. pod-0, pod-1, pod-2, potem pod-3, następnie pod-4
  • Przy skalowaniu w dół ostatnio utworzone Pody są usuwane pierwsze:
    • np. najpierw pod-4, potem pod-3
Wprowadzenie do Kubernetes

Monitorowanie StatefulSet

  • Podobnie jak w przypadku Deploymentów, monitorowanie pozwala reagować na różne problemy: awarie, skoki obciążenia czy brak zasobów storage
  • Do podstawowego monitorowania używamy kubectl
  • Typowe polecenia: analogiczne jak dla Deploymentów
  • Przykład 1: kubectl get pods zwraca wszystkie Pody StatefulSetu z ich bieżącym statusem
  • Przykład 2: kubectl get services zwraca wszystkie usługi używane przez StatefulSet
Wprowadzenie do Kubernetes

Czas na ćwiczenia!

Wprowadzenie do Kubernetes

Preparing Video For Download...