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→ tworzyReplicaSet→ tworzyPod(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:
- W pierwszym terminalu uruchom:
kubectl get pods -w - W drugim terminalu wdróż deployment:
kubectl apply -f nginx-deployment-XX.yaml - 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:
- W pierwszym terminalu nadal obserwuj pody:
kubectl get pods -w - W drugim terminalu zaktualizuj deployment:
kubectl apply -f nginx-deployment-XX.yaml - 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:
- Obserwuj w pierwszym terminalu:
kubectl get pods -w - W drugim terminalu wykonaj skalowanie:
kubectl scale deployment nginx-deployment-XX --replicas=1 - 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
- Zawsze używaj odpowiednich etykiet
- Dodawaj znaczące etykiety (np. app, env)
- Używaj unikalnych wartości z numerem (-XX)
- Monitoruj stan deploymentu
- Używaj
kubectl get pods -wdo obserwacji zmian - Regularnie sprawdzaj status deploymentu
- Używaj
- 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
-wpozwala obserwować zmiany w czasie rzeczywistym - Każda zmiana liczby replik jest widoczna w statusie podów