Cynhwysedd storio yn olrhain cyfeintiau byrhoedlog: EmptyDir ar steroidau

Cynhwysedd storio yn olrhain cyfeintiau byrhoedlog: EmptyDir ar steroidau

Mae angen i rai cymwysiadau storio data hefyd, ond maent yn eithaf cyfforddus â'r ffaith na fydd y data'n cael ei gadw ar ôl ailgychwyn.

Er enghraifft, mae gwasanaethau caching wedi'u cyfyngu gan RAM, ond gallant hefyd symud data na chaiff ei ddefnyddio'n aml i storio sy'n arafach na RAM, heb fawr o effaith ar berfformiad cyffredinol. Mae angen i raglenni eraill fod yn ymwybodol y gall fod rhywfaint o fewnbwn darllen yn unig yn y ffeiliau, megis gosodiadau neu allweddi cyfrinachol.

Mae gan Kubernetes sawl math eisoes cyfrolau byrhoedlog, ond mae eu swyddogaeth yn gyfyngedig i'r hyn a weithredir yn y K8s.

Effemeral Cyfrolau CSI caniatáu i Kubernetes gael ei ymestyn gyda gyrwyr CSI i ddarparu cefnogaeth ar gyfer cyfeintiau lleol ysgafn. Yn y modd hwn mae'n bosibl defnyddio strwythurau mympwyol: gosodiadau, cyfrinachau, data adnabod, newidynnau, ac ati. Rhaid addasu gyrwyr CSI i gefnogi'r nodwedd Kubernetes hon, gan y tybir na fydd gyrwyr safonol rheolaidd yn gweithio - ond tybir y gellir defnyddio cyfeintiau o'r fath ar unrhyw nod a ddewiswyd ar gyfer y pod.

Gall hyn fod yn broblem ar gyfer cyfeintiau sy'n defnyddio adnoddau gwesteiwr sylweddol neu ar gyfer storio sydd ond ar gael ar rai gwesteiwyr. Dyna pam mae Kubernetes 1.19 yn cyflwyno dwy nodwedd cyfaint profi alffa newydd sy'n debyg yn gysyniadol i gyfrolau EmptyDir:

  • cyfrolau byrhoedlog pwrpas cyffredinol;

  • Olrhain cynhwysedd storio CSI.

Manteision y dull newydd:

  • gall storio fod yn lleol neu wedi'i gysylltu trwy rwydwaith;

  • gall cyfrolau fod â maint penodol na ellir mynd y tu hwnt iddo gan y cais;

  • gweithio gydag unrhyw yrwyr CSI sy'n cefnogi darparu niferoedd parhaus ac (i gefnogi olrhain gallu) gweithredu'r alwad GetCapacity;

  • efallai y bydd gan gyfeintiau rywfaint o ddata cychwynnol yn dibynnu ar y gyrrwr a'r gosodiadau;

  • cefnogir pob gweithrediad safonol gyda chyfaint (creu ciplun, newid maint, ac ati);

  • gellir defnyddio cyfrolau gydag unrhyw reolwr cymhwysiad sy'n derbyn modiwl neu fanyleb cyfaint;

  • Mae'r amserlennydd Kubernetes yn dewis nodau addas ar ei ben ei hun, felly nid oes angen darparu a ffurfweddu estyniadau amserlennu nac addasu bachau gwe mwyach.

Opsiynau cais

Felly, mae cyfeintiau byrhoedlog pwrpas cyffredinol yn addas ar gyfer yr achosion defnydd canlynol:

Cof parhaus yn lle RAM ar gyfer memcached

Y datganiadau diweddaraf o memcached cefnogaeth ychwanegol defnyddio cof parhaus (Intel Optane, ac ati, tua. cyfieithydd) yn lle RAM rheolaidd. Wrth ddefnyddio memcached trwy reolwr cymhwysiad, gallwch ddefnyddio cyfrolau byrhoedlog pwrpas cyffredinol i ofyn i gyfaint o faint penodol gael ei ddyrannu o PMEM gan ddefnyddio'r gyrrwr CSI, er enghraifft PMEM-CSI.

Storfa leol LVM fel man gwaith

Efallai y bydd angen storfa leol ar gymwysiadau sy'n gweithio gyda data sy'n fwy na RAM gyda metrigau maint neu berfformiad na all cyfrolau EmptyDir rheolaidd o Kubernetes eu darparu. Er enghraifft, at y diben hwn y cafodd ei ysgrifennu TopoLVM.

Mynediad darllen yn unig ar gyfer cyfeintiau data

Gall dyrannu cyfrol arwain at greu cyfrol lawn pan:

Gellir gosod y cyfrolau hyn yn y modd darllen yn unig.

Sut mae hwn

Cyfrolau byrhoedlog pwrpas cyffredinol

