ProHoster > Blogs > AdministrÄcija > ÄŖslaicÄ«gi apjomi ar krÄtuves ietilpÄ«bas izsekoÅ”anu: EmptyDir uz steroÄ«diem
ÄŖslaicÄ«gi apjomi ar krÄtuves ietilpÄ«bas izsekoÅ”anu: EmptyDir uz steroÄ«diem
DažÄm lietojumprogrammÄm arÄ« ir jÄglabÄ dati, taÄu tÄs ir diezgan apmierinÄtas ar to, ka pÄc restartÄÅ”anas dati netiks saglabÄti.
PiemÄram, keÅ”atmiÅas pakalpojumus ierobežo RAM, taÄu tie var arÄ« pÄrvietot reti izmantotos datus uz krÄtuvi, kas ir lÄnÄka nekÄ RAM, maz ietekmÄjot kopÄjo veiktspÄju. CitÄm lietojumprogrammÄm ir jÄÅem vÄrÄ, ka failos var bÅ«t tikai lasÄma ievade, piemÄram, iestatÄ«jumi vai slepenÄs atslÄgas.
Kubernetes jau ir vairÄki veidi Ä«slaicÄ«gi sÄjumi, taÄu to funkcionalitÄte ir ierobežota ar to, kas ir ieviests K8s.
ÄŖslaicÄ«ga CSI apjomi ļÄva Kubernetes paplaÅ”inÄt ar CSI draiveriem, lai nodroÅ”inÄtu atbalstu vieglajiem vietÄjiem sÄjumiem. TÄdÄ veidÄ ir iespÄjams izmantot patvaļīgas struktÅ«ras: iestatÄ«jumi, noslÄpumi, identifikÄcijas dati, mainÄ«gie un tÄ tÄlÄk. CSI draiveri ir jÄmaina, lai atbalstÄ«tu Å”o Kubernetes lÄ«dzekli, jo tiek pieÅemts, ka parastie standartizÄtie draiveri nedarbosies, taÄu tiek pieÅemts, ka Å”Ädus apjomus var izmantot jebkurÄ podam atlasÄ«tajÄ mezglÄ.
TÄ var bÅ«t problÄma sÄjumiem, kas patÄrÄ ievÄrojamus resursdatora resursus, vai krÄtuvei, kas ir pieejama tikai dažos resursdatoros. TÄpÄc Kubernetes 1.19 ievieÅ” divus jaunus alfa testÄÅ”anas apjoma lÄ«dzekļus, kas konceptuÄli ir lÄ«dzÄ«gi EmptyDir sÄjumiem:
vispÄrÄjas nozÄ«mes Ä«slaicÄ«gi sÄjumi;
CSI krÄtuves jaudas izsekoÅ”ana.
JaunÄs pieejas priekÅ”rocÄ«bas:
krÄtuve var bÅ«t lokÄla vai savienota ar tÄ«klu;
apjomiem var bÅ«t noteikts izmÄrs, ko pieteikums nevar pÄrsniegt;
darbojas ar visiem CSI draiveriem, kas atbalsta pastÄvÄ«gu sÄjumu nodroÅ”inÄÅ”anu un (lai atbalstÄ«tu jaudas izsekoÅ”anu) ievieÅ” zvanu GetCapacity;
sÄjumos var bÅ«t daži sÄkotnÄjie dati atkarÄ«bÄ no draivera un iestatÄ«jumiem;
tiek atbalstÄ«tas visas standarta darbÄ«bas ar apjomu (momentuzÅÄmuma izveide, izmÄru maiÅa utt.);
sÄjumus var izmantot ar jebkuru lietojumprogrammu kontrolleri, kas pieÅem moduļa vai apjoma specifikÄciju;
Kubernetes plÄnotÄjs pats atlasa piemÄrotus mezglus, tÄpÄc vairs nav nepiecieÅ”ams nodroÅ”inÄt un konfigurÄt plÄnotÄja paplaÅ”inÄjumus vai modificÄt tÄ«mekļa aizÄ·eres.
Lietojumprogrammas
TÄpÄc vispÄrÄjas nozÄ«mes Ä«slaicÄ«gie sÄjumi ir piemÄroti Å”Ädiem lietoÅ”anas gadÄ«jumiem:
JaunÄkie memcached laidieni pievienots atbalsts izmantojot pastÄvÄ«go atmiÅu (Intel Optane utt., apm. tulkotÄjs) parastÄs RAM vietÄ. Izvietojot memcached, izmantojot lietojumprogrammu kontrolleri, varat izmantot vispÄrÄjas nozÄ«mes Ä«slaicÄ«gus sÄjumus, lai pieprasÄ«tu, lai no PMEM tiktu pieŔķirts noteikta lieluma apjoms, izmantojot CSI draiveri, piemÄram, PMEM-CSI.
LVM lokÄlÄ krÄtuve kÄ darbvieta
LietojumprogrammÄm, kas strÄdÄ ar datiem, kas ir lielÄki par operatÄ«vo atmiÅu, var bÅ«t nepiecieÅ”ama vietÄjÄ krÄtuve ar tÄdu izmÄru vai veiktspÄjas metriku, kÄdu nevar nodroÅ”inÄt parastie Kubernetes EmptyDir sÄjumi. PiemÄram, Å”im nolÅ«kam tika rakstÄ«ts TopoLVM.
Tikai lasīŔanas piekļuve datu apjomiem
SÄjuma pieŔķirÅ”anas rezultÄtÄ var izveidot pilnu sÄjumu, ja:
Å os sÄjumus var uzstÄdÄ«t tikai lasÄ«Å”anas režīmÄ.
KÄ tas darbojas
VispÄrÄjas nozÄ«mes Ä«slaicÄ«gi sÄjumi
VispÄrÄja pielietojuma Ä«slaicÄ«gu sÄjumu galvenÄ iezÄ«me ir jaunais apjoma avots, EphemeralVolumeSource, kurÄ ir visi lauki, lai izveidotu apjoma pieprasÄ«jumu (vÄsturiski saukts par pastÄvÄ«gu apjoma pieprasÄ«jumu, PVC). Jauns kontrolieris kube-controller-manager apskata pÄkstis, kas rada Å”Ädu apjoma avotu, un pÄc tam izveido Ŕīm pÄkstÄ«m PVC. CSI draiverim Å”is pieprasÄ«jums izskatÄs tÄpat kÄ citi, tÄpÄc Å”eit nav nepiecieÅ”ams Ä«paÅ”s atbalsts.
KamÄr pastÄv Å”Ädi PVC, tos var izmantot tÄpat kÄ jebkurus citus skaļuma pieprasÄ«jumus. KonkrÄti, uz tiem var atsaukties kÄ uz datu avotu, kopÄjot sÄjumu vai veidojot momentuzÅÄmumu no sÄjuma. PVC objekts satur arÄ« paÅ”reizÄjo tilpuma stÄvokli.
AutomÄtiski izveidoto PVC nosaukumi ir iepriekÅ” definÄti: tie ir apgabala nosaukuma un sÄjuma nosaukuma kombinÄcija, kas atdalÄ«ta ar defisi. IepriekÅ” definÄti nosaukumi atvieglo mijiedarbÄ«bu ar PVC, jo jums tas nav jÄmeklÄ, ja zinÄt aplikuma nosaukumu un sÄjuma nosaukumu. NegatÄ«vÄ puse ir tÄda, ka nosaukums jau var tikt izmantots, ko Kubernetes atklÄj un rezultÄtÄ pods tiek bloÄ·Äts.
Lai nodroÅ”inÄtu, ka sÄjums tiek dzÄsts kopÄ ar podziÅu, kontrolleris iesniedz pieprasÄ«jumu Ä«paÅ”niekam piederoÅ”ajam sÄjumam. Kad pods tiek dzÄsts, darbojas standarta atkritumu savÄkÅ”anas mehÄnisms, kas dzÄÅ” gan pieprasÄ«jumu, gan sÄjumu.
PieprasÄ«jumus saskaÅo krÄtuves draiveris, izmantojot parasto krÄtuves klases mehÄnismu. Lai gan nodarbÄ«bas ar tÅ«lÄ«tÄju un vÄlu iesieÅ”anu (aka WaitForFirstConsumer) tiek atbalstÄ«ti, Ä«slaicÄ«giem sÄjumiem ir jÄga izmantot WaitForFirstConsumer, tad plÄnotÄjs, atlasot mezglu, var Åemt vÄrÄ gan mezgla lietojumu, gan krÄtuves pieejamÄ«bu. Å eit parÄdÄs jauna funkcija.
KrÄtuves ietilpÄ«bas izsekoÅ”ana
Parasti plÄnotÄjs nezina, kur CSI draiveris izveidos sÄjumu. PlÄnotÄjs arÄ« nevar tieÅ”i sazinÄties ar vadÄ«tÄju, lai pieprasÄ«tu Å”o informÄciju. TÄpÄc plÄnotÄjs aptaujÄ mezglus, lÄ«dz atrod tÄdu, kurÄ var piekļūt sÄjumiem (vÄlÄ«na saistÄ«Å”ana), vai atstÄj atraÅ”anÄs vietas izvÄli pilnÄ«bÄ draivera ziÅÄ (tÅ«lÄ«tÄja saistÄ«Å”ana).
Jauns APICSIStorageCapacity, kas atrodas alfa stadijÄ, ļauj nepiecieÅ”amos datus saglabÄt etcd, lai tie bÅ«tu pieejami plÄnotÄjam. AtŔķirÄ«bÄ no atbalsta vispÄrÄ«giem Ä«slaicÄ«giem sÄjumiem, izvietojot draiveri, ir jÄiespÄjo krÄtuves ietilpÄ«bas izsekoÅ”ana: external-provisioner jÄpublicÄ jaudas informÄcija, kas saÅemta no vadÄ«tÄja, izmantojot parasto GetCapacity.
Ja plÄnotÄjam ir jÄatlasa mezgls podam ar nesaistÄ«tu sÄjumu, kas izmanto vÄlu saistÄ«Å”anu, un draiveris ir iespÄjojis Å”o lÄ«dzekli izvietoÅ”anas laikÄ, iestatot karogu CSIDriver.storageCapacity, tad mezgli, kuriem nav pietiekami daudz krÄtuves, tiks automÄtiski izmesti. Tas darbojas gan vispÄrÄ«giem Ä«slaicÄ«giem, gan pastÄvÄ«giem sÄjumiem, bet ne CSI Ä«slaicÄ«gajiem sÄjumiem, jo āāKubernetes nevar nolasÄ«t to parametrus.
KÄ parasti, uzreiz saistÄ«tie sÄjumi tiek izveidoti pirms aplikumu plÄnoÅ”anas, un to izvietojumu izvÄlas krÄtuves draiveris, tÄpÄc konfigurÄjot external-provisioner PÄc noklusÄjuma krÄtuves klases ar tÅ«lÄ«tÄju saistÄ«Å”anu tiek izlaistas, jo Å”ie dati tik un tÄ netiks izmantoti.
TÄ kÄ kubernetes plÄnotÄjs ir spiests strÄdÄt ar potenciÄli novecojuÅ”u informÄciju, nav garantijas, ka jauda bÅ«s pieejama ikvienÄ gadÄ«jumÄ, kad tiks izveidots sÄjums, taÄu iespÄja, ka tÄ tiks izveidota bez atkÄrtojumiem, tomÄr palielinÄs.
NB SÄ«kÄku informÄciju var iegÅ«t, kÄ arÄ« droÅ”i ātrenÄties kaÄ·u stendÄā, un pavisam nesaprotamas situÄcijas gadÄ«jumÄ saÅemt kvalificÄtu tehniskÄ atbalsta palÄ«dzÄ«bu intensÄ«vajos kursos - Kubernetes bÄze notiks 28.-30.septembrÄ«, un progresÄ«vÄkiem speciÄlistiem Kubernetes Mega 14.ā16.oktobris.
DroŔība
CSIStorageCapacity
CSIStorageCapacity objekti atrodas nosaukumvietÄs; izlaižot katru CSI draiveri savÄ nosaukumvietÄ, ieteicams ierobežot RBAC tiesÄ«bas uz CSIStorageCapacity Å”ajÄ telpÄ, jo ir skaidrs, no kurienes tiek iegÅ«ti dati. Kubernetes tik un tÄ nepÄrbauda, āāun parasti draiveri tiek ievietoti vienÄ nosaukumvietÄ, tÄpÄc galu galÄ ir paredzÄts, ka draiveri darbosies un nepublicÄs nepareizus datus (un Å”eit mana karte neizdevÄs, apm. tulkotÄjs, pamatojoties uz bÄrdainu joku)
VispÄrÄjas nozÄ«mes Ä«slaicÄ«gi sÄjumi
Ja lietotÄjiem ir tiesÄ«bas izveidot aplikumu (tieÅ”i vai netieÅ”i), viÅi varÄs izveidot arÄ« vispÄrÄjas nozÄ«mes Ä«slaicÄ«gus sÄjumus, pat ja viÅiem nav tiesÄ«bu izveidot pieprasÄ«jumu par sÄjumu. Tas ir tÄpÄc, ka RBAC atļauju pÄrbaudes tiek piemÄrotas kontrolierim, kas izveido PVC, nevis lietotÄjam. Å Ä«s ir galvenÄs izmaiÅas, kas jÄpievieno uz jÅ«su kontu, pirms Ŕīs funkcijas iespÄjoÅ”anas klasteros, kur neuzticamiem lietotÄjiem nevajadzÄtu bÅ«t tiesÄ«bÄm izveidot sÄjumus.
PiemÄrs
AtseviŔķi zars PMEM-CSI satur visas nepiecieÅ”amÄs izmaiÅas, lai palaistu Kubernetes 1.19 klasteru QEMU virtuÄlajÄs maŔīnÄs ar visÄm alfa stadijÄ esoÅ”ajÄm funkcijÄm. VadÄ«tÄja kods nav mainÄ«jies, ir mainÄ«jusies tikai izvietoÅ”ana.
PiemÄrotÄ datorÄ (Linux, parasts lietotÄjs var izmantot dokers, Skaties Å”eit detaļas), Ŕīs komandas parÄdÄ«s klasteru un instalÄs 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
Kad viss darbosies, izvadÄ bÅ«s lietoÅ”anas instrukcijas:
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 objekti nav paredzÄti cilvÄku lasÄ«Å”anai, tÄpÄc ir nepiecieÅ”ama apstrÄde. Golang veidÅu filtri parÄdÄ«s krÄtuves klases, Å”ajÄ piemÄrÄ tiks parÄdÄ«ts nosaukums, topoloÄ£ija un ietilpÄ«ba:
MÄÄ£inÄsim izveidot demonstrÄcijas lietojumprogrammu ar vienu vispÄrÄjas nozÄ«mes Ä«slaicÄ«gu sÄjumu. Faila saturs 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Äc izveidoÅ”anas, kÄ parÄdÄ«ts iepriekÅ” sniegtajos norÄdÄ«jumos, mums tagad ir papildu pods un 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
Ja citai lietojumprogrammai ir nepiecieÅ”ams vairÄk nekÄ 26620Mi, plÄnotÄjs neÅems vÄrÄ pmem-csi-pmem-govm-worker1 jebkurÄ gadÄ«jumÄ.
Ko tÄlÄk?
Abas funkcijas joprojÄm tiek izstrÄdÄtas. Alfa testÄÅ”anas laikÄ tika atvÄrtas vairÄkas lietojumprogrammas. Uzlabojumu priekÅ”likuma saitÄs ir dokumentÄts darbs, kas jÄpaveic, lai pÄrietu uz beta stadiju, kÄ arÄ« tas, kuras alternatÄ«vas jau ir izskatÄ«tas un noraidÄ«tas: