11: Deployment — podstawy i skalowanie

Deployment w Kubernetes: podstawy zarządzania

Cel zadania

Celem zadania jest zrozumienie podstaw działania Deployments w Kubernetes - jak je tworzyć, skalować i zarządzać nimi.

Teoria

Deployment w Kubernetes

  • Deployment: Obiekt zarządzający cyklem życia aplikacji — repliki, aktualizacje, rollbacki
  • ReplicaSet: Tworzony automatycznie przez Deployment — pilnuje wymaganej liczby Podów
  • Hierarchia: Deployment → tworzy ReplicaSet → tworzy Pod(y)
  • Deklaratywność: Opisujesz pożądany stan (“chcę 3 repliki”), Kubernetes dba o jego utrzymanie
  • Self-healing: Jeśli Pod umrze, ReplicaSet automatycznie tworzy nowy

Hierarchia obiektów

graph TB
    DEP["Deployment<br/>nginx-deployment"]
    DEP -->|"tworzy i zarządza"| RS["ReplicaSet<br/>nginx-deployment-7d4f8b"]
    RS -->|"utrzymuje repliki"| P1["Pod 1<br/>nginx"]
    RS -->|"utrzymuje repliki"| P2["Pod 2<br/>nginx"]
    RS -->|"utrzymuje repliki"| P3["Pod 3<br/>nginx"]

    P3 -.-|"💀 Pod umiera"| NEW["Nowy Pod 3<br/>nginx"]
    RS -->|"self-healing"| NEW

    style DEP fill:#e3f2fd,stroke:#1976d2
    style RS fill:#fff3e0,stroke:#f57c00
    style P1 fill:#e8f5e9
    style P2 fill:#e8f5e9
    style P3 fill:#ffebee,stroke:#f44336,stroke-dasharray: 5 5
    style NEW fill:#e8f5e9,stroke:#4caf50

Nie tworzysz ReplicaSet ręcznie — Deployment robi to za Ciebie. Ty zarządzasz tylko Deploymentem.

Zadanie 1: Tworzenie pierwszego Deploymentu

1.1. Utwórz plik nginx-deployment-XX.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-XX
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-XX
  template:
    metadata:
      labels:
        app: nginx-XX
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

1.2. Wdróż Deployment i obserwuj tworzenie podów:

  1. W pierwszym terminalu uruchom:
    kubectl get pods -w
    
  2. W drugim terminalu wdróż deployment:
    kubectl apply -f nginx-deployment-XX.yaml
    
  3. W pierwszym terminalu zobaczysz proces tworzenia poda:
    NAME                                  READY   STATUS              RESTARTS   AGE
    nginx-deployment-XX-66b8f69f4-x2pnr   0/1     ContainerCreating   0          5s
    nginx-deployment-XX-66b8f69f4-x2pnr   1/1     Running            0          15s
    

1.3. Sprawdź status deploymentu:

kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment-XX   1/1     1            1           30s

Zadanie 2: Skalowanie przez YAML

2.1. Zmodyfikuj plik zwiększając liczbę replik do 3:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-XX
spec:
  replicas: 3  # Zmiana z 1 na 3
  selector:
    matchLabels:
      app: nginx-XX
  template:
    metadata:
      labels:
        app: nginx-XX
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

2.2. Zastosuj zmiany i obserwuj proces skalowania:

  1. W pierwszym terminalu nadal obserwuj pody:
    kubectl get pods -w
    
  2. W drugim terminalu zaktualizuj deployment:
    kubectl apply -f nginx-deployment-XX.yaml
    
  3. W pierwszym terminalu zobaczysz tworzenie nowych podów:
    NAME                                  READY   STATUS              RESTARTS   AGE
    nginx-deployment-XX-66b8f69f4-x2pnr   1/1     Running            0          2m
    nginx-deployment-XX-66b8f69f4-j9dhf   0/1     ContainerCreating   0          5s
    nginx-deployment-XX-66b8f69f4-k8p9v   0/1     ContainerCreating   0          5s
    nginx-deployment-XX-66b8f69f4-j9dhf   1/1     Running            0          15s
    nginx-deployment-XX-66b8f69f4-k8p9v   1/1     Running            0          20s
    

Zadanie 3: Skalowanie przez kubectl

3.1. Zmniejsz liczbę replik do 1 używając kubectl:

  1. Obserwuj w pierwszym terminalu:
    kubectl get pods -w
    
  2. W drugim terminalu wykonaj skalowanie:
    kubectl scale deployment nginx-deployment-XX --replicas=1
    
  3. W pierwszym terminalu zobaczysz usuwanie podów:
    NAME                                  READY   STATUS        RESTARTS   AGE
    nginx-deployment-XX-66b8f69f4-x2pnr   1/1     Running       0          5m
    nginx-deployment-XX-66b8f69f4-j9dhf   1/1     Terminating   0          3m
    nginx-deployment-XX-66b8f69f4-k8p9v   1/1     Terminating   0          3m
    

Podstawowe komendy

# Status deploymentu
kubectl get deployments

# Lista podów z etykietą
kubectl get pods -l app=nginx-XX

# Szczegóły deploymentu
kubectl describe deployment nginx-deployment-XX

# Usuwanie deploymentu
kubectl delete deployment nginx-deployment-XX

Wyjaśnienie statusu deploymentu:

NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment-XX   3/3     3            3           5m
  • READY: Liczba gotowych replik / całkowita liczba replik
  • UP-TO-DATE: Liczba replik zaktualizowanych do najnowszej wersji
  • AVAILABLE: Liczba dostępnych replik
  • AGE: Czas od utworzenia deploymentu

Najczęstsze problemy

Problem Rozwiązanie
Deployment nie tworzy podów Sprawdź selector i labels
Pody nie startują Sprawdź dostępność obrazu i zasoby
Niewłaściwa liczba replik Zweryfikuj specyfikację replicas

Dobre praktyki

  1. Zawsze używaj odpowiednich etykiet
    • Dodawaj znaczące etykiety (np. app, env)
    • Używaj unikalnych wartości z numerem (-XX)
  2. Monitoruj stan deploymentu
    • Używaj kubectl get pods -w do obserwacji zmian
    • Regularnie sprawdzaj status deploymentu
  3. Dokumentuj konfigurację
    • Przechowuj pliki YAML w repozytorium
    • Komentuj ważne ustawienia

Podsumowanie

  • Deployment zarządza zestawem identycznych Podów
  • Możemy skalować aplikację przez YAML lub kubectl
  • Flaga -w pozwala obserwować zmiany w czasie rzeczywistym
  • Każda zmiana liczby replik jest widoczna w statusie podów

results matching ""

    No results matching ""