Ҳаҷмҳои эфемерӣ бо пайгирии қобилияти нигоҳдорӣ: EmptyDir дар стероидҳо

Ҳаҷмҳои эфемерӣ бо пайгирии қобилияти нигоҳдорӣ: EmptyDir дар стероидҳо

Баъзе замимаҳо инчунин бояд маълумотро нигоҳ доранд, аммо онҳо аз он хеле бароҳатанд, ки маълумот пас аз бозоғозӣ захира карда намешавад.

Масалан, хидматҳои кэш аз ҷониби RAM маҳдуданд, аммо инчунин метавонанд маълумотеро интиқол диҳанд, ки барои нигоҳдорӣ хеле кам истифода мешаванд, ки нисбат ба RAM сусттар аст ва ба кори умумӣ таъсири кам дорад. Дигар замимаҳо бояд донанд, ки метавонанд дар файлҳо баъзе вурудоти танҳо барои хондан вуҷуд дошта бошанд, ба монанди танзимот ё калидҳои махфӣ.

Kubernetes аллакай якчанд намуд дорад ҳаҷми эфемерӣ, аммо фаъолияти онҳо бо он чизе, ки дар K8s амалӣ карда мешавад, маҳдуд аст.

Эфемерӣ Ҳаҷми CSI ба Kubernetes имкон дод, ки бо ронандагони CSI васеъ карда шавад, то барои ҳаҷми сабуки маҳаллӣ дастгирӣ кунад. Бо ин рох истифода бурдан мумкин аст сохторҳои худсарона: танзимот, асрор, маълумоти мушаххас, тағирёбандаҳо ва ғайра. Драйверҳои CSI бояд барои дастгирии ин хусусияти Kubernetes тағир дода шаванд, зеро тахмин карда мешавад, ки драйверҳои муқаррарии стандартишуда кор намекунанд - аммо тахмин карда мешавад, ки чунин ҳаҷмҳоро дар ҳама гиреҳи интихобшуда истифода бурдан мумкин аст.

Ин метавонад барои ҳаҷмҳое, ки захираҳои назарраси мизбонро истеъмол мекунанд ё барои нигоҳдорӣ, ки танҳо дар баъзе ҳостҳо дастрасанд, мушкилоте бошад. Аз ин рӯ, Kubernetes 1.19 ду хусусияти нави ҳаҷми санҷиши алфаро муаррифӣ мекунад, ки консептуалӣ ба ҳаҷмҳои EmptyDir монанданд:

  • ҳаҷми эфемерии таъиноти умумӣ;

  • Пайгирии иқтидори нигаҳдории CSI.

Афзалиятҳои усули нав:

  • нигоҳдорӣ метавонад маҳаллӣ бошад ё тавассути шабака пайваст шавад;

  • ҳаҷмҳо метавонанд андозаи муайяне дошта бошанд, ки аз ҷониби ариза зиёд карда намешавад;

  • бо ҳама драйверҳои CSI кор мекунад, ки таъмини ҳаҷми доимиро дастгирӣ мекунад ва (барои дастгирии пайгирии иқтидор) зангро амалӣ мекунад GetCapacity;

  • ҳаҷмҳо метавонанд вобаста ба ронанда ва танзимот баъзе маълумоти ибтидоӣ дошта бошанд;

  • ҳама амалиётҳои стандартӣ бо ҳаҷми (эҷоди акс, тағир додани андоза ва ғайра) дастгирӣ карда мешаванд;

  • ҳаҷмҳоро бо ҳама гуна контролери барномае истифода бурдан мумкин аст, ки модул ё мушаххасоти ҳаҷмро қабул мекунад;

  • Банақшагирии Kubernetes гиреҳҳои мувофиқро мустақилона интихоб мекунад, аз ин рӯ дигар зарурати таъмин ва танзим кардани васеъшавии нақшакаш ё тағир додани вебхукҳо нест.

Барномаҳо

Аз ин рӯ, ҳаҷмҳои эфемерии таъиноти умумӣ барои ҳолатҳои зерини истифода мувофиқанд:

Хотираи доимӣ ҳамчун ивазкунандаи RAM барои memcached

Варақаҳои охирини memcached дастгирии иловашуда истифодаи хотираи доимӣ (Intel Optane ва ғайра, тақрибан. тарчумон) ба ҷои RAM муқаррарӣ. Ҳангоми ҷойгиркунии memcached тавассути контролери барнома, шумо метавонед ҳаҷми умумии таъиноти эфемериро истифода баред, то дархост кунед, ки ҳаҷми андозаи додашуда аз PMEM бо истифода аз драйвери CSI ҷудо карда шавад, масалан PMEM-CSI.

Анбори маҳаллии LVM ҳамчун фазои корӣ

Барномаҳое, ки бо маълумоте, ки аз RAM калонтар кор мекунанд, метавонанд нигаҳдории маҳаллиро бо андоза ё ченакҳои иҷро, ки ҳаҷми муқаррарии EmptyDir аз Kubernetes таъмин карда наметавонанд, талаб кунанд. Масалан, бо хамин максад навишта шудааст TopoLVM.

Дастрасии танҳо барои хондан барои ҳаҷми маълумот

Тақсими як ҷилди метавонад боиси эҷоди ҳаҷми пурра гардад, вақте:

Ин ҷилдҳо метавонанд дар ҳолати танҳо барои хондан насб карда шаванд.

Чӣ тавр ба ин кор

Ҳаҷмҳои эфемерии таъиноти умумӣ

Хусусияти асосии ҷилдҳои эфемерии таъиноти умумӣ манбаи нави ҳаҷм мебошад, EphemeralVolumeSource, дорои ҳамаи майдонҳо барои эҷоди дархости ҳаҷм (таърихан дархости ҳаҷми доимӣ, PVC номида мешавад). Назоратчии нав дар kube-controller-manager ба қуттиҳое, ки чунин манбаи ҳаҷмро ба вуҷуд меоранд, назар мекунад ва сипас барои он қуттиҳо PVC эҷод мекунад. Барои ронандаи CSI, ин дархост ба дигарҳо монанд аст, бинобар ин дар ин ҷо ягон дастгирии махсус лозим нест.

То он даме, ки чунин PVCҳо вуҷуд доранд, онҳо метавонанд мисли ҳама дархостҳои дигар дар ҳаҷм истифода шаванд. Аз ҷумла, онҳоро метавон ҳамчун манбаи маълумот ҳангоми нусхабардории ҳаҷм ё эҷоди акс аз ҳаҷм истинод кард. Объекти PVC инчунин ҳолати кунунии ҳаҷмро дар бар мегирад.

Номҳои PVC-ҳои ба таври худкор сохташуда пешакӣ муайян карда шудаанд: онҳо маҷмӯи номи подкаст ва номи ҳаҷм мебошанд, ки бо дефис ҷудо шудаанд. Номҳои пешакӣ муайяншуда муомиларо бо PVC осонтар мекунанд, зеро ба шумо лозим нест, ки онро ҷустуҷӯ кунед, агар шумо ном ва номи ҳаҷмро медонед. Камбудӣ дар он аст, ки ном метавонад аллакай истифода шавад, ки онро Кубернетес муайян мекунад ва дар натиҷа поддон аз оғоз баста мешавад.

Барои боварӣ ҳосил кардани он, ки ҳаҷм дар якҷоягӣ бо подкӯҳ нест карда мешавад, контроллер ба ҳаҷми зери соҳиби он дархост мекунад. Вақте ки подкӯҳ нест карда мешавад, механизми стандартии ҷамъоварии ахлот кор мекунад, ки ҳам дархост ва ҳам ҳаҷмро нест мекунад.

Дархостҳо аз ҷониби ронандаи нигаҳдорӣ тавассути механизми муқаррарии синфи нигоҳдорӣ мувофиқ карда мешаванд. Гарчанде ки дарсҳо бо ҳатмии фаврӣ ва дер (ака WaitForFirstConsumer) дастгирӣ карда мешавад, барои ҷилди эфемерӣ истифодаи он маъно дорад WaitForFirstConsumer, он гоҳ нақшасоз метавонад ҳангоми интихоби гиреҳ ҳам истифодаи гиреҳ ва ҳам мавҷудияти нигаҳдоштро баррасӣ кунад. Дар ин ҷо хусусияти нав пайдо мешавад.

Пайгирии қобилияти нигоҳдорӣ

Одатан, барномасоз дар бораи он, ки драйвери CSI ҳаҷмро дар куҷо эҷод мекунад, намедонад. Инчунин ҳеҷ гуна роҳе вуҷуд надорад, ки нақшакаш мустақиман бо ронанда тамос гирад, то ин маълумотро дархост кунад. Аз ин рӯ, банақшагир гиреҳҳоро пурсед, то он даме, ки ба он ҳаҷмҳоро дастрас кардан мумкин аст (ҳатмии дер) ё интихоби маконро комилан ба дӯши ронанда вогузор мекунад (ҳатмии фаврӣ).

Нав API CSIStorageCapacity, ки дар марҳилаи алфа қарор дорад, имкон медиҳад, ки маълумоти зарурӣ дар etcd нигоҳ дошта шаванд, то он ба нақшакаш дастрас бошад. Баръакси дастгирии ҳаҷмҳои эфемерии таъиноти умумӣ, вақте ки шумо драйверро ҷойгир мекунед, шумо бояд пайгирии қобилияти нигоҳдории онро фаъол созед: external-provisioner бояд маълумоти иқтидори аз ронанда гирифта тавассути муқаррарӣ нашр GetCapacity.

Агар ба нақшагир лозим ояд, ки гиреҳро барои подка бо ҳаҷми номаҳдуд, ки дер ҳатмӣ истифода мебарад, интихоб кунад ва ронанда ин хусусиятро ҳангоми ҷойгиркунӣ бо гузоштани парчам фаъол кардааст. CSIDriver.storageCapacity, он гоҳ гиреҳҳое, ки қобилияти нигоҳдории кофӣ надоранд, ба таври худкор партофта мешаванд. Ин ҳам барои ҷилдҳои эфемерӣ ва ҳам доимии таъиноти умумӣ кор мекунад, аммо на барои ҳаҷмҳои эфемерии CSI, зеро параметрҳои онҳоро Кубернетес хонда наметавонад.

Тавре маъмулӣ, ҳаҷмҳои фаврӣ алоқаманд пеш аз ба нақша гирифтани подкӯҳҳо сохта мешаванд ва ҷойгиркунии онҳоро драйвери нигаҳдорӣ интихоб мекунад, бинобар ин ҳангоми конфигуратсия external-provisioner Бо нобаёнӣ, синфҳои нигоҳдорӣ бо ҳатмии фаврӣ гузаронида мешаванд, зеро ин маълумот ба ҳар ҳол истифода намешавад.

Азбаски банақшагирии kubernetes маҷбур аст, ки бо маълумоти эҳтимолан кӯҳнашуда кор кунад, ҳеҷ кафолате нест, ки иқтидор дар ҳама ҳолат ҳангоми эҷоди ҳаҷм дастрас хоҳад буд, аммо шонси бе кӯшиши такрорӣ эҷод кардани он зиёд мешавад.

БМТ Шумо метавонед маълумоти муфассалтар гиред, инчунин ба таври бехатар "дар курсии гурбаҳо машқ кунед" ва дар ҳолати комилан нофаҳмо, дар курсҳои интенсивӣ кӯмаки техникии тахассусӣ гиред - Пойгоҳи Кубернетес 28—30 сентябрь ва барои мутахассисони пешкадам барпо мегардад Kubernetes Mega 14—16 октябр.

Амният

CSIStorageCapacity

Объектҳои CSIStorageCapacity дар фазои номҳо ҷойгиранд; ҳангоми паҳн кардани ҳар як драйвери CSI дар фазои номи худ, тавсия дода мешавад, ки ҳуқуқҳои RBAC ба CSIStorageCapacity дар он фазо маҳдуд карда шаванд, зеро маълум аст, ки маълумот аз куҷо меояд. Кубернетес ба ҳар ҳол инро тафтиш намекунад ва одатан ронандагон дар як фазои ном гузошта мешаванд, аз ин рӯ, дар ниҳоят интизор меравад, ки ронандагон кор кунанд ва маълумоти нодурустро нашр накунанд (ва дар ин ҷо корти ман ноком шуд, тақрибан. тарчумон дар асоси шухии ришдор)

Ҳаҷмҳои эфемерии таъиноти умумӣ

Агар корбарон ҳуқуқи эҷоди подкӯҳро дошта бошанд (бевосита ё бавосита), онҳо инчунин метавонанд ҷилди фаврии таъиноти умумиро эҷод кунанд, ҳатто агар онҳо ҳуқуқи эҷоди дархост дар ҳаҷм надошта бошанд. Сабаб дар он аст, ки санҷиши иҷозати RBAC ба контроллере татбиқ карда мешавад, ки PVC-ро эҷод мекунад, на ба корбар. Ин тағироти асосӣ барои илова кардан аст ба ҳисоби шумо, пеш аз ба кор андохтани ин хусусият дар кластерҳо, ки корбарони нобовар набояд ҳуқуқи эҷоди ҳаҷмҳоро дошта бошанд.

Мисол

Алоҳида twig PMEM-CSI дорои ҳама тағйироти зарурӣ барои идора кардани кластери Kubernetes 1.19 дар дохили мошинҳои виртуалии QEMU бо тамоми хусусиятҳо дар марҳилаи алфа мебошад. Рамзи ронанда тағир наёфтааст, танҳо ҷойгиркунӣ тағир ёфтааст.

Дар мошини мувофиқ (Linux, корбари муқаррарӣ метавонад Доктор, назар дар ин ҷо тафсилот) ин фармонҳо кластерро мебароранд ва драйвери 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

Пас аз ҳама кор, натиҷа дастур оид ба истифодаро дар бар мегирад:

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 барои хондани одамон пешбинӣ нашудаанд, аз ин рӯ баъзе коркард лозим аст. Филтрҳои қолаби Голанг синфҳои нигоҳдорӣ нишон медиҳанд, ин мисол ном, топология ва қобилиятро нишон медиҳад:

$ 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

Як объект дорои мазмуни зерин аст:

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

Биёед кӯшиш кунем, ки як барномаи намоишӣ бо як ҳаҷми эфемерии таъиноти умумӣ эҷод кунем. Мундариҷаи файл 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

Пас аз эҷод, тавре ки дар дастурҳои дар боло нишон дода шудааст, мо ҳоло як порчаи иловагӣ ва 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 - зери:

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

Интизор меравад, ки маълумоти навшуда барои 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

Агар барномаи дигар зиёда аз 26620Mi лозим бошад, нақшакаш ба назар намегирад pmem-csi-pmem-govm-worker1 дар ҳар сурат.

Чӣ оянда аст?

Ҳарду хусусият ҳоло ҳам дар таҳия мебошанд. Якчанд барномаҳо ҳангоми санҷиши алфа кушода шуданд. Пайвандҳои пешниҳоди такмилдиҳӣ кореро, ки барои гузаштан ба марҳилаи бета бояд анҷом дода шаванд, инчунин кадом алтернативаҳо аллакай баррасӣ ва рад карда шудаанд, ҳуҷҷатгузорӣ мекунанд:

Манбаъ: will.com

Илова Эзоҳ