Ephemeral Mavhoriyamu ane Storage Capacity Tracking: EmptyDir pane Steroids

Ephemeral Mavhoriyamu ane Storage Capacity Tracking: EmptyDir pane Steroids

Mamwe maapplication anodawo kuchengetedza data, asi ivo vakanyatsogadzikana nenyaya yekuti data harizochengetwa mushure mekutangazve.

Semuenzaniso, masevhisi ecaching anoganhurirwa ne RAM, asi anogona zvakare kufambisa data risingawanzo shandiswa kuchengetedza iro rinononoka pane RAM, riine kashoma pakuita kwese. Mamwe maapplication anofanirwa kuziva kuti panogona kunge paine yekuverenga-chete yekupinda mumafaira, senge marongero kana makiyi akavanzika.

Kubernetes yatova nemhando dzinoverengeka ephemeral volumes, asi kushanda kwavo kunogumira kune izvo zvinoitwa muK8s.

Ephemeral CSI mavhoriyamu yakabvumira Kubernetes kuwedzerwa nevatyairi veCSI kuti vape rutsigiro rwemavhoriyamu akareruka emunharaunda. Nenzira iyi zvinokwanisika kushandisa zvimiro zvisina tsarukano: zvigadziriso, zvakavanzika, data yekuzivikanwa, zvinosiyana, zvichingodaro. Vatyairi veCSI vanofanirwa kugadziridzwa kuti vatsigire iyi Kubernetes chimiro, sezvo zvichifungidzirwa kuti madhiraivha akajairwa haashande - asi zvinofungidzirwa kuti mavhoriyamu akadaro anogona kushandiswa pane chero node yakasarudzwa podhi.

Iri rinogona kunge riri dambudziko kune mavhoriyamu anoshandisa akakosha zviwanikwa zvevaenzi kana zvekuchengetedza izvo zvinongowanikwa pane mamwe mauto. Ndosaka Kubernetes 1.19 ichiunza maviri matsva ekuyedza alpha vhoriyamu maficha akafanana neEmptyDir mavhoriyamu:

  • chinangwa chikuru ephemeral volumes;

  • CSI yekuchengetedza huwandu hwekutevera.

Zvakanakira nzira itsva:

  • chengetedzo inogona kuve yemuno kana yakabatana kuburikidza netiweki;

  • mavhoriyamu anogona kuve nehukuru hwakatarwa husingagone kupfuurwa nekushandisa;

  • inoshanda nechero CSI madhiraivha anotsigira kupihwa kweanoramba mavhoriyamu uye (kutsigira kugona kwekutevera) shandisa kufona. GetCapacity;

  • mavhoriyamu anogona kunge aine data rekutanga zvichienderana nemutyairi uye marongero;

  • ese akajairwa mashandiro ane vhoriyamu (kugadzira snapshot, resizing, nezvimwewo) anotsigirwa;

  • mavhoriyamu anogona kushandiswa nechero application controller inogamuchira module kana vhoriyamu yakatarwa;

  • Iyo Kubernetes scheduler inosarudza node dzakakodzera pachayo, saka hapasisina chero chikonzero chekupa uye kugadzirisa scheduler ekuwedzera kana kugadzirisa webhooks.

Zvaunogona kusarudza

Naizvozvo, zvakajairika chinangwa ephemeral mavhoriyamu akakodzera kune anotevera ekushandisa kesi:

Inoramba ichiyeuka sechinotsiva RAM yememcached

Zvichangoburwa zvememcached akawedzera rutsigiro uchishandisa kuramba uchiyeuka (Intel Optane, nezvimwewo, approx. mushanduri) panzvimbo ye RAM yenguva dzose. Paunenge uchitumira memcached kuburikidza neanodzora application, unogona kushandisa general chinangwa ephemeral mavhoriyamu kukumbira kuti vhoriyamu yehukuru hwakapihwa igoverwe kubva kuPMEM uchishandisa CSI mutyairi, semuenzaniso. PMEM-CSI.

LVM yenzvimbo yekuchengetedza senzvimbo yekushandira

Zvishandiso zvinoshanda nedata rakakura kupfuura RAM zvingada kuchengetwa kwenzvimbo nehukuru kana ma metrics ekuita ayo anowanzo EmptyDir mavhoriyamu kubva Kubernetes asingakwanise kupa. Somuenzaniso, nokuda kwechinangwa ichi zvakanyorwa TopoLVM.

Kuwanika kwekuverenga chete kwemavhoriyamu edata

Kugoverwa kwevhoriyamu kunogona kukonzera kugadzirwa kwevhoriyamu yakazara kana:

Aya mavhoriyamu anogona kuiswa mukuverenga-chete modhi.

Sei basa iri

General Chinangwa Ephemeral Volumes

Chinhu chakakosha chezvese chinangwa ephemeral vhoriyamu ndiyo nyowani vhoriyamu sosi, EphemeralVolumeSource, ine minda yese kugadzira chikumbiro chevhoriyamu (yaimbonzi a persistent volume request, PVC). New controller in kube-controller-manager anotarisa mapodhi anogadzira sosi yakadaro, uye obva agadzira PVC yemapodhi iwayo. Kune mutyairi weCSI, chikumbiro ichi chinotaridzika sevamwe, saka hapana rubatsiro rwakakosha runodiwa pano.

Chero bedzi maPVC akadaro aripo, anogona kushandiswa sezvimwe zvikumbiro pavhoriyamu. Kunyanya, ivo vanogona kutaurwa senge data sosi kana uchikopa vhoriyamu kana kugadzira snapshot kubva kuvhoriyamu. Chinhu chePVC chinewo mamiriro azvino ehuwandu.

Mazita ePVC akagadzirwa otomatiki anofanotsanangurwa: iwo musanganiswa wezita repod uye zita revhoriyamu, rakapatsanurwa nehyphen. Mazita akatsanangurwa anoita kuti zvive nyore kudyidzana nePVC nekuti haufanirwe kuitsvaga kana uchiziva zita repodhi uye zita revhoriyamu. Izvo zvakaderera ndezvekuti zita rinogona kunge rave kushandiswa, iro rinoonekwa naKubernetes uye nekudaro iyo pod yakavharwa kubva kutanga.

Kuti ive nechokwadi chekuti vhoriyamu yadzimwa pamwe nepodhi, mutongi anoita chikumbiro kune vhoriyamu pasi pemuridzi. Kana iyo pod yadzimwa, iyo yakajairwa yekuunganidza marara inoshanda, iyo inobvisa zvese zvirikukumbira uye vhoriyamu.

Zvikumbiro zvinofananidzwa nemutyairi wekuchengetedza kuburikidza neyakajairwa mashandiro ekirasi yekuchengetedza. Kunyangwe makirasi ane nekukurumidza uye kunonoka kusunga (aka WaitForFirstConsumer) zvinotsigirwa, kune ephemeral volumes zvine musoro kushandisa WaitForFirstConsumer, ipapo mugadziri anogona kufunga ese mashandisirwo emanodhi uye kuwanikwa kwekuchengetedza kana uchisarudza node. Chinhu chitsva chinobuda pano.

Storage Capacity Tracking

Kazhinji mugadziri haana ruzivo rwekuti mutyairi weCSI achagadzira vhoriyamu kupi. Iko hakuna zvakare nzira yekuti mugadziri ataure nemutyairi zvakananga kuti akumbire ruzivo urwu. Naizvozvo, iyo inoronga sarudzo inodhiza kusvika yawana imwe pairi mavhoriyamu anogona kuwanikwa (anononoka kusunga) kana kusiya sarudzo yenzvimbo zvachose kumutyairi (pakarepo anosunga).

itsva API CSIStorageCapacity, iri muchikamu chealpha, inobvumira iyo data inodiwa kuti ichengetwe mu etcd kuitira kuti iwanikwe kune anoronga. Kusiyana nerutsigiro rwezvakajairwa ephemeral mavhoriyamu, kana iwe uchiendesa mutyairi, iwe unofanirwa kugonesa kuchengetedza kugona kwekutevera: external-provisioner inofanira kushambadza ruzivo rwekukwanisa kugamuchirwa kubva kumutyairi kuburikidza neyakajairika GetCapacity.

Kana mugadziri achida kusarudza node yepodhi ine vhoriyamu isina kusungwa inoshandisa kunonoka kusunga, uye mutyairi akagonesa ichi chinhu panguva yekuendesa nekuseta mureza. CSIDriver.storageCapacity, ipapo node dzisina kukwana kuchengetedza inoraswa otomatiki. Izvi zvinoshanda kune ese ari maviri chinangwa ephemeral uye anoshingirira mavhoriyamu, asi kwete eCSI ephemeral mavhoriyamu nekuti maparamita avo haagone kuverengwa naKubernetes.

