Generator Kubernetes PDB (PodDisruptionBudget)
Manifest PDB w YAML i wyliczenie, ile podów można wyłączyć naraz przy danej liczbie replik
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Opcje zaawansowane
Dobrowolne wyłączenia
Przy 3 replikach (zakładając, że wszystkie pody są gotowe) można jednocześnie wyłączyć: 2; zostaje minimum 1.
Manifest PodDisruptionBudget (YAML)
Linii YAML
Rozmiar
Repliki
Minimum działających
Naraz do wyłączenia
PDB nie gwarantuje liczby replik — dopasuj go do Deploymentu i strategii aktualizacji.
Zastosowanie w klastrze (kubectl)
Ściąga: ile podów można wyłączyć naraz
| Repliki | Minimum działających | Naraz do wyłączenia | Ocena |
|---|---|---|---|
| 1 | 1 | 0 | Blokuje drain |
| 2 | 1 | 1 | OK |
| 3 | 1 | 2 | OK |
| 4 | 1 | 3 | OK |
| 5 | 1 | 4 | OK |
| 6 | 1 | 5 | OK |
| 10 | 1 | 9 | OK |
minAvailable czy maxUnavailable?
minAvailable ustawiasz, gdy wiesz, ile podów musi działać zawsze (np. kworum 2 z 3). maxUnavailable, gdy ważne jest tempo: „najwyżej 1 pod naraz". W jednym PDB podajesz tylko jedno z tych pól. Wartość to liczba całkowita albo procent; procenty są zaokrąglane w górę do pełnych podów.
Pułapka: PDB blokujący kubectl drain
Gdy minAvailable jest równe liczbie replik albo większe (np. Deployment z jedną repliką i minAvailable: 1), liczba podów do wyłączenia wynosi 0. Eksmisje są wtedy odrzucane i węzeł nie da się opróżnić. Przy N replikach zostaw zapas: zwykle minAvailable ≤ N − 1.
Co PDB chroni, a czego nie
PDB działa przy dobrowolnych wyłączeniach, np. kubectl drain i aktualizacji węzłów (przez API eksmisji). Nie chroni przed awarią węzła ani przed zwykłym kubectl delete pod. Tempem rolling update Deploymentu steruje jego strategia aktualizacji, nie PDB.
unhealthyPodEvictionPolicy
IfHealthyBudget (zachowanie domyślne): pod uruchomiony, ale niegotowy, można usunąć tylko wtedy, gdy budżet jest zdrowy. AlwaysAllow: niegotowe pody można usuwać zawsze, co odblokowuje drain przy zawieszonych podach, ale kosztem dostępności. Pole musi być obsługiwane przez wersję Twojego klastra.
Jak to liczymy
Procent zamieniamy na liczbę podów, zaokrąglając w górę. Dla minAvailable: minimum działających = wartość, naraz do wyłączenia = repliki − minimum. Dla maxUnavailable: naraz do wyłączenia = wartość, minimum = repliki − wartość. Zakładamy, że wszystkie pody są gotowe. Twój przykład: minAvailable: 1 przy 3 replikach daje minimum 1 działających i 2 do wyłączenia naraz.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator PodDisruptionBudget
PodDisruptionBudget (PDB) chroni dostępność aplikacji w Kubernetes podczas dobrowolnych przerw — drainowania i aktualizacji węzłów albo usuwania węzłów przez autoskaler klastra. Określa, ile podów musi pozostać działających. Generator składa gotowy manifest YAML i od razu liczy, ile podów da się wyłączyć naraz przy podanej liczbie replik.
minAvailable a maxUnavailable
| Pole | Znaczenie |
|---|---|
| minAvailable | minimum podów, które muszą działać |
| maxUnavailable | maksimum podów, które mogą być niedostępne |
Wartości mogą być liczbą (np. 2) lub procentem (np. 50%). Generator przyjmuje liczbę całkowitą od 1 albo procent od 1% do 100%. Zera nie przyjmuje: minAvailable: 0 niczego nie chroni, a maxUnavailable: 0 blokuje każdą eksmisję.
Przykład manifestu PDB w YAML
Wynik dla domyślnych ustawień formularza:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: app-pdb
namespace: default
spec:
minAvailable: 1
unhealthyPodEvictionPolicy: IfHealthyBudget
selector:
matchLabels:
app: myapp
Pod manifestem narzędzie podaje polecenia kubectl apply -f app-pdb.yaml i kubectl get pdb app-pdb -n default. Wartości etykiet, które YAML odczytałby jako liczbę lub wartość logiczną (np. 2, true, yes), trafiają do pliku w cudzysłowie, bo matchLabels przyjmuje wyłącznie tekst.
Kiedy stosować PDB?
- bazy danych i systemy wymagające kworum,
- usługi o wysokich wymaganiach dostępności (SLA),
- aplikacje obsługujące ruch produkcyjny 24/7,
- klastrowane komponenty (np. Kafka, Elasticsearch).
unhealthyPodEvictionPolicy
Pole decyduje, co zrobić z podami, które działają (faza Running), ale nie przechodzą sondy gotowości. IfHealthyBudget to zachowanie domyślne: taki pod można usunąć tylko wtedy, gdy aplikacja ma już tyle zdrowych podów, ile wymaga budżet. Wartość AlwaysAllow pozwala usuwać niegotowe pody mimo budżetu — zapobiega blokowaniu aktualizacji przez zawieszone instancje, ale podczas awarii może dodatkowo obniżyć dostępność. Generator domyślnie wpisuje IfHealthyBudget, a AlwaysAllow ustawisz w opcjach zaawansowanych. Pole jest w wersji beta od Kubernetes 1.27 i stabilne od 1.31, więc na starszym klastrze sprawdź, czy jest obsługiwane.
Jak działa generator i sam mechanizm budżetu
Generator składa manifest YAML z danych, które wpiszesz w formularzu: nazwy obiektu i namespace, selektora etykiet oraz jednego z dwóch pól budżetu. Nazwy sprawdza według reguł Kubernetes (małe litery, cyfry i myślniki, do 63 znaków), a klucz etykiety może mieć prefiks, np. app.kubernetes.io/name. Wynikiem jest obiekt PodDisruptionBudget z grupy policy/v1, który nie tworzy i nie kontroluje podów, tylko informuje klaster, ile podów pasujących do selektora może zniknąć w wyniku operacji dobrowolnej. Zmniejszenie liczby replik Deploymentu i rolling update usuwają pody bez sprawdzania PDB.
Mechanizm opiera się na API Eviction. Narzędzie takie jak kubectl drain nie usuwa podów bezpośrednio, lecz wysyła dla każdego z nich żądanie eksmisji. API sprawdza bieżący stan: ile podów z selektora jest gotowych i zdrowych, a potem porównuje wynik z budżetem. Jeśli eksmisja zeszłaby poniżej minAvailable albo przekroczyła maxUnavailable, żądanie zostaje odrzucone (kod HTTP 429), a klient ponawia próbę. Drain czeka wtedy, aż budżet pozwoli.
W jednym spec podaje się tylko jedno z dwóch pól budżetu — minAvailable i maxUnavailable wykluczają się wzajemnie. Procenty przelicza kontroler klastra na podstawie liczby replik oczekiwanej przez Deployment, StatefulSet lub ReplicaSet i w obu trybach zaokrągla wynik w górę do pełnego poda. Generator stosuje ten sam wzór, gdy wpiszesz liczbę replik, i pokazuje minimum działających podów oraz liczbę podów do wyłączenia naraz.
Przykład krok po kroku: cztery repliki, minAvailable 2
- Zakładamy aplikację działającą w 4 replikach, której pody mają etykietę
app: myapp. - W selektorze wpisujesz klucz
appi wartośćmyapp— dokładnie ten sam zestaw etykiet, który noszą pody. Jeśli etykieta się nie zgadza, budżet nie obejmie żadnego poda i niczego nie zabezpieczy. - Ustawiasz
minAvailable: 2. Oznacza to, że w każdej chwili co najmniej 2 z 4 podów muszą pozostać dostępne. - Z tego wynika górna granica dobrowolnych przerw przy pełnej obsadzie: 4 − 2 = 2 pody. Tyle może zniknąć jednorazowo.
- Jeśli jeden pod jest już niedostępny (trwa restart albo rolling update), dostępne są 3 pody, więc budżet pozwala usunąć tylko 3 − 2 = 1 pod.
- Ten sam efekt daje
maxUnavailable: 2przy 4 replikach — dopuszczalne są 2 niedostępne pody, czyli wymagane pozostają 4 − 2 = 2 działające. W manifeście wybierasz jedno z tych pól, nigdy oba naraz.
Skutek dla drainowania: węzeł z dwoma podami tej aplikacji opróżni się bez oporu, ale trzecie żądanie eksmisji zostanie odrzucone i operacja poczeka, aż usunięte pody wstaną na innych węzłach. Przy 3 replikach i wartości 50% przeliczenie jest mniej oczywiste: 50% z 3 to 1,5, a Kubernetes zaokrągla w górę do 2. Dla minAvailable daje to 2 wymagane pody i 1 do wyłączenia naraz, dla maxUnavailable odwrotnie: 2 do wyłączenia i 1 wymagany.
Typowe ustawienia PDB przy 1–5 replikach
W każdej komórce pierwsza liczba to minimum działających podów, druga to liczba podów, które można wyłączyć jednocześnie, przy założeniu, że wszystkie pody są gotowe. Wartości policzono tym samym wzorem, którego używa generator.
| Ustawienie | 1 replika | 2 repliki | 3 repliki | 5 replik |
|---|---|---|---|---|
| minAvailable: 1 | 1 / 0 | 1 / 1 | 1 / 2 | 1 / 4 |
| maxUnavailable: 1 | 0 / 1 | 1 / 1 | 2 / 1 | 4 / 1 |
| minAvailable: 50% | 1 / 0 | 1 / 1 | 2 / 1 | 3 / 2 |
| maxUnavailable: 50% | 0 / 1 | 1 / 1 | 1 / 2 | 2 / 3 |
Zero po ukośniku oznacza, że drain zostanie zablokowany. Przy jednej replice każdy maxUnavailable pozwala wyłączyć jedyny pod, więc budżet nie daje wtedy żadnej ochrony.
Pola manifestu i ich znaczenie
| Pole | Dozwolone wartości | Znaczenie |
|---|---|---|
| apiVersion | policy/v1 | Grupa i wersja API wymagana dla obiektu PodDisruptionBudget. |
| kind | PodDisruptionBudget | Typ obiektu tworzonego w klastrze. |
| metadata.name | nazwa, np. app-pdb | Nazwa obiektu widoczna w klastrze i w kubectl get pdb. |
| metadata.namespace | nazwa, np. default | PDB działa tylko na pody z tego samego namespace. |
| spec.minAvailable | liczba (np. 2) lub procent (np. 50%) | Minimum podów, które muszą pozostać dostępne. |
| spec.maxUnavailable | liczba lub procent | Maksimum podów, które mogą być jednocześnie niedostępne. |
| spec.selector.matchLabels | pary klucz: wartość, np. app: myapp | Wskazuje pody objęte budżetem; musi zgadzać się z etykietami podów. |
| spec.unhealthyPodEvictionPolicy | IfHealthyBudget (domyślnie) lub AlwaysAllow | Przy AlwaysAllow niegotowe pody są usuwane mimo budżetu, co odblokowuje aktualizacje. |
| minAvailable razem z maxUnavailable | niedozwolone w jednym spec | W manifeście podaje się tylko jedno z tych pól. |
Jak używać generatora w praktyce
- Skopiuj selektor z Deploymentu — etykiety w matchLabels muszą być identyczne z tymi na podach, a namespace PDB taki sam jak namespace aplikacji.
- Wybierz jedno pole budżetu i trzymaj się konwencji: albo opisujesz stan wymagany (minAvailable), albo tolerancję na przerwy (maxUnavailable). Gotowe przyciski w formularzu ustawiają cztery częste warianty: minAvailable 1, kworum 2, maksymalnie 1 niedostępny i połowę niedostępną.
- Licz wartości od docelowej liczby replik i wpisz ją w pole „Liczba replik”. Narzędzie ostrzeże, gdy budżet nie pozwala wyłączyć żadnego poda (drain stanie) albo pozwala wyłączyć wszystkie (brak ochrony), a tabela pod wynikiem pokaże ten sam budżet dla 1–10 replik.
- Przetestuj manifest przez drain węzła w środowisku testowym. Po wdrożeniu
kubectl get pdbpokaże w kolumnie ALLOWED DISRUPTIONS, ile podów klaster faktycznie pozwala wyłączyć; 0 przy działających replikach zwykle oznacza zły selektor albo zbyt ostry budżet.
Czego narzędzie nie sprawdza
- Nie weryfikuje selektora względem klastra — generator wypisuje wpisane dane, nie wie, czy etykieta app: myapp istnieje na jakimkolwiek podzie ani czy pokrywa właściwe obciążenie.
- Nie zna bieżącego stanu podów — wyliczenie zakłada, że wszystkie wpisane repliki są gotowe. Klaster liczy budżet w chwili eksmisji, więc przy podach w trakcie restartu dopuszczalnych przerw będzie mniej.
- Nie chroni przed przerwami niedobrowolnymi — awaria węzła, brak pamięci czy zabicie procesu omijają budżet całkowicie. PDB nie jest mechanizmem wysokiej dostępności samym w sobie.
- Nie wykrywa konfliktów między budżetami — kilka obiektów PDB obejmujących te same pody może wzajemnie blokować drainowanie, a narzędzie tego nie zasygnalizuje.
Najczęstsze pytania
Czy PDB chroni przed awarią węzła?
Nie. Działa wyłącznie przy dobrowolnych operacjach przechodzących przez API Eviction, np. kubectl drain. Przed awarią chronią repliki rozłożone na różne węzły.
Dlaczego kubectl drain nie kończy się mimo poprawnie wyglądającego PDB?
Najczęściej budżet jest zbyt restrykcyjny (ALLOWED DISRUPTIONS wynosi 0) albo selektor nie pasuje do etykiet podów. Winowajcą bywa też pod zawieszony bez gotowości — wtedy pomaga unhealthyPodEvictionPolicy: AlwaysAllow albo naprawa samej aplikacji.
Jak dobrać wartość minAvailable?
Dla systemów z kworum minAvailable równa się większości replik, np. 2 z 3. Dla bezstanowych usług zwykle wystarcza co najmniej 1 działający pod albo maxUnavailable: 1.
Czy PDB blokuje usunięcie poda przez kubectl delete pod?
Nie. Budżet działa tylko przy operacjach przechodzących przez API Eviction, a ręczne usunięcie poda omija ten mechanizm.
Czy można ustawić jednocześnie minAvailable i maxUnavailable?
Nie. Te pola wykluczają się wzajemnie i w jednym spec podaje się tylko jedno z nich. Wybierz to, które lepiej opisuje wymaganie: stan minimalny albo tolerancję na przerwy.
Czy PDB ma sens przy jednej replice?
Przy minAvailable: 1 budżet blokuje każdą dobrowolną przerwę, bo nie ma zapasu replik, a przy maxUnavailable: 1 nie chroni wcale. Przy jednej replice sensowniej jest najpierw zwiększyć liczbę replik, a budżet ustawić dopiero potem.