Meudan geàrr-ùine le lorg comas stòraidh: falamh air steroids

Meudan geàrr-ùine le lorg comas stòraidh: falamh air steroids

Feumaidh cuid de thagraidhean cuideachd dàta a stòradh, ach tha iad gu math comhfhurtail leis nach tèid an dàta a shàbhaladh às deidh ath-thòiseachadh.

Mar eisimpleir, tha seirbheisean caching cuibhrichte le RAM, ach faodaidh iad cuideachd dàta a ghluasad nach eilear a’ cleachdadh ach gu stòradh a tha nas slaodaiche na RAM, gun mòran buaidh air coileanadh iomlan. Feumaidh tagraidhean eile a bhith mothachail gur dòcha gu bheil cuid de chuir a-steach ri leughadh a-mhàin anns na faidhlichean, leithid roghainnean no iuchraichean dìomhair.

Tha grunn sheòrsachan aig Kubernetes mu thràth meudan geàrr-ùine, ach tha an comas-gnìomh aca cuingealaichte ris na tha air a chuir an gnìomh anns na K8n.

Ephemeral Meudan CSI leig le Kubernetes a leudachadh le draibhearan CSI gus taic a thoirt do mheudan ionadail aotrom. San dòigh seo tha e comasach a chleachdadh structaran neo-riaghailteach: roghainnean, dìomhaireachdan, dàta aithneachaidh, caochladairean, is mar sin air adhart. Feumaidh draibhearan CSI a bhith air an atharrachadh gus taic a thoirt don fheart Kubernetes seo, leis nach eil dùil gum bi draibhearan àbhaisteach àbhaisteach ag obair - ach tha dùil gum bi na h-àireamhan sin air an cleachdadh air nód sam bith a chaidh a thaghadh airson a’ pod.

Dh’ fhaodadh seo a bhith na dhuilgheadas dha meudan a bhios ag ithe goireasan aoigheachd cudromach no airson stòradh nach fhaighear ach air cuid de luchd-aoigheachd. Sin as coireach gu bheil Kubernetes 1.19 a’ toirt a-steach dà fheart meud deuchainn alpha ùr a tha gu bun-bheachdail coltach ri leabhraichean EmptyDir:

  • tomhas-lìonaidh adhbhar coitcheann;

  • Cum sùil air comas stòraidh CSI.

Buannachdan an dòigh-obrach ùr:

  • faodaidh stòradh a bhith ionadail no ceangailte tro lìonra;

  • faodaidh meud sònraichte a bhith aig leabhraichean nach gabh a dhol thairis air leis an tagradh;

  • ag obair le draibhearan CSI sam bith a bheir taic do sholarachadh meudan leantainneach agus (gus taic a thoirt do lorg comas) a’ ghairm a chuir an gnìomh GetCapacity;

  • faodaidh beagan dàta tùsail a bhith aig leabhraichean a rèir an draibhear agus na roghainnean;

  • Thathas a’ toirt taic do gach obair àbhaisteach le tomhas-lìonaidh (a’ cruthachadh dealbh, ath-mheudachadh, msaa);

  • faodar leabhraichean a chleachdadh le rianadair tagraidh sam bith a ghabhas ri modal no sònrachadh tomhas-lìonaidh;

  • Bidh an clàr-ama Kubernetes a’ taghadh nodan freagarrach leis fhèin, agus mar sin chan eil feum air tuilleadh leudachaidhean clàr-ama a sholarachadh agus a rèiteachadh no bannan-lìn atharrachadh.

Roghainnean tagraidh

Mar sin, tha meudan geàrr-adhbhar coitcheann freagarrach airson na cùisean cleachdaidh a leanas:

Cuimhne leantainneach an àite RAM airson memcached

An tionndadh as ùire de memcached taic a bharrachd cleachdadh cuimhne leantainneach (Intel Optane, msaa, mu thuairmeas. eadar-theangair) an àite RAM àbhaisteach. Nuair a bhios tu a’ cleachdadh memcached tro rianadair tagraidh, faodaidh tu leabhraichean geàrr-ùine coitcheann a chleachdadh gus iarraidh gun tèid tomhas-lìonaidh de mheud sònraichte a thoirt seachad bho PMEM a’ cleachdadh an draibhear CSI, mar eisimpleir PMEM-CSI.

Stòradh ionadail LVM mar àite-obrach

Is dòcha gu feum tagraidhean a tha ag obair le dàta a tha nas motha na RAM stòradh ionadail le meud no tomhasan coileanaidh nach urrainn leabhraichean cunbhalach EmptyDir bho Kubernetes a thoirt seachad. Mar eisimpleir, airson an adhbhair seo chaidh a sgrìobhadh TopoLVM.

Cothrom leughaidh a-mhàin airson meudan dàta

Faodaidh roinneadh tomhas-lìonaidh leantainn gu cruthachadh làn leabhar nuair:

Faodar na leabhraichean sin a chuir suas ann am modh leughaidh a-mhàin.

Ciamar a tha an obair seo

Meudan Ephemeral Adhbhar Coitcheann

Is e prìomh fheart de leabhraichean geàrr-ùine adhbhar coitcheann an stòr lìonaidh ùr, EphemeralVolumeSource, anns a bheil na raointean gu lèir gus iarrtas meud a chruthachadh (gu h-eachdraidheil air ainmeachadh mar iarrtas meud leantainneach, PVC). Rianadair ùr ann an kube-controller-manager a 'coimhead air na pods a chruthaicheas a leithid de stòras lìonaidh, agus an uairsin a' cruthachadh PVC airson na pods sin. Airson an draibhear CSI, tha an t-iarrtas seo a’ coimhead an aon rud ris an fheadhainn eile, agus mar sin chan eil feum air taic shònraichte an seo.

Cho fad 's a tha na PVCan sin ann, faodar an cleachdadh mar iarrtasan sam bith eile air an tomhas-lìonaidh. Gu sònraichte, faodar iomradh a thoirt orra mar stòr dàta nuair a bhios iad a’ dèanamh lethbhreac de dh’ leabhar no a’ cruthachadh dealbh bho leabhar. Tha an stuth PVC cuideachd a 'toirt a-steach staid làithreach an tomhas-lìonaidh.

Tha ainmean PVCan a chaidh a chruthachadh gu fèin-ghluasadach air an ro-mhìneachadh: tha iad nan cothlamadh de ainm a’ pod agus ainm an leabhair, air an sgaradh le tàthan. Tha ainmean ro-mhìnichte ga dhèanamh nas fhasa eadar-obrachadh leis an PVC oir chan fheum thu coimhead air a shon ma tha fios agad air ainm a 'phoit agus ainm an leabhair. Is e an ana-cothrom gum faodadh an t-ainm a bhith air a chleachdadh mu thràth, a lorgar le Kubernetes agus mar thoradh air an sin tha am pod air a bhacadh bho bhith a’ tòiseachadh.

Gus dèanamh cinnteach gun tèid an tomhas-lìonaidh a dhubhadh às còmhla ris a’ pod, bidh an rianadair ag iarraidh an tomhas-lìonaidh fon t-sealbhadair. Nuair a thèid am pod a dhubhadh às, bidh an uidheamachd cruinneachaidh sgudail àbhaisteach ag obair, a chuireas às don iarrtas agus an tomhas-lìonaidh.

Bidh iarrtasan air am maidseadh leis an draibhear stòraidh tro uidheamachd àbhaisteach a’ chlas stòraidh. Ged a tha clasaichean le ceangal sa bhad agus fadalach (aka WaitForFirstConsumer) a’ faighinn taic, airson meudan geàrr-ùine tha e ciallach a chleachdadh WaitForFirstConsumer, an uairsin faodaidh an clàr-ama beachdachadh air cleachdadh nód agus cothrom stòraidh nuair a thaghas e nód. Tha feart ùr a’ nochdadh an seo.

A 'cumail sùil air comas stòraidh

Mar as trice chan eil fios aig an neach-clàraidh càite an cruthaich an draibhear CSI an tomhas-lìonaidh. Chan eil dòigh ann cuideachd don neach-clàraidh fios a chuir chun draibhear gu dìreach gus am fiosrachadh seo iarraidh. Mar sin, bidh an neach-clàraidh a’ cunntadh gus an lorg e fear air am faighear cothrom air meudan (ceangail fadalach) no fàgaidh e an roghainn àite gu tur don draibhear (ceangaltach sa bhad).

ùr API CSIStorageCapacity, a tha ann an ìre alpha, a’ leigeil leis an dàta riatanach a bhith air a stòradh ann am msaa gus am bi e ri fhaighinn don chlàr-ama. Eu-coltach ri taic airson meudan geàrr-ùine coitcheann, nuair a chleachdas tu an draibhear, feumaidh tu lorg comas stòraidh a chomasachadh: external-provisioner bu chòir dhaibh am fiosrachadh comas a gheibhear bhon draibhear fhoillseachadh gu àbhaisteach GetCapacity.

Ma dh'fheumas an clàr-ama nòta a thaghadh airson pod le tomhas-lìonaidh gun cheangal a chleachdas ceangal fadalach, agus ma tha an dràibhear air am feart seo a chomasachadh nuair a bha e ga chleachdadh le bhith a' suidheachadh a' bhratach CSIDriver.storageCapacity, an uairsin thèid nodan aig nach eil comas stòraidh gu leòr a thoirt air falbh gu fèin-ghluasadach. Bidh seo ag obair an dà chuid airson meudan geàrr-ùine coitcheann agus leantainneach, ach chan ann airson leabhraichean geàrr-ùine CSI oir chan urrainn dha Kubernetes na crìochan aca a leughadh.

Mar as àbhaist, bidh meudan ceangailte sa bhad air an cruthachadh mus tèid pods a chlàradh, agus bidh an draibhear stòraidh a’ taghadh an àite aca, mar sin nuair a bhios tu a’ rèiteachadh external-provisioner Gu gnàthach, thèid clasaichean stòraidh le ceangal sa bhad a sheachnadh, leis nach tèid an dàta seo a chleachdadh idir.

Leis gu feum an clàr-ama kubernetes obrachadh le fiosrachadh a dh’ fhaodadh a bhith seann-fhasanta, chan eil gealltanas sam bith ann gum bi comas ri fhaighinn anns a h-uile cùis nuair a thèid an tomhas-lìonaidh a chruthachadh, ach a dh’ aindeoin sin tha na cothroman gun tèid a chruthachadh às aonais ath-thagradh.

NB Gheibh thu fiosrachadh nas mionaidiche, a bharrachd air “cleachdadh air seasamh cait” gu sàbhailte, agus ma thachras suidheachadh gu tur do-chreidsinneach, gheibh thu taic taic theicnigeach le teisteanas aig cùrsaichean dian - Bunait Kubernetes thèid a chumail air 28-30 Sultain, agus airson eòlaichean nas adhartaiche Beanntan Mega Dàmhair 14-16.

Tèarainteachd

CSISstorageCumas

Bidh nithean CSIStorageCapacity a’ fuireach ann an àiteachan ainm; nuair a thèid gach draibhear CSI a chuir a-mach na àite-ainm fhèin, thathas a’ moladh còraichean RBAC a chuingealachadh gu CSIStorageCapacity san àite sin leis gu bheil e follaiseach cò às a tha an dàta a’ tighinn. Cha bhith Kubernetes a’ sgrùdadh airson seo co-dhiù, agus mar as trice bidh draibhearan air an cur san aon àite-ainm, agus mar sin aig a’ cheann thall thathar an dùil gun obraich na draibhearan agus nach foillsich iad dàta ceàrr (agus seo far an do dh’ fhàillig a’ chairt agam, mu thuairmeas. eadar-theangair stèidhichte air fealla-dhà feusagach)

Meudan Ephemeral Adhbhar Coitcheann

Ma tha còraichean aig luchd-cleachdaidh pod a chruthachadh (gu dìreach no gu neo-dhìreach), bidh e comasach dhaibh cuideachd leabhraichean geàrr-ùine coitcheann a chruthachadh eadhon ged nach eil còraichean aca iarrtas a chruthachadh air an tomhas-lìonaidh. Tha seo air sgàth gu bheilear a’ cur sgrùdaidhean cead RBAC air an rianadair a chruthaicheas am PVC, chan ann air an neach-cleachdaidh. Is e seo am prìomh atharrachadh ri chur ris don chunntas agad, mus cuir thu am feart seo an comas air cruinneachaidhean far nach bu chòir còir a bhith aig luchd-cleachdaidh neo-earbsach leabhraichean a chruthachadh.

Eisimpleir:

Dealaich meur Tha PMEM-CSI a’ toirt a-steach a h-uile atharrachadh riatanach gus cruinneachadh Kubernetes 1.19 a ruith taobh a-staigh innealan brìgheil QEMU leis na feartan uile aig ìre alpha. Chan eil còd an dràibhear air atharrachadh, chan eil ach an cleachdadh air atharrachadh.

Air inneal freagarrach (Linux, faodaidh neach-cleachdaidh àbhaisteach a chleachdadh Docker, seall an seo mion-fhiosrachadh) bheir na h-òrdughan seo suas am brabhsair agus stàlaich iad an draibhear PMEM-CSI:

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

Às deidh a h-uile càil obrachadh, bidh stiùireadh cleachdaidh anns an toradh:

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 -

Chan eil còir aig daoine stuthan CSIStorageCapacity a leughadh, agus mar sin tha feum air beagan giollachd. Seallaidh sìoltachain teamplaid Golang na clasaichean stòraidh, seallaidh an eisimpleir seo an t-ainm, topology agus comas:

$ 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

Tha an susbaint a leanas aig aon nì:

$ 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>

Feuchaidh sinn ri tagradh demo a chruthachadh le aon tomhas geàrr-ùine coitcheann. Susbaint an fhaidhle 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

Às deidh cruthachadh, mar a chithear anns an stiùireadh gu h-àrd, tha pod a bharrachd agus PVC againn a-nis:

$ 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

Neach-seilbh PVC - fo:

$ 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
...

Fiosrachadh air ùrachadh an dùil airson 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

Ma tha feum aig tagradh eile air barrachd air 26620Mi, cha toir an clàr-ama aire pmem-csi-pmem-govm-worker1 co-dhiù.

Dè a-nis?

Tha an dà fheart fhathast gan leasachadh. Chaidh grunn thagraidhean fhosgladh aig àm deuchainn alpha. Tha am moladh leasachaidh a’ clàradh na h-obrach a dh’fheumar a dhèanamh gus gluasad gu ìre beta, a bharrachd air na roghainnean eile air an deach beachdachadh agus diùltadh mu thràth:

Source: www.habr.com

Cuir beachd ann