A Kubernetes Pod fájlrendszerek alapértelmezés szerint átmenetiek. Ez összhangban van a konténerek hontalan jellegével. A tartós adatokat a tárolón kívül kell tárolni, még akkor is, ha úgy tűnik, hogy a tároló fájlrendszerében vannak. Így készíthet tartós tárolást a Kubernetesben.
A Kubernetes tartós tárolásának alapegysége a Állandó kötet. Ez absztrakció az alapvetőbb felett Hangerő.
A tartós kötetek függetlenek minden adott Pod-tól. A sima Docker-kötetekhez hasonlóan a Kubernetes-féle Állandó kötetek akkor is megmaradhatnak a fürtben, ha nincsenek Pod-ok.
A hüvelyek hozzáférést kapnak a perzisztens kötetekhez azáltal, hogy a Tartós kötetigény. Ez egy másik erőforrástípus, amely a Pod kérelmét jelenti a tartós tárolás használatára. A követelés a kérelmet kielégítő állandó köteteket képezi.
Egy alap példa
Nézzük meg, hogyan lehet létrehozni egy állandó tárolórendszert azáltal, hogy manuálisan beállítja az Állandó kötet és a Tartós kötet követelést. Minden erőforrás a saját jegyzékfájljába kerül. Ezekkel a fájlokkal a fürtjére alkalmazhatja kubectl apply
.
Hozzon létre egy állandó kötetet
Kezdje a kötet létrehozásával:
apiVersion: v1 kind: PersistentVolume metadata: name: my-volume namespace: pvc-demo spec: storageClassName: manual capacity: storage: 2Gi accessModes: - ReadWriteOnce hostPath: path: /mnt/data
Ez a meghatározás létrehoz egy úgynevezett kötetet my-volume
. 2Gi kapacitású, és itt tároljuk /mnt/data
a fogadó Node-on. Mivel ezt a kötetet manuálisan készítjük, a storageClassName
értékre van állítva manual
. A tárolási osztályok megadhatják, hogy a kötetek csak az azonos osztályt igénylő kötetekre vonatkoznak.
Hozzon létre egy állandó kötetre vonatkozó követelést
Mostantól konfigurálhatja az állandó kötetre vonatkozó követelést:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-volume-claim namespace: pvc-demo spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
A követelés 1Gi tárhelyet igényel egy kötetből a manual
osztály. A korábban létrehozott kötet megfelelhet ezeknek a feltételeknek. A követelés létrehozásakor Kubernetesnek fel kell ismernie ezt, és a követelést a kötethez kell kötnie.
Ha megvizsgálná a kötet és a követelés részleteit, látná, hogy mindkettő állapotot mutat Bound
.
kubectl get pv my-volume kubectl get pvc my-volume-claim
Adjon hozzá egy hüvelyt
Az utolsó lépés a kötet igénylésének felhasználása, hogy tartós tárhelyet adjon a Podhoz.
apiVersion: v1 kind: Pod metadata: name: my-pod namespace: pvc-demo spec: containers: - name: my-container image: my-image:latest volumeMounts: - mountPath: /path/in/container name: my-pod-volume volumes: - name: my-pod-volume persistentVolumeClaim: claimName: my-volume-claim
Belül volumes
szakaszban meg van adva a hivatkozás a Tartós kötet követelésre. A kötetről nem kell más információt megadnia. A Pod a követelést használja, amely megadja a kötetet, amelyhez kötődik.
A követelésre a volumeMounts
. Győződjön meg róla, hogy ugyanazt a nevet használja a volumes
és volumeMounts
. A kötet a Pod-ba kerül a (z) által megadott helyre mountPath
.
A Pod mostantól állandó tárhely áll rendelkezésre. Bármi írva /path/in/container
a Perzisztens kötetbe kerül tárolásra. A Folyamatos mennyiségi igényt új hivatkozások fogják felhasználni, amelyek hivatkoznak rá, lehetővé téve az adatok számára, hogy az egyes Pod-okat túléljék.
Tárolási osztályok
Az manual
A tárolási osztály akkor használható, amikor saját kötetet hoz létre, és a kötet-igénylési jegyzékek létrehozása. Különböző hangerő-bővítmény illesztőprogramok biztosítják saját tárolási osztályaikat. Hivatkozás a használni kívánt kötet típusát képviselő tárolóosztályra.
A kezelt Kubernetes-szolgáltatások általában saját tárolóosztályokat biztosítanak, amelyek a platform blokktárolási megvalósításához kapcsolódnak. Ilyenek például gcePersistentDisk
a Google Kubernetes Engine-mel, vagy do-block-storage
a DigitalOcean által kezelt Kubernetes-sel.
Ezekben a forgatókönyvekben nem kell létrehoznia a PersistentVolume
manuálisan nyilvánul meg. Hozzon létre egy PersistentVolumeClaim
a helyesel storageClassName
és használja a resources.requests.storage
mező (fent látható) a kívánt kapacitás megadásához. A tárolóillesztő automatikusan összekapcsolja a követelést egy kompatibilis kötetpéldányhoz.
Hozzáférési módok
Három támogatott érték létezik a accessModes
terület:
ReadWriteOnce
– A kötet csak egyetlen Kubernetes csomópontra csatlakoztatható. Ez a csomópont teljes olvasási és írási hozzáféréssel rendelkezik a kötethez.ReadOnlyMany
– A hangerőt egyszerre több csomópont is fel tudja fogyasztani. Minden csomópont csak olvasható hozzáféréssel rendelkezik (semmi nem írhat a kötetbe).ReadWriteMany
– A kötet egyszerre több csomópontra csatlakoztatható. Minden csomópont képes olvasni és írni a kötetbe.
Egy adott kötet bármikor csak egy hozzáférési módot használhat. Ez azt jelenti, hogy két kötet-követelés csak akkor kötődik ugyanahhoz a kötethez, ha mindkét követelés ugyanazt a hozzáférési módot deklarálja.
A kötetek hozzáférési módja befolyásolja a Kubernetes ütemező azon képességét, hogy a Podjainak replikáit több csomóponton átívelje. Az ReadOnlyMany
/ReadWriteMany
módokat kell használni, ha Podokra van szükség a tartós tárhely megosztására és több csomóponton kell replikálni.
Ne feledje, hogy nem minden tárolóillesztő támogatja az összes hozzáférési módot – ellenőrizze a bővítmény szolgáltatóját. A kötetbővítmények és a kompatibilis hozzáférési módok nem teljes listája található meg a Kubernetes dokumentációjában.
Következtetés
A Kubernetes állandó tárolása nem olyan ijesztő, mint amilyennek első pillantásra tűnik. Győződjön meg arról, hogy a tárhoz hozzáférést igénylő hüvelyek olyan kötetekkel rendelkeznek, amelyek egy állandó kötet-követeléshez vannak kötve.
Ha állandó kötetre vonatkozó állításokat használnak, a Kubernetes létrehoz egy állandó kötetet, amely túléli az egyes hüvelyeket. Amikor a hüvelyeket kicserélik, az igényelt kötetek automatikusan bekerülnek az új hüvelyekbe. Az adatok a követelés törléséig nem semmisülnek meg.