Semazuva ese, mavhoriyamu akabatana nekukurumidza anogadzirwa mapodhi asati arongwa, uye kuiswa kwavo kunosarudzwa nemutyairi wekuchengetedza, saka kana uchigadzirisa. external-provisioner Nekumisikidza, makirasi ekuchengetera ane chisungo nekukurumidza anoregwa, sezvo iyi data isingazoshandiswe zvakadaro.

Sezvo kubernetes scheduler ichimanikidzwa kushanda neruzivo rwunogona kuitika, hapana vimbiso yekuti huwandu huchawanikwa mune zvese zviitiko kana vhoriyamu yagadzirwa, asi mikana yekuti ichagadzirwa pasina kudzokororwa inowedzerwa.

NB Iwe unogona kuwana ruzivo rwakadzama, pamwe ne "dzidzira pachigadziko chekitsi" zvakachengeteka, uye kana mamiriro ezvinhu asinganzwisisike zvachose, gamuchira rubatsiro rwakakwana rwerutsigiro rwehunyanzvi pamakosi akasimba - Kubernetes Base ichaitwa munaGunyana 28-30, uye kune dzimwe nyanzvi dzepamusoro Kubernetes Mega Gumiguru 14–16.

Chengetedzo

CSIstorageCapacity

CSIStorageCapacity zvinhu zvinogara munzvimbo dzemazita; kana uchiburitsa mutyairi wega wega weCSI munzvimbo yayo yezita, zvinokurudzirwa kudzora kodzero dzeRBAC kuCSIStorageCapacity munzvimbo iyoyo sezvo zviri pachena kuti data iri kubva kupi. Kubernetes haatarise izvi zvakadaro, uye kazhinji vatyairi vanoiswa munzvimbo imwechete yezita, saka pakupedzisira vatyairi vanotarisirwa kushanda uye kusaburitsa data risiri iro (uye apa ndipo pakatadza kadhi rangu, approx. muturikiri anobva pajee rendebvu)

General Chinangwa Ephemeral Volumes

Kana vashandisi vaine kodzero yekugadzira pod (zvakananga kana zvisina kunanga), ivo zvakare vanozokwanisa kugadzira chinangwa chakajairwa ephemeral volumes kunyangwe vasina kodzero yekugadzira chikumbiro pavhoriyamu. Izvi zvinodaro nekuti RBAC mvumo yekutarisa inoiswa kune controller inogadzira iyo PVC, kwete kumushandisi. Iyi ndiyo shanduko huru yekuwedzera kuaccount yako, usati wagonesa chimiro ichi pamasumbu uko vashandisi vasingavimbike havafanirwe kuve nekodzero dzekugadzira mavhoriyamu.

Muenzaniso:

Separate bazi PMEM-CSI ine ese anodiwa shanduko yekumhanyisa Kubernetes 1.19 cluster mukati meQEMU chaiwo machina ane ese maficha ari alpha nhanho. Kodhi yemutyairi haina kushanduka, chete kutumirwa kwakachinja.

Pamuchina wakakodzera (Linux, akajairika mushandisi anogona kushandisa Docker, tarira pano details) iyi mirairo ichaunza cluster uye kuisa iyo PMEM-CSI mutyairi:

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

Mushure mekunge zvese zvashanda, zvinobuda zvichave nemirairo yekushandisa:

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 zvinhu hazvifanirwe kuverengerwa nevanhu, saka kumwe kugadzirisa kunodiwa. Golang template mafirita anoratidza makirasi ekuchengetedza, uyu muenzaniso ucharatidza zita, topology uye kugona:

$ 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

Chinhu chimwe chete chine zvinotevera:

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

Ngatiedzei kugadzira demo application ine chinangwa chimwe chete ephemeral vhoriyamu. Zvinyorwa zvemafaira 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

Mushure mekugadzira, sezvakaratidzwa mumirayiridzo iri pamusoro, isu tine imwe pod uye 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 muridzi - pasi:

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

Ruzivo rwakavandudzwa rwe 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

Kana imwe application ichida zvinopfuura 26620Mi, iye anoronga haazofungi pmem-csi-pmem-govm-worker1 chero zvazvingava.

Chii chinotevera?

Zvose zviri zviviri zvichiri mukugadzirwa. Zvishandiso zvinoverengeka zvakavhurwa panguva yekuyedzwa kwealpha. Chikumbiro chekuvandudza chinongedzo chinonyora basa rinofanirwa kuitwa kuti riende kudanho rebeta, pamwe nekuti ndedzipi dzimwe nzira dzakatofungwa uye kurambwa:

Source: www.habr.com

Voeg