Lühiajalised mahud koos salvestusmahu jälgimisega: EmptyDir steroididel
Mõned rakendused peavad ka andmeid salvestama, kuid nad on üsna rahul sellega, et pärast taaskäivitamist andmeid ei salvestata.
Näiteks vahemällu salvestamise teenused on piiratud RAM-iga, kuid need võivad harva kasutatavaid andmeid teisaldada ka RAM-ist aeglasemale salvestusruumile, mis ei mõjuta üldist jõudlust. Teised rakendused peavad teadma, et failides võib olla kirjutuskaitstud sisend, näiteks sätted või salajased võtmed.
Kubernetes on juba mitut tüüpi efemeersed köited, kuid nende funktsionaalsus piirdub K8-des rakendatuga.
Põgusad CSI mahud võimaldas Kubernetesi laiendada CSI-draiveritega, et pakkuda tuge kergetele kohalikele köidetele. Sel viisil on võimalik kasutada suvalised struktuurid: seaded, saladused, identifitseerimisandmed, muutujad jne. CSI-draivereid tuleb selle Kubernetese funktsiooni toetamiseks muuta, kuna eeldatakse, et tavalised standardsed draiverid ei tööta – kuid eeldatakse, et selliseid helitugevusi saab kasutada igas podi jaoks valitud sõlmes.
See võib olla probleem köidete puhul, mis tarbivad märkimisväärseid hostiressursse, või salvestusruumi puhul, mis on saadaval ainult mõnel hostil. Seetõttu tutvustab Kubernetes 1.19 kahte uut alfatestimise mahu funktsiooni, mis on kontseptuaalselt sarnased EmptyDiri köidetega:
üldotstarbelised lühiajalised köited;
CSI mälumahu jälgimine.
Uue lähenemisviisi eelised:
salvestusruum võib olla kohalik või võrgu kaudu ühendatud;
mahud võivad olla kindla suurusega, mida rakendus ei saa ületada;
töötab kõigi CSI-draiveritega, mis toetavad püsivate mahtude pakkumist ja (võimsuse jälgimise toetamiseks) rakendavad kõnet GetCapacity;
köidetel võib sõltuvalt draiverist ja sätetest olla algandmeid;
toetatud on kõik mahuga standardtoimingud (hetktõmmise loomine, suuruse muutmine jne);
köiteid saab kasutada mis tahes rakenduskontrolleriga, mis aktsepteerib moodulit või helitugevuse spetsifikatsiooni;
Kubernetese ajakava valib sobivad sõlmed ise, seega pole enam vaja planeerijalaiendeid ette valmistada ja konfigureerida ega veebihaake muuta.
Rakenduse valikud
Seetõttu sobivad üldotstarbelised efemeersed köited järgmisteks kasutusjuhtudeks:
Püsmälu, mis asendab vahemälu RAM-i
Memcachedi viimased versioonid lisatud toetus kasutades püsimälu (Intel Optane jne, u. tõlkija) tavalise RAM-i asemel. Rakenduse kontrolleri kaudu memcachedi juurutamisel saate kasutada üldotstarbelisi lühiajalisi köiteid, et nõuda, et PMEM-ist eraldataks teatud suurusega köide, kasutades näiteks CSI draiverit. PMEM-CSI.
LVM-i kohalik salvestusruum tööruumina
Rakendused, mis töötavad RAM-ist suuremate andmetega, võivad vajada kohalikku salvestusruumi, mille suurus või jõudlusmõõdikud ei suuda pakkuda tavalisi Kubernetese EmptyDir-köiteid. Näiteks selleks oli kirjutatud TopoLVM.
Kirjutuskaitstud juurdepääs andmemahtudele
Köite eraldamine võib põhjustada täismahu loomise, kui:
Neid köiteid saab paigaldada kirjutuskaitstud režiimis.
Kuidas see töötab
Üldotstarbelised lühiajalised köited
Üldotstarbeliste lühiajaliste köidete põhifunktsiooniks on uus köiteallikas, EphemeralVolumeSource, mis sisaldab kõiki välju mahupäringu loomiseks (ajalooliselt nimetatakse seda püsivaks mahupäringuks, PVC). Uus kontroller sisse kube-controller-manager vaatab kaunasid, mis loovad sellise mahuallika, ja loob seejärel nende kaunade jaoks PVC. CSI draiveri puhul näeb see taotlus välja samasugune nagu teised, seega pole siin erilist tuge vaja.
Kuni sellised PVC-d on olemas, saab neid kasutada nagu kõiki muid helitugevuse taotlusi. Eelkõige saab neile viidata andmeallikana köite kopeerimisel või köitest hetktõmmise loomisel. PVC objekt sisaldab ka helitugevuse hetkeseisu.
Automaatselt loodud PVC-de nimed on eelmääratletud: need on sidekriipsuga eraldatud kausta nime ja köite nime kombinatsioon. Eelmääratletud nimed muudavad PVC-ga suhtlemise lihtsamaks, kuna te ei pea seda otsima, kui teate kausta nime ja helitugevuse nime. Negatiivne külg on see, et nimi võib olla juba kasutusel, mille tuvastab Kubernetes ja selle tulemusena blokeeritakse podi käivitamine.
Tagamaks, et köide kustutatakse koos kaustaga, esitab kontroller päringu omaniku all olevale helitugevusele. Kui pod on kustutatud, töötab tavaline prügikoristusmehhanism, mis kustutab nii päringu kui ka helitugevuse.
Päringuid sobitab salvestusdraiver tavalise salvestusklassi mehhanismi kaudu. Kuigi tunnid kohese ja hilise sidumisega (aka WaitForFirstConsumer) on toetatud, lühiajaliste köidete puhul on mõttekas kasutada WaitForFirstConsumer, siis saab planeerija sõlme valimisel arvestada nii sõlme kasutust kui ka salvestusruumi saadavust. Siin kuvatakse uus funktsioon.
Salvestusmahu jälgimine
Tavaliselt ei tea ajakava koostaja, kus CSI-draiver helitugevuse loob. Samuti ei saa ajakava koostaja selle teabe saamiseks otse juhiga ühendust võtta. Seetõttu küsitleb planeerija sõlme, kuni leiab ühe, millelt köidetele juurde pääseda (hiline sidumine) või jätab asukoha valiku täielikult draiveri hooleks (kohene sidumine).
uus APICSIStorageCapacity, mis on alfafaasis, võimaldab salvestada vajalikud andmed etcd-sse, et need oleksid planeerijale kättesaadavad. Erinevalt üldotstarbeliste lühiajaliste mahtude toest peate draiveri juurutamisel lubama mälumahu jälgimise. external-provisioner peaks avaldama juhilt tavalise kaudu saadud võimsusteabe GetCapacity.
Kui planeerija peab valima sidumata köitega podi jaoks sõlme, mis kasutab hilist sidumist ja draiver lubas selle funktsiooni juurutamise ajal lipu määramisega CSIDriver.storageCapacity, siis sõlmed, millel pole piisavalt mälumahtu, visatakse automaatselt kõrvale. See töötab nii üldotstarbeliste lühiajaliste kui ka püsivate köidete puhul, kuid mitte CSI lühiajaliste köidete puhul, kuna Kubernetes ei saa nende parameetreid lugeda.
Nagu tavaliselt, luuakse kohe lingitud köited enne kaustade ajastamist ja nende paigutuse valib salvestusdraiver, nii et konfigureerimisel external-provisioner Vaikimisi jäetakse kohese sidumisega salvestusklassid vahele, kuna neid andmeid nagunii ei kasutata.
Kuna kubernetes'i planeerija on sunnitud töötama potentsiaalselt vananenud teabega, ei ole garantiid, et maht on igal juhul saadaval köite loomisel, kuid tõenäosus, et see luuakse ilma korduskatsetusteta, suureneb.
NB Täpsemat infot saab, aga ka turvaliselt “kasside stendil harjutada” ning täiesti arusaamatu olukorra korral saada kvalifitseeritud tehnilise toe abi intensiivkursustel - Kubernetese baas toimub 28.-30.septembril ja edasijõudnutele spetsialistidele Kubernetes Mega 14.–16. oktoober.
turvalisus
CSIStorageCapacity
CSIStorageCapacity objektid asuvad nimeruumides; iga CSI draiveri kasutuselevõtul oma nimeruumis on soovitatav piirata RBAC õigusi CSIStorageCapacityga selles ruumis, kuna on ilmne, kust andmed pärinevad. Kubernetes seda niikuinii ei kontrolli ja tavaliselt pannakse draiverid samasse nimeruumi, nii et lõppkokkuvõttes eeldatakse, et draiverid töötavad ega avalda valesid andmeid (ja see on koht, kus minu kaart ebaõnnestus, u. tõlkija habemega nalja põhjal)
Üldotstarbelised lühiajalised köited
Kui kasutajatel on õigused podi loomiseks (otse või kaudselt), saavad nad luua ka üldotstarbelisi lühiajalisi köiteid, isegi kui neil pole volitusel päringu loomise õigusi. Selle põhjuseks on asjaolu, et RBAC-i lubade kontrolle rakendatakse kontrollerile, mis loob PVC, mitte kasutajale. See on peamine lisatav muudatus teie kontole, enne selle funktsiooni lubamist klastrites, kus ebausaldusväärsetel kasutajatel ei tohiks olla õigusi köidete loomiseks.
Näide
Eraldi põsesamm PMEM-CSI sisaldab kõiki vajalikke muudatusi Kubernetes 1.19 klastri käitamiseks QEMU virtuaalmasinates koos kõigi alfafaasi funktsioonidega. Draiveri kood pole muutunud, muutunud on ainult juurutus.
Sobival masinal (Linux, tavakasutaja saab kasutada laevalaadija, vaata siin üksikasjad) need käsud avavad klastri ja installivad PMEM-CSI draiveri:
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
Kui kõik töötab, sisaldab väljund kasutusjuhiseid:
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 objektid ei ole mõeldud inimestele lugemiseks, seega on vaja teatud töötlemist. Golangi mallifiltrid näitavad salvestusklasse, see näide näitab nime, topoloogiat ja mahtu:
Proovime luua demorakenduse ühe üldotstarbelise lühiajalise mahuga. Faili sisu 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
Pärast loomist, nagu ülaltoodud juhistes näidatud, on meil nüüd täiendav kott ja 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
Kui mõni muu rakendus vajab rohkem kui 26620Mi, ei võta planeerija arvesse pmem-csi-pmem-govm-worker1 igal juhul.
Mis edasi?
Mõlemad funktsioonid on alles väljatöötamisel. Alfatestimise käigus avati mitu rakendust. Parendusettepaneku lingid dokumenteerivad töö, mida tuleb teha beetafaasile üleminekuks, ning millised alternatiivid on juba kaalutud ja tagasi lükatud: