Efnabundið bindi með mælingar á geymslurými: EmptyDir á sterum

Efnabundið bindi með mælingar á geymslurými: EmptyDir á sterum

Sum forrit þurfa líka að geyma gögn, en þau eru nokkuð sátt við þá staðreynd að gögnin verða ekki vistuð eftir endurræsingu.

Til dæmis takmarkast skyndiminnisþjónusta af vinnsluminni, en getur einnig flutt gögn sem eru sjaldan notuð í geymslu sem er hægari en vinnsluminni, með lítil áhrif á heildarafköst. Önnur forrit þurfa að vera meðvituð um að það gæti verið einhver skrifvarinn inntak í skránum, svo sem stillingar eða leynilyklar.

Kubernetes hefur nú þegar nokkrar gerðir skammvinn bindi, en virkni þeirra er takmörkuð við það sem er útfært í K8s.

Efnalegt CSI bindi leyfði Kubernetes að vera framlengdur með CSI rekla til að veita stuðning fyrir létt staðbundið bindi. Þannig er hægt að nota handahófskennd mannvirki: stillingar, leyndarmál, auðkennisgögn, breytur og svo framvegis. CSI rekla verður að breyta til að styðja þennan Kubernetes eiginleika, þar sem gert er ráð fyrir að venjulegir staðlaðir reklar muni ekki virka - en gert er ráð fyrir að slíkt magn sé hægt að nota á hvaða hnút sem er valinn fyrir fræbelginn.

Þetta gæti verið vandamál fyrir bindi sem eyða umtalsverðum hýsingarauðlindum eða fyrir geymslu sem er aðeins tiltæk á sumum vélum. Þess vegna kynnir Kubernetes 1.19 tvo nýja alfaprófunarmagnseiginleika sem eru hugmyndalega svipaðir EmptyDir bindum:

  • skammvinn bindi til almennra nota;

  • CSI geymslurými mælingar.

Kostir nýju nálgunarinnar:

  • geymsla getur verið staðbundin eða tengd í gegnum net;

  • bindi geta haft tiltekna stærð sem forritið getur ekki farið yfir;

  • virkar með hvaða CSI rekla sem er sem styðja útvegun á viðvarandi magni og (til að styðja við getumælingu) innleiða símtalið GetCapacity;

  • bindi kunna að innihalda nokkur upphafsgögn eftir ökumanni og stillingum;

  • allar staðlaðar aðgerðir með hljóðstyrk (búa til skyndimynd, breyta stærð osfrv.) eru studdar;

  • bindi er hægt að nota með hvaða forritastýringu sem er sem samþykkir einingu eða hljóðstyrkforskrift;

  • Kubernetes tímaáætlunin velur viðeigandi hnúta á eigin spýtur, svo það er ekki lengur þörf á að útvega og stilla tímaáætlunarviðbætur eða breyta vefkrókum.

Valkostir umsóknar

Þess vegna henta skammvinn bindi til almennra nota fyrir eftirfarandi notkunartilvik:

Viðvarandi minni í stað vinnsluminni fyrir memcached

Nýjustu útgáfur af memcached bætt við stuðningi nota viðvarandi minni (Intel Optane, osfrv., ca. þýðandi) í stað venjulegs vinnsluminni. Þegar þú notar memcached í gegnum forritastýringu geturðu notað skammvinn bindi til almennra nota til að biðja um að magni af ákveðinni stærð sé úthlutað frá PMEM með því að nota CSI rekla, til dæmis PMEM-CSI.

LVM staðbundin geymsla sem vinnusvæði

Forrit sem vinna með gögn sem eru stærri en vinnsluminni gætu þurft staðbundna geymslu með stærð eða frammistöðumælingum sem venjuleg Kubernetes EmptyDir bindi getur ekki veitt. Til dæmis var það skrifað í þessum tilgangi TopoLVM.

Lesaðgangur fyrir gagnamagn

Úthlutun bindi getur leitt til þess að fullt bindi verði til þegar:

Hægt er að setja þessi bindi í skrifvarinn ham.

Hvernig virkar þetta

Efnabundin bindi til almennra nota

Lykilatriði í skammvinnum bindum til almennra nota er nýi hljóðgjafinn, EphemeralVolumeSource, sem inniheldur alla reiti til að búa til magnbeiðni (sögulega kölluð viðvarandi bindibeiðni, PVC). Nýr stjórnandi í kube-controller-manager horfir á fræbelgina sem búa til slíkan rúmmálsgjafa og býr síðan til PVC fyrir þá fræbelg. Fyrir CSI ökumanninn lítur þessi beiðni eins út og hinar, svo ekki er þörf á sérstökum stuðningi hér.

Svo lengi sem slík PVC er til er hægt að nota þau eins og allar aðrar beiðnir um hljóðstyrkinn. Einkum er hægt að vísa til þeirra sem gagnagjafa þegar bindi er afritað eða mynd af bindi er búið til. PVC hluturinn inniheldur einnig núverandi ástand rúmmálsins.

