Volumi effimeri b'Traċċar tal-Kapaċità tal-Ħażna: EmptyDir fuq Sterojdi

Volumi effimeri b'Traċċar tal-Kapaċità tal-Ħażna: EmptyDir fuq Sterojdi

Xi applikazzjonijiet jeħtieġu wkoll li jaħżnu d-dejta, iżda huma pjuttost komdi bil-fatt li d-dejta mhux se tiġi ssejvjata wara bidu mill-ġdid.

Pereżempju, is-servizzi tal-caching huma limitati mir-RAM, iżda jistgħu wkoll iċċaqilqu data li rarament tintuża għal ħażna li hija aktar bil-mod mir-RAM, bi ftit impatt fuq il-prestazzjoni ġenerali. Applikazzjonijiet oħra jeħtieġ li jkunu konxji li jista 'jkun hemm xi input li jinqara biss fil-fajls, bħal settings jew ċwievet sigrieti.

Kubernetes diġà għandu diversi tipi volumi effimeri, iżda l-funzjonalità tagħhom hija limitata għal dak li huwa implimentat fil-K8s.

Effimeru volumi CSI ippermetta li Kubernetes jiġi estiż b'sewwieqa CSI biex jipprovdi appoġġ għal volumi lokali ħfief. B'dan il-mod huwa possibbli li tuża strutturi arbitrarji: settings, sigrieti, data ta 'identifikazzjoni, varjabbli, eċċ. Is-sewwieqa CSI għandhom jiġu modifikati biex jappoġġjaw din il-karatteristika Kubernetes, peress li huwa preżunt li s-sewwieqa standardizzati regolari mhux se jaħdmu - iżda huwa preżunt li volumi bħal dawn jistgħu jintużaw fuq kwalunkwe node magħżul għall-pod.

Din tista' tkun problema għal volumi li jikkunsmaw riżorsi sinifikanti tal-hosts jew għall-ħażna li hija disponibbli biss fuq xi hosts. Huwa għalhekk li Kubernetes 1.19 jintroduċi żewġ karatteristiċi ġodda tal-volum tal-ittestjar alfa li huma kunċettwalment simili għall-volumi EmptyDir:

  • volumi effimeri għal skopijiet ġenerali;

  • Traċċar tal-kapaċità tal-ħażna CSI.

Vantaġġi tal-approċċ il-ġdid:

  • il-ħażna tista 'tkun lokali jew konnessa permezz ta' netwerk;

  • il-volumi jista' jkollhom daqs speċifikat li ma jistax jinqabeż mill-applikazzjoni;

  • jaħdem ma 'kwalunkwe sewwieqa CSI li jappoġġaw il-forniment ta' volumi persistenti u (biex jappoġġaw it-traċċar tal-kapaċità) jimplimentaw is-sejħa GetCapacity;

  • il-volumi jista' jkollhom xi data inizjali skont is-sewwieq u s-settings;

  • l-operazzjonijiet standard kollha b'volum (ħolqien ta 'snapshot, ridimensjonar, eċċ.) huma appoġġjati;

  • volumi jistgħu jintużaw ma 'kwalunkwe kontrollur ta' applikazzjoni li jaċċetta speċifikazzjoni ta 'modulu jew volum;

  • L-iskeder ta 'Kubernetes jagħżel nodi xierqa waħdu, u għalhekk m'għadx hemm bżonn li jiġu pprovduti u kkonfigurati estensjonijiet ta' l-iskedar jew jimmodifikaw il-webhooks.

Għażliet ta 'applikazzjoni

Għalhekk, volumi effimeri għal skopijiet ġenerali huma adattati għall-każijiet ta 'użu li ġejjin:

Memorja persistenti bħala sostitut għal RAM għal memcached

L-aħħar ħarġiet ta' memcached appoġġ miżjud billi tuża memorja persistenti (Intel Optane, eċċ., madwar. traduttur) minflok RAM regolari. Meta tuża memcached permezz ta' kontrollur ta' applikazzjoni, tista' tuża volumi effimeri għal skopijiet ġenerali biex titlob li jiġi allokat volum ta' daqs partikolari minn PMEM billi tuża s-sewwieq CSI, pereżempju PMEM-CSI.

Ħażna lokali LVM bħala spazju tax-xogħol

Applikazzjonijiet li jaħdmu b'dejta li hija akbar mir-RAM jistgħu jeħtieġu ħażna lokali b'daqs jew metriċi ta' prestazzjoni li volumi regolari ta' EmptyDir minn Kubernetes ma jistgħux jipprovdu. Pereżempju, għal dan il-għan inkiteb TopoLVM.

Aċċess għall-qari biss għall-volumi tad-dejta

L-allokazzjoni ta' volum tista' tirriżulta fil-ħolqien ta' volum sħiħ meta:

Dawn il-volumi jistgħu jiġu mmuntati fil-modalità ta 'qari biss.

Kif taħdem din

Volumi Effimeri Għan Ġenerali

Karatteristika ewlenija tal-volumi effimeri għal skopijiet ġenerali hija s-sors il-ġdid tal-volum, EphemeralVolumeSource, li fih l-oqsma kollha biex tinħoloq talba ta 'volum (storikament imsejħa talba ta' volum persistenti, PVC). Kontrollur ġdid fi kube-controller-manager iħares lejn il-miżwed li joħolqu tali sors ta 'volum, u mbagħad joħloq PVC għal dawk il-miżwed. Għas-sewwieq CSI, din it-talba tidher l-istess bħall-oħrajn, għalhekk l-ebda appoġġ speċjali mhu meħtieġ hawn.

Sakemm jeżistu PVCs bħal dawn, jistgħu jintużaw bħal kull talba oħra fuq il-volum. B'mod partikolari, jistgħu jiġu referenzjati bħala sors tad-dejta meta tikkopja volum jew toħloq snapshot minn volum. L-oġġett tal-PVC fih ukoll l-istat attwali tal-volum.

L-ismijiet ta 'PVCs maħluqa awtomatikament huma predefiniti: huma kombinazzjoni tal-isem tal-pod u l-isem tal-volum, separati b'sing. Ismijiet predefiniti jagħmluha aktar faċli biex jinteraġixxu mal-PVC għaliex m'għandekx għalfejn tfittex jekk taf l-isem tal-pod u l-isem tal-volum. L-iżvantaġġ huwa li l-isem jista 'jkun diġà qed jintuża, li jiġi skopert minn Kubernetes u bħala riżultat il-pod huwa mblukkat milli jibda.

Biex jiġi żgurat li l-volum jitħassar flimkien mal-pod, il-kontrollur jagħmel talba lill-volum taħt is-sid. Meta l-pod titħassar, jaħdem il-mekkaniżmu standard tal-ġbir taż-żibel, li jħassar kemm it-talba kif ukoll il-volum.

It-talbiet huma mqabbla mis-sewwieq tal-ħażna permezz tal-mekkaniżmu normali tal-klassi tal-ħażna. Għalkemm klassijiet b'irbit immedjat u tard (magħruf ukoll bħala WaitForFirstConsumer) huma appoġġjati, għal volumi effimeri jagħmel sens li jintużaw WaitForFirstConsumer, allura l-iskeder jista 'jikkunsidra kemm l-użu tan-node kif ukoll id-disponibbiltà tal-ħażna meta jagħżel node. Karatteristika ġdida tidher hawn.

Traċċar tal-Kapaċità tal-Ħażna

Tipikament l-iskedar ma jkollu l-ebda għarfien dwar fejn is-sewwieq CSI se joħloq il-volum. Lanqas m'hemm l-ebda mod kif l-iskedatur jikkuntattja lis-sewwieq direttament biex jitlob din l-informazzjoni. Għalhekk, l-iskeder jivvota n-nodi sakemm isib wieħed li fih jistgħu jiġu aċċessati l-volumi (legatura tard) jew iħalli l-għażla tal-post għal kollox lis-sewwieq (legatura immedjata).

New API CSIStorageCapacity, li jinsab fl-istadju alfa, jippermetti li d-dejta meħtieġa tinħażen f'etcd sabiex tkun disponibbli għall-iskeduler. B'differenza mill-appoġġ għal volumi effimeri għal skopijiet ġenerali, meta tuża s-sewwieq, trid tippermetti t-traċċar tal-kapaċità tal-ħażna: external-provisioner għandha tippubblika l-informazzjoni dwar il-kapaċità riċevuta mingħand ix-xufier permezz tan-normal GetCapacity.

Jekk l-iskeder jeħtieġ li jagħżel node għal pod b'volum mhux marbut li juża rbit tard, u s-sewwieq ippermetta din il-karatteristika waqt l-iskjerament billi stabbilixxa l-bandiera CSIDriver.storageCapacity, allura nodi li m'għandhomx biżżejjed kapaċità ta 'ħażna se jintremew awtomatikament. Dan jaħdem kemm għal volumi effimeri u persistenti għal skopijiet ġenerali, iżda mhux għal volumi effimeri CSI minħabba li l-parametri tagħhom ma jistgħux jinqraw minn Kubernetes.

Bħas-soltu, il-volumi konnessi immedjatament jinħolqu qabel ma jiġu skedati l-imżiewed, u t-tqegħid tagħhom jintgħażel mis-sewwieq tal-ħażna, għalhekk meta tiġi kkonfigurata external-provisioner B'mod awtomatiku, il-klassijiet tal-ħażna b'irbit immedjat jinqabżu, peress li din id-dejta xorta waħda mhix se tintuża.

