Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Generator Kubernetes PVC

Manifest PersistentVolumeClaim z rozmiarem, trybem dostępu, StorageClass i opcjonalnym Podem do testu montowania

Bezpieczne (SSL)
Przetwarzanie Lokalne
100% Darmowe
Instrukcja
  • 1
    Wprowadź dane
    Wpisz treść, wklej tekst lub załaduj plik z dysku.
  • 2
    Kliknij przycisk
    Narzędzie natychmiast przetworzy Twoje dane w przeglądarce.
  • 3
    Pobierz wynik
    Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
function runTool() {
  return "Wynik gotowy w 0.1s";
}
Puste pole = klasa domyślna klastra.
Opcje dodatkowe

PersistentVolumeClaim

20Gi

app-data w namespace default: ReadWriteOnce, Filesystem, klasa standard.

W MiB

20 480 MiB

W GB (dziesiętnie)

21,47 GB

Tryb dostępu

RWO

ReadWriteOnce

Dokumentów YAML

1

Manifest YAML (pvc.yaml)

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: app-data namespace: default spec: accessModes: - ReadWriteOnce volumeMode: Filesystem storageClassName: standard resources: requests: storage: 20Gi
233 znaków · 21 słów · 14 linii

Uwaga: Sprawdź zgodność accessMode ze StorageClass przed wdrożeniem.

Komendy kubectl

kubectl apply -f pvc.yaml kubectl get pvc app-data -n default kubectl describe pvc app-data -n default
103 znaków · 16 słów · 4 linii
Tryby dostępu (accessModes)
Tryb dostępuSkrótCo oznaczaTypowe 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)
Jednostki rozmiaru w Kubernetesie
JednostkaBajtówOdpowiednik 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

TrybSkrótZnaczenie
ReadWriteOnceRWOodczyt i zapis z jednego węzła, wiele podów na tym węźle
ReadWriteOncePodRWOPodczyt i zapis przez jeden pod w całym klastrze (tylko wolumeny CSI)
ReadWriteManyRWXodczyt i zapis z wielu węzłów równocześnie (NFS, CephFS)
ReadOnlyManyROXwiele 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: 20Gi

volumeMode

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Wpisz StorageClass, np. standard, albo zostaw pole puste. Pusty wpis usuwa storageClassName z manifestu i klaster użyje swojej klasy domyślnej.
  6. 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 exec i kubectl 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

PoleDozwolone wartościUwagi
metadata.nameNazwa DNS-1123Unikalna w namespace; małe litery, cyfry, myślniki.
metadata.namespaceNazwa namespaceBez tego pola Kubernetes użyje „default”; generator zawsze je wpisuje.
metadata.labelsapp.kubernetes.io/nameOpcjonalne; ułatwia filtrowanie, np. kubectl get pvc -l.
spec.accessModesReadWriteOnce, ReadWriteOncePod, ReadWriteMany, ReadOnlyManyZależne od StorageClass; ReadWriteMany wymaga np. NFS lub CephFS.
spec.storageClassNameNazwa klasy, pominięte lub pusty ciągPominięte pole oznacza klasę domyślną klastra. Pusty ciąg "" wyłącza dynamiczne provisionowanie i wymaga ręcznego PV (tego generator nie wpisuje).
spec.volumeModeFilesystem, BlockDomyślnie Filesystem; Block dla surowych bloków.
spec.resources.requests.storageWartość z sufiksem (Mi, Gi, Ti)Musi być dodatnia; można ją później tylko zwiększyć.
spec.selectormatchLabelsOpcjonalne; wybór PV po etykietach. Dopisz ręcznie.
spec.volumeNameNazwa PVOpcjonalne; 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 ma allowVolumeExpansion: 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.

Zainstaluj Webp.pl Miej narzędzia we własnej kieszeni!