Nodwedd allweddol o gyfrolau byrhoedlog pwrpas cyffredinol yw'r ffynhonnell gyfrol newydd, EphemeralVolumeSource, yn cynnwys yr holl feysydd i greu cais cyfaint (a elwir yn hanesyddol yn gais cyfaint parhaus, PVC). Rheolydd newydd i mewn kube-controller-manager yn edrych ar y codennau sy'n creu ffynhonnell gyfaint o'r fath, ac yna'n creu PVC ar gyfer y codennau hynny. Ar gyfer y gyrrwr CSI, mae'r cais hwn yn edrych yr un fath â'r lleill, felly nid oes angen cefnogaeth arbennig yma.

Cyn belled â bod PVCs o'r fath yn bodoli, gellir eu defnyddio fel unrhyw geisiadau eraill ar y cyfaint. Yn benodol, gellir cyfeirio atynt fel ffynhonnell ddata wrth gopïo cyfrol neu greu ciplun o gyfrol. Mae'r gwrthrych PVC hefyd yn cynnwys cyflwr presennol y gyfrol.

Mae enwau PVCs a grëwyd yn awtomatig wedi'u rhagddiffinio: maent yn gyfuniad o enw'r pod ac enw'r gyfrol, wedi'u gwahanu gan gysylltnod. Mae enwau rhagddiffiniedig yn ei gwneud hi'n haws rhyngweithio â'r PVC oherwydd nid oes rhaid i chi chwilio amdano os ydych chi'n gwybod enw'r pod ac enw'r gyfrol. Yr anfantais yw y gallai'r enw fod yn cael ei ddefnyddio eisoes, sy'n cael ei ganfod gan Kubernetes ac o ganlyniad mae'r pod wedi'i rwystro rhag cychwyn.

Er mwyn sicrhau bod y gyfrol yn cael ei dileu ynghyd â'r pod, mae'r rheolwr yn gwneud cais i'r gyfrol o dan y perchennog. Pan fydd y pod yn cael ei ddileu, mae'r mecanwaith casglu sbwriel safonol yn gweithio, sy'n dileu'r cais a'r cyfaint.

Caiff ceisiadau eu paru gan y gyrrwr storio trwy fecanwaith arferol y dosbarth storio. Er bod dosbarthiadau gyda rhwymo ar unwaith ac yn hwyr (aka WaitForFirstConsumer) yn cael eu cefnogi, ar gyfer cyfrolau byrhoedlog mae'n gwneud synnwyr i'w defnyddio WaitForFirstConsumer, yna gall y trefnydd ystyried defnydd nod ac argaeledd storio wrth ddewis nod. Mae nodwedd newydd yn ymddangos yma.

Olrhain Cynhwysedd Storio

Yn nodweddiadol nid oes gan y trefnydd unrhyw wybodaeth am ble bydd y gyrrwr CSI yn creu'r cyfaint. Nid oes unrhyw ffordd ychwaith i'r trefnydd gysylltu â'r gyrrwr yn uniongyrchol i ofyn am y wybodaeth hon. Felly, mae'r trefnydd yn pleidleisio nes iddo ddod o hyd i un y gellir cael mynediad ato (rhwymo hwyr) neu'n gadael y dewis o leoliad yn gyfan gwbl i'r gyrrwr (rhwymo ar unwaith).

New API CSIStorageCapacity, sydd yn y cam alffa, yn caniatáu i'r data angenrheidiol gael ei storio mewn ac ati fel ei fod ar gael i'r trefnydd. Yn wahanol i gefnogaeth ar gyfer cyfeintiau byrhoedlog pwrpas cyffredinol, pan fyddwch chi'n defnyddio'r gyrrwr, rhaid i chi alluogi olrhain cynhwysedd storio: external-provisioner cyhoeddi'r wybodaeth am gapasiti a dderbyniwyd gan y gyrrwr fel arfer GetCapacity.

Os oes angen i'r rhaglennydd ddewis nod ar gyfer pod gyda chyfaint heb ei rwymo sy'n defnyddio rhwymiad hwyr, a bod y gyrrwr wedi galluogi'r nodwedd hon yn ystod y defnydd trwy osod y faner CSIDriver.storageCapacity, yna bydd nodau nad oes ganddynt ddigon o gapasiti storio yn cael eu taflu'n awtomatig. Mae hyn yn gweithio ar gyfer cyfrolau byrhoedlog cyffredinol a pharhaus, ond nid ar gyfer cyfrolau byrhoedlog CSI oherwydd ni all Kubernetes ddarllen eu paramedrau.

Yn ôl yr arfer, mae cyfeintiau sydd wedi'u cysylltu'n syth yn cael eu creu cyn i'r codennau gael eu trefnu, a dewisir eu lleoliad gan y gyrrwr storio, felly wrth ffurfweddu external-provisioner Yn ddiofyn, mae dosbarthiadau storio gyda rhwymiad uniongyrchol yn cael eu hepgor, gan na fydd y data hwn yn cael ei ddefnyddio beth bynnag.

Gan fod y kubernetes scheduler yn cael ei orfodi i weithio gyda gwybodaeth a allai fod yn hen ffasiwn, nid oes unrhyw sicrwydd y bydd capasiti ar gael ym mhob achos pan fydd y cyfaint yn cael ei greu, ond serch hynny mae'r siawns y bydd yn cael ei greu heb ailgynigion yn cynyddu.

DS Gallwch gael gwybodaeth fanylach, yn ogystal ag “ymarfer ar y stondin cathod” yn ddiogel, ac mewn achos o sefyllfa gwbl annealladwy, derbyn cymorth cymorth technegol cymwys ar gyrsiau dwys - Sylfaen Kubernetes yn cael ei gynnal ar 28-30 Medi, ac ar gyfer arbenigwyr mwy datblygedig Kubernetes Mega Hydref 14–16.

diogelwch

Cynhwysedd CSISstorage

Mae gwrthrychau CSIStorageCapacity yn byw mewn gofodau enwau; wrth gyflwyno pob gyrrwr CSI yn ei ofod enw ei hun, argymhellir cyfyngu hawliau RBAC i'r CSIStorageCapacity yn y gofod hwnnw gan ei fod yn amlwg o ble mae'r data'n dod. Nid yw Kubernetes yn gwirio am hyn beth bynnag, ac fel arfer mae gyrwyr yn cael eu rhoi yn yr un gofod enw, felly yn y pen draw disgwylir i'r gyrwyr weithio a pheidio â chyhoeddi data anghywir (a dyma lle methodd fy ngherdyn, tua. cyfieithydd yn seiliedig ar jôc barfog)

Cyfrolau byrhoedlog pwrpas cyffredinol

Os oes gan ddefnyddwyr hawliau i greu pod (yn uniongyrchol neu'n anuniongyrchol), byddant hefyd yn gallu creu cyfrolau byrhoedlog pwrpas cyffredinol hyd yn oed os nad oes ganddynt hawliau i greu cais ar y gyfrol. Mae hyn oherwydd bod gwiriadau caniatâd RBAC yn cael eu cymhwyso i'r rheolydd sy'n creu'r PVC, nid i'r defnyddiwr. Dyma'r prif newid i'w ychwanegu i'ch cyfrif, cyn galluogi'r nodwedd hon ar glystyrau lle na ddylai defnyddwyr diymddiried gael hawliau i greu cyfrolau.

Enghraifft

Ar wahân cangen Mae PMEM-CSI yn cynnwys yr holl newidiadau angenrheidiol i redeg clwstwr Kubernetes 1.19 y tu mewn i beiriannau rhithwir QEMU gyda'r holl nodweddion yn y cam alffa. Nid yw'r cod gyrrwr wedi newid, dim ond y lleoliad sydd wedi newid.

Ar beiriant addas (Linux, gall defnyddiwr arferol ddefnyddio Docker, edrych yma manylion) bydd y gorchmynion hyn yn dod â'r clwstwr i fyny ac yn gosod y gyrrwr 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

Ar ôl i bopeth weithio, bydd yr allbwn yn cynnwys cyfarwyddiadau defnyddio:

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 -

Nid yw gwrthrychau CSIStorageCapcity i fod i gael eu darllen gan fodau dynol, felly mae angen rhywfaint o brosesu. Bydd hidlwyr templed Golang yn dangos y dosbarthiadau storio, bydd yr enghraifft hon yn dangos yr enw, topoleg a chynhwysedd:

$ 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

Mae gan un gwrthrych y cynnwys canlynol:

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

Gadewch i ni geisio creu cymhwysiad demo gyda chyfaint byrhoedlog un pwrpas cyffredinol. Cynnwys y ffeil 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

Ar ôl creu, fel y dangosir yn y cyfarwyddiadau uchod, mae gennym bellach god ychwanegol a 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

Perchennog PVC - o dan:

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

Gwybodaeth wedi'i diweddaru ar gyfer 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

Os oes angen mwy na 26620Mi ar gais arall, ni fydd y trefnydd yn cymryd i ystyriaeth pmem-csi-pmem-govm-worker1 mewn unrhyw achos.

Beth sydd nesaf?

Mae'r ddwy nodwedd yn dal i gael eu datblygu. Agorwyd sawl cais yn ystod profion alffa. Mae’r cynnig gwella’n cysylltu â’r gwaith y mae angen ei wneud i symud i’r cam beta, yn ogystal â pha ddewisiadau eraill sydd eisoes wedi’u hystyried a’u gwrthod:

Ffynhonnell: hab.com

Ychwanegu sylw