Nöfn sjálfkrafa búið til PVC eru fyrirfram skilgreind: þau eru samsetning af fræbelgsheitinu og hljóðstyrksheitinu, aðskilin með bandstrik. Forskilgreind nöfn gera það auðveldara að hafa samskipti við PVC vegna þess að þú þarft ekki að leita að því ef þú veist fræbelgsnafnið og hljóðstyrksnafnið. Gallinn er sá að nafnið gæti þegar verið í notkun, sem er greint af Kubernetes og þar af leiðandi er lokað fyrir að belgurinn ræsist.

Til að tryggja að hljóðstyrknum sé eytt ásamt hólfinu, gerir stjórnandi beiðni til hljóðstyrksins undir eigandanum. Þegar belgnum er eytt virkar staðlað sorphirðukerfi, sem eyðir bæði beiðninni og hljóðstyrknum.

Beiðnir eru samræmdar af geymslubílstjóranum með venjulegu kerfi geymsluflokksins. Þó námskeið með tafarlausri og seint bindingu (aka WaitForFirstConsumer) eru studd, fyrir skammvinn bindi er skynsamlegt að nota WaitForFirstConsumer, þá getur tímaáætlunarmaðurinn tekið tillit til bæði hnútnotkunar og framboðs geymslu þegar hnút er valið. Nýr eiginleiki birtist hér.

Geymslugetu mælingar

Venjulega hefur tímaáætlunarmaðurinn enga vitneskju um hvar CSI bílstjórinn mun búa til hljóðstyrkinn. Það er heldur engin leið fyrir tímaáætlunarmanninn að hafa beint samband við ökumanninn til að biðja um þessar upplýsingar. Þess vegna skoðar tímaáætlunarmaðurinn hnúta þar til hann finnur einn þar sem hægt er að nálgast bindi (seinbinding) eða lætur valið um staðsetningu algjörlega eftir ökumanninum (strax binding).

Nýtt API CSIStorageCapacity, sem er á alfa stigi, gerir kleift að geyma nauðsynleg gögn í etcd þannig að þau séu aðgengileg fyrir tímaáætlunarmanninn. Ólíkt stuðningi við skammvinn bindi til almennra nota, þegar þú setur ökumanninn upp, verður þú að virkja mælingu á geymslurými: external-provisioner ætti að birta upplýsingar um getu sem berast frá ökumanni með venjulegum hætti GetCapacity.

Ef tímaáætlunarmaðurinn þarf að velja hnút fyrir hólf með óbundnu hljóðstyrk sem notar síðbindingu og ökumaðurinn virkjaði þennan eiginleika meðan á dreifingu stóð með því að stilla fánann CSIDriver.storageCapacity, þá verður hnútum sem hafa ekki næga geymslurými sjálfkrafa hent. Þetta virkar bæði fyrir skammvinn bindi í almennum tilgangi og viðvarandi bindi, en ekki fyrir skammvinn bindi CSI vegna þess að Kubernetes getur ekki lesið færibreytur þeirra.

Eins og venjulega, eru strax tengd bindi búin til áður en hólf eru tímasett og staðsetning þeirra er valin af geymslureklanum, svo þegar þú stillir external-provisioner Sjálfgefið er að geymsluflokkum með tafarlausri bindingu er sleppt, þar sem þessi gögn verða samt ekki notuð.

Þar sem kubernetes tímaáætlunarmaðurinn neyðist til að vinna með hugsanlega úreltar upplýsingar er engin trygging fyrir því að getu sé tiltæk í öllum tilvikum þegar magnið er búið til, en líkurnar á að það verði búið til án endurtilrauna eru engu að síður auknar.

NB Þú getur fengið ítarlegri upplýsingar, svo og á öruggan hátt "æft á kattabásnum", og ef um algjörlega óskiljanlegar aðstæður er að ræða, fengið hæfa tækniaðstoð á öflugum námskeiðum - Kubernetes stöð verður haldinn 28.-30. september og fyrir lengra komna sérfræðinga Kubernetes Mega 14.–16. október.

öryggi

CSIStorageCapacity

CSIStorageCapacity hlutir eru í nafnarými; þegar hver CSI rekla er settur út í eigin nafnrými er mælt með því að takmarka RBAC réttindi á CSIStorageCapacity í því rými þar sem það er augljóst hvaðan gögnin koma. Kubernetes athugar hvort eð er ekki fyrir þessu og venjulega eru ökumenn settir í sama nafnrýmið, svo að lokum er ætlast til að reklarnir virki og birti ekki röng gögn (og þetta er þar sem kortið mitt bilaði, ca. þýðandi byggður á skeggjaðri brandara)

Efnabundin bindi til almennra nota

