Trumpalaikiai tūriai su saugojimo talpos stebėjimu: EmptyDir steroiduose
Kai kurioms programoms taip pat reikia saugoti duomenis, tačiau joms gana patogu, kad paleidus iš naujo duomenys nebus išsaugoti.
Pavyzdžiui, talpyklos paslaugas riboja RAM, tačiau retai naudojami duomenys taip pat gali būti perkelti į lėtesnę nei RAM saugyklą, o tai turi mažai įtakos bendram našumui. Kitos programos turi žinoti, kad failuose gali būti tik skaitymo įvestis, pvz., nustatymai ar slaptieji raktai.
Kubernetes jau turi keletą tipų efemeriški tomai, tačiau jų funkcionalumas apsiriboja tuo, kas įdiegta K8.
Efemeriškas CSI apimtis leido „Kubernetes“ išplėsti naudojant CSI tvarkykles, kad būtų galima palaikyti lengvus vietinius tomus. Tokiu būdu galima pasinaudoti savavališkos struktūros: nustatymai, paslaptys, identifikavimo duomenys, kintamieji ir pan. CSI tvarkyklės turi būti modifikuotos, kad palaikytų šią „Kubernetes“ funkciją, nes daroma prielaida, kad įprastos standartizuotos tvarkyklės neveiks, tačiau daroma prielaida, kad tokius tomus galima naudoti bet kuriame blokui pasirinktame mazge.
Tai gali kilti problema dėl tomų, kurie sunaudoja daug pagrindinio kompiuterio išteklių, arba saugykloje, kuri pasiekiama tik kai kuriuose kompiuteriuose. Štai kodėl „Kubernetes 1.19“ pristato dvi naujas alfa testavimo apimties funkcijas, kurios iš esmės yra panašios į „EmptyDir“ tomus:
bendrosios paskirties trumpalaikiai tomai;
CSI atminties talpos stebėjimas.
Naujo požiūrio pranašumai:
saugykla gali būti vietinė arba prijungta per tinklą;
apimtys gali būti nurodyto dydžio, kurio programa negali viršyti;
veikia su bet kokiomis CSI tvarkyklėmis, kurios palaiko nuolatinių tomų aprūpinimą ir (kad palaikytų pajėgumų sekimą) įgyvendina iškvietimą GetCapacity;
tomai gali turėti tam tikrų pradinių duomenų, priklausomai nuo tvarkyklės ir nustatymų;
palaikomos visos standartinės operacijos su apimtimi (momentinės nuotraukos kūrimas, dydžio keitimas ir pan.);
tomai gali būti naudojami su bet kokiu programos valdikliu, kuris priima modulio arba apimties specifikaciją;
„Kubernetes“ planuoklis pats pasirenka tinkamus mazgus, todėl nebereikia teikti ir konfigūruoti planavimo priemonės plėtinių ar keisti žiniatinklio kabliukų.
Taikymo parinktys
Todėl bendrosios paskirties trumpalaikiai tomai yra tinkami šiais atvejais:
Nuolatinė atmintis kaip RAM pakaitalas talpykloje
Naujausios „memcached“ versijos pridėta parama naudojant nuolatinę atmintį („Intel Optane“ ir kt., apytiksliai vertėjas) vietoj įprastos RAM. Diegdami atminties talpyklą naudodami programos valdiklį, galite naudoti bendrosios paskirties trumpalaikius tomus, kad paprašytumėte, kad tam tikro dydžio tūris būtų priskirtas iš PMEM naudojant CSI tvarkyklę, pvz. PMEM-CSI.
LVM vietinė saugykla kaip darbo vieta
Programoms, kurios dirba su duomenimis, didesniais nei RAM, gali prireikti vietinės saugyklos, kurios dydis arba našumo metrika negali užtikrinti įprastiniai „Kubernetes“ „EmptyDir“ tomai. Pavyzdžiui, šiam tikslui buvo parašyta TopoLVM.
Tik skaitymo prieiga prie duomenų apimties
Paskyrus tomą, visas tomas gali būti sukurtas, kai:
Pagrindinė bendrosios paskirties trumpalaikių tomų savybė yra naujas tomo šaltinis, EphemeralVolumeSource, kuriame yra visi laukai, skirti sukurti apimties užklausą (istoriškai vadinama nuolatine apimties užklausa, PVC). Naujas valdiklis kube-controller-manager žiūri į ankštis, kurios sukuria tokį tūrio šaltinį, o tada sukuria tų ankščių PVC. CSI tvarkyklei ši užklausa atrodo taip pat, kaip ir kitos, todėl čia nereikia jokio specialaus palaikymo.
Kol tokie PVC yra, juos galima naudoti kaip ir bet kokius kitus tomo prašymus. Visų pirma, juos galima nurodyti kaip duomenų šaltinį kopijuojant tomą arba iš tomo kuriant momentinę nuotrauką. PVC objekte taip pat yra esama tūrio būsena.
Automatiškai sukurtų PVC pavadinimai yra iš anksto apibrėžti: jie yra grupės pavadinimo ir tomo pavadinimo derinys, atskirtas brūkšneliu. Iš anksto nustatyti pavadinimai palengvina sąveiką su PVC, nes jums nereikės jo ieškoti, jei žinote grupės pavadinimą ir tomo pavadinimą. Neigiama yra tai, kad pavadinimas jau gali būti naudojamas, kurį aptinka Kubernetes ir dėl to blokuojamas podelio paleidimas.
Siekdamas užtikrinti, kad tomas būtų ištrintas kartu su bloku, valdiklis pateikia užklausą savininkui priklausančiam tomui. Ištrynus podą, veikia standartinis šiukšlių surinkimo mechanizmas, kuris ištrina ir užklausą, ir tomą.
Užklausas atitinka saugyklos tvarkyklė, naudodama įprastą saugyklos klasės mechanizmą. Nors pamokos su tiesioginiu ir vėlyvu įrišimu (dar žinomas kaip WaitForFirstConsumer) yra palaikomi, efemeriškiems tomams tikslinga naudoti WaitForFirstConsumer, tada planuoklis, pasirinkdamas mazgą, gali atsižvelgti ir į mazgo naudojimą, ir į saugyklos prieinamumą. Čia pasirodo nauja funkcija.
Saugyklos talpos stebėjimas
Paprastai planuotojas nežino, kur CSI tvarkyklė sukurs tomą. Taip pat planuotojas negali tiesiogiai susisiekti su vairuotoju ir paprašyti šios informacijos. Todėl planuoklis apklausia mazgus, kol randa tokį, kuriame galima pasiekti tomus (vėlyvas surišimas), arba palieka vietos pasirinkimą tik tvarkyklei (neatidėliotinas susiejimas).
Naujas APICSIStorageCapacity, kuri yra alfa stadijoje, leidžia būtinus duomenis saugoti etcd, kad jie būtų prieinami planuokliui. Skirtingai nuo bendrosios paskirties trumpalaikių tomų palaikymo, kai įdiegiate tvarkyklę, turite įjungti saugyklos talpos stebėjimą: external-provisioner turėtų paskelbti talpos informaciją, gautą iš vairuotojo per įprastą GetCapacity.
Jei planuokliui reikia pasirinkti mazgą blokui su nesurištu tomu, kuris naudoja vėlyvą susiejimą, o tvarkyklė įgalino šią funkciją diegimo metu nustatydama vėliavėlę CSIDriver.storageCapacity, tada mazgai, kuriuose nepakanka atminties talpos, bus automatiškai atmesti. Tai veikia tiek bendrosios paskirties trumpalaikiams, tiek nuolatiniams tomams, bet ne CSI trumpalaikiams tomams, nes Kubernetes negali nuskaityti jų parametrų.
Kaip įprasta, iš karto susieti tomai sukuriami prieš suplanuojant rinkinius, o jų vietą pasirenka saugyklos tvarkyklė, todėl konfigūruojant external-provisioner Pagal numatytuosius nustatymus saugojimo klasės su tiesioginiu susiejimu praleidžiamos, nes šie duomenys vis tiek nebus naudojami.
Kadangi kubernetes planavimo priemonė yra priversta dirbti su galimai pasenusia informacija, nėra garantijos, kad talpa bus prieinama kiekvienu atveju, kai bus sukurtas tomas, tačiau tikimybė, kad ji bus sukurta be pakartotinių bandymų, vis tiek padidėja.
NB Išsamesnę informaciją galite gauti, taip pat saugiai „treniruotis ant kačių stendo“, o susidarius visiškai nesuprantamai situacijai gauti kvalifikuotą techninės pagalbos pagalbą intensyviuose kursuose - Kubernetes bazė vyks rugsėjo 28-30 d., o labiau pažengusiems specialistams Kubernetes Mega spalio 14–16 d.
saugumas
CSIStorageCapacity
CSIStorageCapacity objektai yra vardų erdvėse, kai kiekviena CSI tvarkyklė išleidžiama į savo vardų sritį, rekomenduojama apriboti RBAC teises į CSIStorageCapacity, nes akivaizdu, iš kur gaunami duomenys. „Kubernetes“ vis tiek to netikrina, o tvarkyklės paprastai dedamos į tą pačią vardų erdvę, todėl galiausiai tikimasi, kad tvarkyklės veiks ir neskels neteisingų duomenų (ir čia sugedo mano kortelė, apytiksliai vertėjas pagal barzdotą pokštą)
Bendrosios paskirties trumpalaikiai tomai
Jei naudotojai turi teises sukurti rinkinį (tiesiogiai arba netiesiogiai), jie taip pat galės kurti bendrosios paskirties trumpalaikius tomus, net jei neturi teisės sukurti tomo užklausos. Taip yra todėl, kad RBAC leidimų patikros taikomos valdikliui, kuris sukuria PVC, o ne vartotojui. Tai yra pagrindinis pakeitimas, kurį reikia pridėti į savo sąskaitą, prieš įjungdami šią funkciją grupėse, kuriose nepatikimi vartotojai neturėtų turėti teisių kurti tomų.
Pavyzdys
Atskirai šakelė PMEM-CSI yra visi būtini pakeitimai, norint paleisti Kubernetes 1.19 klasterį QEMU virtualiose mašinose su visomis alfa stadijos funkcijomis. Vairuotojo kodas nepasikeitė, pasikeitė tik diegimas.
Tinkamame kompiuteryje („Linux“, įprastas vartotojas gali naudoti dokininkas, žiūrėk čia išsami informacija) šios komandos parodys klasterį ir įdiegs PMEM-CSI tvarkyklę:
git clone --branch=kubernetes-1-19-blog-post https://github.com/intel/pmem-csi.git
cd pmem-csi
export TEST_KUBERNETES_VERSION=1.19 TEST_FEATURE_GATES=CSIStorageCapacity=true,GenericEphemeralVolume=true TEST_PMEM_REGISTRY=intel
make start && echo && test/setup-deployment.sh
Kai viskas veiks, išvestyje bus naudojimo instrukcijos:
The test cluster is ready. Log in with [...]/pmem-csi/_work/pmem-govm/ssh.0, run
kubectl once logged in. Alternatively, use kubectl directly with the
following env variable:
KUBECONFIG=[...]/pmem-csi/_work/pmem-govm/kube.config
secret/pmem-csi-registry-secrets created
secret/pmem-csi-node-secrets created
serviceaccount/pmem-csi-controller created
...
To try out the pmem-csi driver ephemeral volumes:
cat deploy/kubernetes-1.19/pmem-app-ephemeral.yaml |
[...]/pmem-csi/_work/pmem-govm/ssh.0 kubectl create -f -
CSIStorageCapacity objektai nėra skirti žmonėms skaityti, todėl reikia atlikti tam tikrą apdorojimą. Golang šablonų filtrai parodys saugojimo klases, šiame pavyzdyje bus rodomas pavadinimas, topologija ir talpa:
Pabandykime sukurti demonstracinę programą su vienu bendrosios paskirties trumpalaikiu tomu. Failo turinys pmem-app-ephemeral.yaml:
# This example Pod definition demonstrates
# how to use generic ephemeral inline volumes
# with a PMEM-CSI storage class.
kind: Pod
apiVersion: v1
metadata:
name: my-csi-app-inline-volume
spec:
containers:
- name: my-frontend
image: intel/pmem-csi-driver-test:v0.7.14
command: [ "sleep", "100000" ]
volumeMounts:
- mountPath: "/data"
name: my-csi-volume
volumes:
- name: my-csi-volume
ephemeral:
volumeClaimTemplate:
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 4Gi
storageClassName: pmem-csi-sc-late-binding
Sukūrę, kaip parodyta aukščiau pateiktose instrukcijose, dabar turime papildomą dėklą ir PVC:
$ kubectl get pods/my-csi-app-inline-volume -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-csi-app-inline-volume 1/1 Running 0 6m58s 10.36.0.2 pmem-csi-pmem-govm-worker1 <none> <none>
$ kubectl get pvc/my-csi-app-inline-volume-my-csi-volume
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-csi-app-inline-volume-my-csi-volume Bound pvc-c11eb7ab-a4fa-46fe-b515-b366be908823 4Gi RWO pmem-csi-sc-late-binding 9m21s
Jei kitai programai reikia daugiau nei 26620Mi, planuotojas neatsižvelgs pmem-csi-pmem-govm-worker1 bet kuriuo atveju.
Kas toliau?
Abi funkcijos vis dar kuriamos. Alfa testavimo metu buvo atidarytos kelios programos. Tobulinimo pasiūlymo nuorodose dokumentuojami darbai, kuriuos reikia atlikti norint pereiti į beta stadiją, taip pat kokios alternatyvos jau buvo apsvarstytos ir atmestos: