Ma Ephemeral Volumes okhala ndi Kusunga Mphamvu Zosungira: EmptyDir pa Steroids

Ma Ephemeral Volumes okhala ndi Kusunga Mphamvu Zosungira: EmptyDir pa Steroids

Mapulogalamu ena amafunikanso kusunga deta, koma amakhala omasuka ndi mfundo yakuti deta sidzapulumutsidwa pambuyo poyambitsanso.

Mwachitsanzo, ntchito zosungiramo zosungira zimakhala zochepa ndi RAM, koma zimathanso kusuntha deta yomwe sagwiritsidwa ntchito kawirikawiri kusungirako yomwe imakhala yochedwa kuposa RAM, yomwe imakhudza pang'ono ntchito yonse. Mapulogalamu ena ayenera kudziwa kuti pakhoza kukhala zowerengera zokha m'mafayilo, monga zoikamo kapena makiyi achinsinsi.

Kubernetes ali kale ndi mitundu ingapo ephemeral volumes, koma magwiridwe antchito awo amangotengera zomwe zikugwiritsidwa ntchito mu K8s.

Ephemeral Mtengo wapatali wa magawo CSI adalola Kubernetes kukulitsidwa ndi madalaivala a CSI kuti apereke chithandizo cha ma voliyumu am'deralo. Mwanjira imeneyi ndizotheka kugwiritsa ntchito zomangira mopondera: zoikamo, zinsinsi, chizindikiritso deta, zosintha, ndi zina zotero. Madalaivala a CSI ayenera kusinthidwa kuti athandizire mbali iyi ya Kubernetes, chifukwa zimaganiziridwa kuti madalaivala okhazikika nthawi zonse sangagwire ntchito - koma zimaganiziridwa kuti ma voliyumu oterowo angagwiritsidwe ntchito pa mfundo iliyonse yosankhidwa pa pod.

Izi zitha kukhala vuto pama voliyumu omwe amawononga zida zazikulu zosungirako kapena zosungira zomwe zimapezeka pa olandila ena okha. Ichi ndichifukwa chake Kubernetes 1.19 imabweretsa zinthu ziwiri zatsopano zoyeserera za alpha zomwe zimafanana ndi mavoliyumu a EmptyDir:

  • ambiri cholinga ephemeral voliyumu;

  • CSI yosungirako mphamvu kutsatira.

Ubwino wa njira yatsopanoyi:

  • kusungirako kungakhale kwapafupi kapena kulumikizidwa kudzera pa intaneti;

  • ma voliyumu amatha kukhala ndi kukula kwake komwe sikungadutse ndikugwiritsa ntchito;

  • imagwira ntchito ndi madalaivala aliwonse a CSI omwe amathandizira kuperekedwa kwa ma voliyumu osalekeza ndi (kuthandizira kutsata mphamvu) yambitsani kuyimba GetCapacity;

  • voliyumu ikhoza kukhala ndi deta yoyambira kutengera dalaivala ndi zoikamo;

  • ntchito zonse zokhazikika zokhala ndi voliyumu (kupanga chithunzithunzi, kusinthika, etc.) zimathandizidwa;

  • ma voliyumu atha kugwiritsidwa ntchito ndi wowongolera aliyense yemwe amavomereza gawo kapena kuchuluka kwa voliyumu;

  • Wokonza Kubernetes amasankha ma node oyenera okha, kotero palibenso chifukwa choperekera ndikusintha zowonjezera kapena kusintha ma webhooks.

Njira zosankha

Chifukwa chake, ma ephemeral volumes ndi oyenera pazotsatira zotsatirazi:

Kukumbukira kosalekeza ngati m'malo mwa RAM ya memcached

Zotulutsa zaposachedwa za memcached anawonjezera thandizo kugwiritsa ntchito kukumbukira kosalekeza (Intel Optane, etc., pafupifupi. womasulira) m'malo mwa RAM yokhazikika. Mukatumiza memcached kudzera pa pulogalamu yoyang'anira, mutha kugwiritsa ntchito ma ephemeral volumes kuti mupemphe kuti voliyumu ya kukula kwake igawidwe kuchokera ku PMEM pogwiritsa ntchito dalaivala wa CSI, mwachitsanzo. PMEM-CSI.

Kusungirako kwa LVM ngati malo ogwirira ntchito

Mapulogalamu omwe amagwira ntchito ndi data yokulirapo kuposa RAM angafunikire kusungidwa kwanuko ndi kukula kapena ma metrics ochita zomwe EmptyDir voliyumu ya Kubernetes sangapereke. Mwachitsanzo, kaamba ka cholinga chimenechi chinalembedwa Zithunzi za TopLVM.

Kufikira pakuwerenga kokha kwamavoliyumu a data

Kugawikana kwa voliyumu kungapangitse kuti voliyumu ipangidwe pamene:

Ma voliyumu awa akhoza kuikidwa mumayendedwe owerengera okha.

Kodi ntchito

General Purpose Ephemeral Volumes

Mbali yofunika kwambiri ya ma ephemeral volumes ndi magwero atsopano, EphemeralVolumeSource, yomwe ili ndi magawo onse kuti mupange voliyumu yopempha (mbiri yakale imadziwika kuti pempho la voliyumu yosalekeza, PVC). New controller in kube-controller-manager amayang'ana ma pod omwe amapanga voliyumu yotere, kenako amapanga PVC ya ma pod. Kwa dalaivala wa CSI, pempholi likuwoneka mofanana ndi ena, kotero palibe chithandizo chapadera chomwe chikufunika apa.

Malingana ngati ma PVCs alipo, amatha kugwiritsidwa ntchito ngati zopempha zina zilizonse pa voliyumu. Makamaka, amatha kutchulidwa ngati gwero la data pokopera voliyumu kapena kupanga chithunzithunzi cha voliyumu. Chinthu cha PVC chilinso ndi momwe voliyumu ilili panopa.

Mayina a ma PVC opangidwa okha amafotokozedwatu: ndi kuphatikiza kwa dzina la pod ndi dzina la voliyumu, olekanitsidwa ndi hyphen. Mayina ofotokozedwatu amapangitsa kukhala kosavuta kuyanjana ndi PVC chifukwa simuyenera kuyiyang'ana ngati mukudziwa dzina la pod ndi dzina la voliyumu. Choyipa chake ndikuti dzinalo litha kugwiritsidwa ntchito kale, lomwe limadziwika ndi Kubernetes ndipo chifukwa chake pod imatsekedwa kuti isayambike.

Kuonetsetsa kuti voliyumu yachotsedwa pamodzi ndi pod, wolamulirayo akupempha voliyumu pansi pa mwiniwake. Podyo ikachotsedwa, njira yosonkhanitsira zinyalala imagwira ntchito, yomwe imachotsa pempho ndi kuchuluka kwake.

Zopempha zimagwirizanitsidwa ndi dalaivala wosungirako kudzera mu njira yachibadwa ya gulu losungirako. Ngakhale makalasi okhala ndi nthawi yomweyo komanso mochedwa (aka WaitForFirstConsumer) amathandizidwa, chifukwa cha ma ephemeral voliyumu ndizomveka kugwiritsa ntchito WaitForFirstConsumer, ndiye wokonza mapulani angaganizire zonse zogwiritsira ntchito node ndi kupezeka kosungirako posankha node. Chatsopano chikuwonekera apa.

Kutsata Kutha Kosungirako

Nthawi zambiri wokonza sadziwa komwe dalaivala wa CSI adzapangire voliyumu. Palibenso njira yoti wokonza mapulani alumikizane ndi dalaivala mwachindunji kuti afunse zambiri. Chifukwa chake, wosankhayo amasankha mavoti mpaka atapeza imodzi yomwe ma voliyumu atha kupezeka (yomangika mochedwa) kapena kusiya kusankha kwa malo kwa dalaivala (kumanga mwachangu).

Watsopano API CSIStorageCapacity, yomwe ili mu gawo la alpha, imalola kuti deta yofunikira isungidwe mu etcd kuti ipezeke kwa wokonza mapulani. Mosiyana ndi chithandizo cha ma ephemeral volumes, mukatumiza dalaivala, muyenera kuloleza kutsata kosungirako: external-provisioner afalitse zomwe adalandira kuchokera kwa dalaivala kudzera mwanthawi zonse GetCapacity.

Ngati woyendetsa akuyenera kusankha node ya pod yokhala ndi voliyumu yosamangidwa yomwe imagwiritsa ntchito kumangirira mochedwa, ndipo dalaivala adathandizira izi panthawi yotumizira poyimitsa mbendera. CSIDriver.storageCapacity, ndiye mfundo zomwe zilibe mphamvu zokwanira zosungira zidzatayidwa. Izi zimagwira ntchito pazolinga zonse za ephemeral komanso ma voliyumu osalekeza, koma osati ma voliyumu a CSI ephemeral chifukwa magawo awo sangathe kuwerengedwa ndi Kubernetes.

Monga mwachizolowezi, ma voliyumu olumikizidwa nthawi yomweyo amapangidwa ma pod asanasankhidwe, ndipo kuyika kwawo kumasankhidwa ndi dalaivala wosungirako, kotero pokonza. external-provisioner Mwachikhazikitso, makalasi osungira omwe ali ndi zomangiriza nthawi yomweyo amalumphidwa, chifukwa deta iyi sidzagwiritsidwa ntchito.

Popeza kubernetes scheduler amakakamizika kugwira ntchito ndi zidziwitso zomwe zingakhale zachikale, palibe chitsimikizo kuti mphamvu idzakhalapo nthawi zonse pamene voliyumu idzapangidwa, koma mwayi woti udzapangidwe popanda kuyesanso ukuwonjezeka.

NB Mutha kudziwa zambiri, komanso "kuchita bwino pamayimidwe amphaka", ndipo ngati zinthu sizikumveka bwino, landirani thandizo laukadaulo lothandizira pamaphunziro akulu - Kubernetes Base idzachitika pa Seputembara 28-30, komanso kwa akatswiri apamwamba kwambiri Kubernetes Mega October 14-16.

Chitetezo

CSIstorageCapacity

Zinthu za CSIStorageCapacity zimakhala m'malo am'malo; potulutsa dalaivala aliyense wa CSI m'malo akeake, tikulimbikitsidwa kuletsa ufulu wa RBAC ku CSIStorageCapacity pamalowo popeza zikuwonekeratu komwe deta ikuchokera. Kubernetes sayang'ana izi, ndipo nthawi zambiri madalaivala amayikidwa m'malo omwewo, kotero pamapeto pake madalaivala amayenera kugwira ntchito ndikusasindikiza deta yolakwika (ndipo apa ndipamene khadi langa linalephera, pafupifupi. womasulira kutengera nthabwala wandevu)

General Purpose Ephemeral Volumes

Ngati ogwiritsa ntchito ali ndi ufulu wopanga pod (mwachindunji kapena mosalunjika), azithanso kupanga ma ephemeral volumes ngakhale alibe ufulu wopanga pempho pa voliyumu. Izi ndichifukwa choti macheke a chilolezo cha RBAC amagwiritsidwa ntchito kwa wowongolera yemwe amapanga PVC, osati kwa wogwiritsa ntchito. Uku ndiye kusintha kwakukulu kowonjezera ku akaunti yanu, musanalowetse izi pamagulu omwe ogwiritsa ntchito osadalirika sayenera kukhala ndi ufulu wopanga ma voliyumu.

Chitsanzo:

Osiyana nthambi PMEM-CSI ili ndi zosintha zonse zofunika kuyendetsa gulu la Kubernetes 1.19 mkati mwa makina a QEMU omwe ali ndi zonse zomwe zili mu gawo la alpha. Dalaivala ya dalaivala sinasinthe, kutumizidwa kokha kwasintha.

Pa makina oyenera (Linux, wogwiritsa ntchito wamba amatha kugwiritsa ntchito Docker, onani apa zambiri) malamulo awa adzabweretsa tsango ndikukhazikitsa woyendetsa 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

Chilichonse chitatha, zotsatira zake zimakhala ndi malangizo ogwiritsira ntchito:

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 -

CIStorageCapacity zinthu siziyenera kuwerengedwa ndi anthu, kotero kukonza kwina kumafunika. Zosefera za template za Golang ziwonetsa makalasi osungira, chitsanzo ichi chiwonetsa dzina, topology ndi mphamvu:

$ 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

Chinthu chimodzi chili ndi izi:

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

Tiyeni tiyese kupanga chiwonetsero chazithunzi ndi cholinga chimodzi chokha ephemeral voliyumu. Zomwe zili mufayilo 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

Pambuyo popanga, monga momwe tawonetsera pamwambapa, tsopano tili ndi pod yowonjezera ndi 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

Mwini PVC - pansi:

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

Zomwe zasinthidwa za 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

Ngati pulogalamu ina ikufunika kuposa 26620Mi, wokonzayo sangaganizire pmem-csi-pmem-govm-worker1 mwanjira ina iliyonse.

Kodi yotsatira?

Zonse ziwiri zikukulabe. Mapulogalamu angapo adatsegulidwa pakuyesa kwa alpha. Malingaliro owongolera amalemba ntchito yomwe ikuyenera kuchitika kuti ifike pagawo la beta, komanso njira zina zomwe zaganiziridwa kale ndikukanidwa:

Source: www.habr.com

Kuwonjezera ndemanga