Generator Kubernetes PVC
Manifest PersistentVolumeClaim z rozmiarem, trybem dostępu, StorageClass i opcjonalnym Podem do testu montowania
-
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 dodatkowe
PersistentVolumeClaim
app-data w namespace default: ReadWriteOnce, Filesystem, klasa standard.
W MiB
W GB (dziesiętnie)
Tryb dostępu
ReadWriteOnce
Dokumentów YAML
Manifest YAML (pvc.yaml)
Uwaga: Sprawdź zgodność accessMode ze StorageClass przed wdrożeniem.
Komendy kubectl
| Tryb dostępu | Skrót | Co oznacza | Typowe użycie |
|---|---|---|---|
| ReadWriteOnce | RWO | Odczyt i zapis z jednego węzła | Bazy danych, pojedyncze aplikacje |
| ReadWriteOncePod | RWOP | Odczyt i zapis przez jeden Pod w całym klastrze | Gwarancja jednego piszącego (tylko CSI) |
| ReadOnlyMany | ROX | Odczyt z wielu węzłów naraz | Gotowe dane, zasoby statyczne |
| ReadWriteMany | RWX | Odczyt i zapis z wielu węzłów naraz | Współdzielone pliki (NFS, CephFS) |
| Jednostka | Bajtów | Odpowiednik dziesiętny |
|---|---|---|
| Mi (mebibajt) | 1 048 576 | 1 Mi ≈ 1,05 MB |
| Gi (gibibajt) | 1 073 741 824 | 1 Gi ≈ 1,07 GB |
| Ti (tebibajt) | 1 099 511 627 776 | 1 Ti ≈ 1,10 TB |
Jak liczymy rozmiar
Mi, Gi i Ti są binarne: 1 Gi = 1024 Mi. Dla Twojego wpisu 20Gi to 20 480 MiB, czyli ok. 21,47 GB w jednostkach dziesiętnych. Zapis „G” zamiast „Gi” oznacza potęgi dziesiątki i daje mniej miejsca.
PVC w stanie Pending
Najczęstsze przyczyny: literówka w nazwie StorageClass, brak klasy domyślnej, tryb WaitForFirstConsumer (wolumen powstaje dopiero, gdy Pod go użyje) albo tryb dostępu nieobsługiwany przez klasę. Powód zobaczysz w kubectl describe pvc.
Zmiana rozmiaru
Rozmiar PVC można tylko zwiększyć, i to wtedy, gdy StorageClass ma allowVolumeExpansion: true. Zmniejszenie nie jest możliwe, więc zacznij od realnej potrzeby, a nie od zapasu na lata.
Filesystem czy Block
Filesystem (domyślny) montuje system plików w katalogu Poda. Block udostępnia surowe urządzenie przez volumeDevices; przydaje się aplikacjom, które same zarządzają dyskiem, np. niektórym bazom danych.
Namespace i usuwanie danych
PVC należy do jednego namespace i tylko Pody z tego samego namespace mogą go użyć. Usunięcie PVC może usunąć dane: o losie wolumenu decyduje reclaimPolicy, a przy wolumenach tworzonych dynamicznie bywa to Delete. Zrób kopię przed kubectl delete.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator Kubernetes PVC
PersistentVolumeClaim (PVC) to żądanie trwałego dysku w Kubernetesie. Dane przetrwają restart i usunięcie poda, a klaster dopasuje wolumen na podstawie StorageClass. Generator buduje gotowy manifest PVC w YAML (apiVersion: v1) i od razu podaje komendy kubectl do wdrożenia i sprawdzenia stanu.
Tryby dostępu
| Tryb | Skrót | Znaczenie |
|---|---|---|
| ReadWriteOnce | RWO | odczyt i zapis z jednego węzła, wiele podów na tym węźle |
| ReadWriteOncePod | RWOP | odczyt i zapis przez jeden pod w całym klastrze (tylko wolumeny CSI) |
| ReadWriteMany | RWX | odczyt i zapis z wielu węzłów równocześnie (NFS, CephFS) |
| ReadOnlyMany | ROX | wiele węzłów tylko do odczytu |
Tryb w manifeście to tylko deklaracja. O tym, czy zadziała, decyduje StorageClass: zwykłe dyski blokowe w chmurze dają zwykle wyłącznie ReadWriteOnce.
Przykład manifestu PVC
Tak wygląda wynik dla ustawień domyślnych (app-data, 20Gi, ReadWriteOnce, klasa standard):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: app-data
namespace: default
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
storageClassName: standard
resources:
requests:
storage: 20GivolumeMode
Filesystem to domyślny, sformatowany wolumen montowany jako katalog w podzie. Block daje surowe urządzenie blokowe, które w podzie podajesz w volumeDevices (devicePath), a nie w volumeMounts. Przydaje się aplikacjom, które same zarządzają dyskiem.
Jak działa generator manifestu PVC
Narzędzie nie łączy się z klastrem Kubernetes. Wypełniasz formularz: nazwa PVC, namespace, rozmiar, tryb dostępu i klasa storage, a w opcjach dodatkowych volumeMode, etykieta app.kubernetes.io/name i testowy Pod. Manifest odświeża się na bieżąco po każdej zmianie pola. Każde pole trafia do odpowiedniej sekcji: metadata.name, metadata.namespace, spec.accessModes, spec.volumeMode, spec.storageClassName, spec.resources.requests.storage. Dzięki temu nie trzeba ręcznie pilnować wcięć i struktury YAML. Pięć gotowych ustawień (RWO 20Gi, RWX 100Gi, RO 50Gi, RWOP 10Gi, Block 50Gi) ustawia tryb i rozmiar jednym kliknięciem.
Generator sprawdza podstawowe reguły poprawności. Nazwa PVC i namespace muszą być nazwą DNS-1123 (małe litery, cyfry, myślniki, do 63 znaków); wielkie litery są zamieniane na małe. Rozmiar to liczba całkowita od 1 do 999999 z jednostką Mi, Gi lub Ti, więc 1.5Gi trzeba zapisać jako 1536Mi. Nazwy zaczynające się od cyfry albo słowa, które YAML czyta jako wartość logiczną (np. yes, on), są ujmowane w cudzysłów. Generator nie weryfikuje jednak, czy wybrana StorageClass istnieje w klastrze ani czy obsługuje żądany tryb dostępu.
Obok manifestu dostajesz przeliczenie rozmiaru na MiB i GB (dziesiętnie), uwagi zależne od trybu (np. że ReadWriteMany wymaga NFS lub CephFS) oraz komendy kubectl apply -f pvc.yaml, kubectl get pvc i kubectl describe pvc z Twoją nazwą i namespace.
Narzędzie nie tworzy PersistentVolume ani nie provisionuje miejsca. To zadanie kontrolera StorageClass w klastrze. Manifest PVC jest jedynie żądaniem, które Kubernetes dopasuje do dostępnego wolumenu — dynamicznie lub statycznie. Po zastosowaniu manifestu PVC może pozostać w stanie Pending, jeśli nie ma dostępnego wolumenu lub StorageClass nie może spełnić żądania.
Przykład krok po kroku: PVC o pojemności 20Gi
- Wpisz nazwę PVC: db-data i namespace, w którym działa aplikacja. Nazwa musi być unikalna w namespace i składać się z małych liter, cyfr i myślników; nie może zaczynać się ani kończyć myślnikiem.
- Wybierz tryb dostępu: ReadWriteOnce. Ten tryb pozwala na montowanie wolumenu przez wiele podów, ale tylko w obrębie jednego węzła. Dla wielu węzłów potrzebny jest ReadWriteMany, a gwarancję jednego piszącego poda daje ReadWriteOncePod.
- Podaj rozmiar: 20Gi. Generator przelicza go na 20 480 MiB (20 × 1024) i ok. 21,47 GB w jednostkach dziesiętnych (20 × 1 073 741 824 B). Wpis „20gi” lub „20 Gi” zostanie poprawiony na 20Gi.
- Zostaw volumeMode na Filesystem (domyślny). W trybie Filesystem wolumen jest formatowany i montowany jako katalog. Block wybierz tylko wtedy, gdy aplikacja wymaga surowego urządzenia.
- Wpisz StorageClass, np. standard, albo zostaw pole puste. Pusty wpis usuwa storageClassName z manifestu i klaster użyje swojej klasy domyślnej.
- Kliknij „Generuj manifest” i skopiuj YAML do pliku pvc.yaml. Jeśli chcesz sprawdzić montowanie, zaznacz testowy Pod: manifest dostanie drugi dokument, a lista komend także
kubectl execikubectl delete pod.
Testowy Pod do sprawdzenia PVC
Opcja „Dołącz testowy Pod” dopisuje po separatorze --- Pod o nazwie <nazwa-pvc>-test na obrazie busybox:1.36.1. Montuje on PVC w katalogu /data i tworzy w nim plik .pvc-write-test, a przy ReadOnlyMany tylko listuje katalog i montuje wolumen jako readOnly. Kontener działa jako użytkownik 1000 bez uprawnień roota, z fsGroup 1000 i odebranymi capabilities. Opcja działa tylko z volumeMode Filesystem. Po potwierdzeniu, że wolumen się montuje, usuń Pod komendą z listy.
Pola manifestu PVC — zestawienie referencyjne
| Pole | Dozwolone wartości | Uwagi |
|---|---|---|
| metadata.name | Nazwa DNS-1123 | Unikalna w namespace; małe litery, cyfry, myślniki. |
| metadata.namespace | Nazwa namespace | Bez tego pola Kubernetes użyje „default”; generator zawsze je wpisuje. |
| metadata.labels | app.kubernetes.io/name | Opcjonalne; ułatwia filtrowanie, np. kubectl get pvc -l. |
| spec.accessModes | ReadWriteOnce, ReadWriteOncePod, ReadWriteMany, ReadOnlyMany | Zależne od StorageClass; ReadWriteMany wymaga np. NFS lub CephFS. |
| spec.storageClassName | Nazwa klasy, pominięte lub pusty ciąg | Pominięte pole oznacza klasę domyślną klastra. Pusty ciąg "" wyłącza dynamiczne provisionowanie i wymaga ręcznego PV (tego generator nie wpisuje). |
| spec.volumeMode | Filesystem, Block | Domyślnie Filesystem; Block dla surowych bloków. |
| spec.resources.requests.storage | Wartość z sufiksem (Mi, Gi, Ti) | Musi być dodatnia; można ją później tylko zwiększyć. |
| spec.selector | matchLabels | Opcjonalne; wybór PV po etykietach. Dopisz ręcznie. |
| spec.volumeName | Nazwa PV | Opcjonalne; wiąże PVC z konkretnym PV. Dopisz ręcznie. |
Praktyczne wskazówki
- Gi to nie GB. Mi, Gi i Ti są binarne (1 Gi = 1024 Mi), a zapis „20G” oznacza potęgi dziesiątki i daje ok. 7% mniej miejsca niż 20Gi. Generator przyjmuje tylko jednostki binarne.
- Dopasuj volumeMode do aplikacji: dla większości przypadków, także typowych baz danych, wystarczy Filesystem. Nie każda StorageClass obsługuje Block.
- Dla krytycznych danych ustaw reclaimPolicy: Retain. To pole nie należy do PVC: ustawia się je w StorageClass albo w samym PV (
persistentVolumeReclaimPolicy). Po usunięciu PVC wolumen pozostanie wtedy w stanie Released. - Sprawdź StorageClass przed wdrożeniem (
kubectl get storageclass): czy istnieje, czy jest oznaczona jako domyślna i czy maallowVolumeExpansion: true, jeśli planujesz powiększać dysk. - Pending przy klasie z volumeBindingMode WaitForFirstConsumer jest normalny: wolumen powstaje dopiero, gdy pod zacznie używać PVC. Powód innego Pending pokaże
kubectl describe pvc.
Ograniczenia narzędzia
- Nie tworzy wolumenu. Generator jedynie przygotowuje manifest; rzeczywiste provisionowanie wykonuje kontroler StorageClass w klastrze. Bez działającego kontrolera PVC pozostanie w stanie Pending.
- Nie weryfikuje StorageClass. Narzędzie nie łączy się z klastrem, więc nie sprawdzi, czy podana klasa istnieje i jakie ma parametry. Możesz wygenerować manifest dla nieistniejącej klasy.
- Nie sprawdza limitów klastra, czyli tego, czy jest wystarczająco miejsca na żądany rozmiar ani czy ResourceQuota w namespace nie zostanie przekroczona.
- Nie obsługuje zaawansowanych pól, takich jak dataSource, dataSourceRef, selector czy volumeName. Takie przypadki wymagają ręcznej edycji manifestu po wygenerowaniu. Testowy Pod nie powstanie dla volumeMode Block.
Najczęstsze pytania o Kubernetes PVC
Kto tworzy PersistentVolume dla PVC?
Przy dynamicznym provisionowaniu robi to automatycznie kontroler StorageClass. Ręcznie tworzysz PV tylko w trybie statycznym, np. dla istniejącego udziału NFS.
Czy dane przetrwają usunięcie PVC?
Zależy od reclaimPolicy wolumenu. Przy Delete, częstym w klasach dynamicznych, dysk zostanie usunięty razem z danymi; przy Retain PV przejdzie w stan Released i trzeba go ręcznie zwolnić lub usunąć.
Jak rozszerzyć PVC?
Jeśli StorageClass ma allowVolumeExpansion: true, zwiększ storage w specyfikacji i zastosuj manifest ponownie. Zmniejszenie rozmiaru PVC nie jest możliwe.
Jaki volumeMode wybrać dla bazy danych?
PostgreSQL, MySQL czy MongoDB działają na zwykłym Filesystem i to jest bezpieczny wybór. Block ma sens tylko dla oprogramowania, które wprost obsługuje surowe urządzenie blokowe.
Czy PVC jest przypisany do namespace?
Tak, PVC jest zasobem namespace'owanym i musi istnieć w tym samym namespace co pod, który go używa. Nie można go współdzielić między namespace'ami bez dodatkowych mechanizmów.
Czy można zmienić StorageClass w istniejącym PVC?
Nie, storageClassName jest niezmienne po utworzeniu PVC. Aby zmienić klasę, utwórz nowy PVC i zmigruj dane, np. jednorazowym podem kopiującym pliki.