Peress li l-kubernetes scheduler huwa sfurzat jaħdem b'informazzjoni potenzjalment skaduta, m'hemm l-ebda garanzija li l-kapaċità tkun disponibbli f'kull każ meta jinħoloq il-volum, iżda ċ-ċansijiet li tinħoloq mingħajr tentattivi mill-ġdid huma madankollu miżjuda.

NB Tista 'tikseb informazzjoni aktar dettaljata, kif ukoll "prattika fuq l-istand tal-qtates" b'mod sikur, u f'każ ta' sitwazzjoni kompletament inkomprensibbli, tirċievi għajnuna ta' appoġġ tekniku kwalifikat f'korsijiet intensivi - Bażi Kubernetes se ssir fit-28-30 ta’ Settembru, u għal speċjalisti aktar avvanzati Kubernetes Mega 14–16 ta’ Ottubru.

sigurtà

CSISstorageCapacity

L-oġġetti CSIStorageCapacity jirrisjedu fl-ispazji tal-isem; meta jitħaddem kull sewwieq CSI fl-ispazju tal-isem tiegħu stess, huwa rakkomandat li jiġu ristretti d-drittijiet RBAC għas-CSIStorageCapacity f'dak l-ispazju peress li huwa ovvju minn fejn tkun ġejja d-dejta. Kubernetes ma jiċċekkjax għal dan xorta waħda, u ġeneralment is-sewwieqa jitpoġġew fl-istess spazju tal-isem, għalhekk fl-aħħar mill-aħħar is-sewwieqa huma mistennija li jaħdmu u ma jippubblikawx data mhux korretta (u dan huwa fejn il-karta tiegħi falliet, madwar. traduttur ibbażat fuq ċajta bid-daqna)

Volumi Effimeri Għan Ġenerali

Jekk l-utenti għandhom drittijiet biex joħolqu pod (direttament jew indirettament), ikunu jistgħu wkoll joħolqu volumi effimeri għal skopijiet ġenerali anki jekk ma jkollhomx drittijiet biex joħolqu talba fuq il-volum. Dan għaliex il-kontrolli tal-permessi RBAC huma applikati lill-kontrollur li joħloq il-PVC, mhux lill-utent. Din hija l-bidla ewlenija li għandha żżid għall-kont tiegħek, qabel ma tippermetti din il-karatteristika fuq raggruppamenti fejn utenti mhux fdati m'għandux ikollhom drittijiet biex joħolqu volumi.

Eżempju

Separati twig PMEM-CSI fih il-bidliet kollha meħtieġa biex iħaddem cluster Kubernetes 1.19 ġewwa magni virtwali QEMU bil-karatteristiċi kollha fl-istadju alfa. Il-kodiċi tas-sewwieq ma nbidilx, l-iskjerament biss inbidel.

Fuq magna xierqa (Linux, utent normali jista' juża Docker, ara hawn dettalji) dawn il-kmandi se jġibu l-cluster u jinstallaw is-sewwieq 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

Wara li kollox jaħdem, l-output ikun fih struzzjonijiet għall-użu:

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 -

L-oġġetti CSIStorageCapacity mhumiex maħsuba biex jinqraw mill-bnedmin, għalhekk huwa meħtieġ xi proċessar. Il-filtri tal-mudelli Golang se juru l-klassijiet tal-ħażna, dan l-eżempju se juri l-isem, it-topoloġija u l-kapaċità:

$ 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

Oġġett wieħed għandu l-kontenut li ġej:

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

Ejja nippruvaw noħolqu applikazzjoni demo b'volum effimeru wieħed għal skopijiet ġenerali. Kontenut tal-fajl 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

Wara li ħoloq, kif muri fl-istruzzjonijiet ta 'hawn fuq, issa għandna pod u PVC addizzjonali:

$ 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

Sid tal-PVC - taħt:

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

Informazzjoni aġġornata mistennija għal 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

Jekk applikazzjoni oħra teħtieġ aktar minn 26620Mi, l-iskedar mhux se jqis pmem-csi-pmem-govm-worker1 fi kwalunkwe każ.

Xi jmiss?

Iż-żewġ karatteristiċi għadhom fl-iżvilupp. Diversi applikazzjonijiet infetħu waqt l-ittestjar alfa. Ir-rabtiet tal-proposta għal titjib jiddokumentaw ix-xogħol li jeħtieġ li jsir biex wieħed jgħaddi għall-istadju beta, kif ukoll liema alternattivi diġà ġew ikkunsidrati u miċħuda:

Sors: www.habr.com

Żid kumment