Ef notendur hafa réttindi til að búa til hólf (beint eða óbeint) munu þeir einnig geta búið til skammvinn bindi til almennra nota, jafnvel þótt þeir hafi ekki réttindi til að búa til beiðni um bindi. Þetta er vegna þess að RBAC leyfispróf eru beitt á stjórnandann sem býr til PVC, ekki á notandann. Þetta er aðalbreytingin sem þarf að bæta við inn á reikninginn þinn, áður en þessi eiginleiki er virkjaður á klösum þar sem ótraustir notendur ættu ekki að hafa réttindi til að búa til bindi.

Dæmi

Aðskilið twig PMEM-CSI inniheldur allar nauðsynlegar breytingar til að keyra Kubernetes 1.19 þyrping inni í QEMU sýndarvélum með öllum eiginleikum á alfastigi. Ökumannskóði hefur ekki breyst, aðeins uppsetningin hefur breyst.

Á viðeigandi vél (Linux, venjulegur notandi getur notað Docker, sjáðu hér upplýsingar) þessar skipanir munu koma upp þyrpingunni og setja upp PMEM-CSI rekilinn:

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

Eftir að allt virkar mun úttakið innihalda leiðbeiningar um notkun:

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 hlutir eru ekki ætlaðir til að vera lesnir af mönnum, svo einhver vinnsla er nauðsynleg. Golang sniðmátssíur munu sýna geymsluflokkana, þetta dæmi mun sýna nafn, staðfræði og getu:

$ kubectl get 
        -o go-template='{{range .items}}{{if eq .storageClassName "pmem-csi-sc-late-binding"}}{{.metadata.name}} {{.nodeTopology.matchLabels}} {{.capacity}}
{{end}}{{end}}' 
        csistoragecapacities
csisc-2js6n map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker2] 30716Mi
csisc-sqdnt map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker1] 30716Mi
csisc-ws4bv map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker3] 30716Mi

Einn hlutur hefur eftirfarandi innihald:

$ kubectl describe csistoragecapacities/csisc-6cw8j
Name:         csisc-sqdnt
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  storage.k8s.io/v1alpha1
Capacity:     30716Mi
Kind:         CSIStorageCapacity
Metadata:
  Creation Timestamp:  2020-08-11T15:41:03Z
  Generate Name:       csisc-
  Managed Fields:
    ...
  Owner References:
    API Version:     apps/v1
    Controller:      true
    Kind:            StatefulSet
    Name:            pmem-csi-controller
    UID:             590237f9-1eb4-4208-b37b-5f7eab4597d1
  Resource Version:  2994
  Self Link:         /apis/storage.k8s.io/v1alpha1/namespaces/default/csistoragecapacities/csisc-sqdnt
  UID:               da36215b-3b9d-404a-a4c7-3f1c3502ab13
Node Topology:
  Match Labels:
    pmem-csi.intel.com/node:  pmem-csi-pmem-govm-worker1
Storage Class Name:           pmem-csi-sc-late-binding
Events:                       <none>

Við skulum reyna að búa til kynningarforrit með einu almennu skammlífu bindi. Innihald skráar 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

Eftir að hafa búið til, eins og sýnt er í leiðbeiningunum hér að ofan, höfum við nú viðbótarbelg og 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

PVC eigandi - undir:

$ kubectl get -o yaml pvc/my-csi-app-inline-volume-my-csi-volume
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    pv.kubernetes.io/bind-completed: "yes"
    pv.kubernetes.io/bound-by-controller: "yes"
    volume.beta.kubernetes.io/storage-provisioner: pmem-csi.intel.com
    volume.kubernetes.io/selected-node: pmem-csi-pmem-govm-worker1
  creationTimestamp: "2020-08-11T15:44:57Z"
  finalizers:
  - kubernetes.io/pvc-protection
  managedFields:
    ...
  name: my-csi-app-inline-volume-my-csi-volume
  namespace: default
  ownerReferences:
  - apiVersion: v1
    blockOwnerDeletion: true
    controller: true
    kind: Pod
    name: my-csi-app-inline-volume
    uid: 75c925bf-ca8e-441a-ac67-f190b7a2265f
...

Væntanlega uppfærðar upplýsingar fyrir pmem-csi-pmem-govm-worker1:

csisc-2js6n map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker2] 30716Mi
csisc-sqdnt map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker1] 26620Mi
csisc-ws4bv map[pmem-csi.intel.com/node:pmem-csi-pmem-govm-worker3] 30716Mi

Ef annað forrit þarf meira en 26620Mi tekur tímaáætlunarmaðurinn ekki með í reikninginn pmem-csi-pmem-govm-worker1 í öllu falli.

Hvað er næst?

Báðir eiginleikarnir eru enn í þróun. Nokkur forrit voru opnuð við alfaprófun. Umbótatillögutenglar skjalfesta þá vinnu sem þarf að vinna til að fara á beta stigið, sem og hvaða kostir hafa þegar verið skoðaðir og hafnað:

Heimild: www.habr.com

Bæta við athugasemd