
E puer Applikatiounen mussen och Daten spÀicheren, awer si si ganz bequem mat der Tatsaach datt d'Donnéeën net no engem Neistart gespÀichert ginn.
Zum Beispill, Caching Servicer sinn duerch RAM limitéiert, mee kann och Daten plënneren, datt selten ze Stockage benotzt ginn, datt méi lues ass wéi RAM, mat wéineg Impakt op allgemeng Leeschtung. Aner Applikatiounen musse sech bewosst sinn datt et e puer liesen-nëmmen Input an de Dateie ka sinn, wéi Astellungen oder geheime Schlësselen.
Kubernetes huet schonn e puer Zorte , awer hir Funktionalitéit ass limitéiert op dat wat an de K8s implementéiert ass.
Ephemeral erlaabt Kubernetes mat CSI Chauffeuren ze verlĂ€ngeren fir ĂnnerstĂ«tzung fir liicht lokal BĂ€nn ze bidden. Op dĂ«s ManĂ©ier ass et mĂ©iglech ze benotzen : Astellungen, Geheimnisser, Identifikatiounsdaten, Variabelen, etc. CSI Chauffeuren musse geĂ€nnert ginn fir dĂ«s Kubernetes Feature z'Ă«nnerstĂ«tzen, well et gĂ«tt ugeholl datt regelmĂ©isseg standardisĂ©ierte Chauffeuren net funktionnĂ©ieren - awer et gĂ«tt ugeholl datt sou Volumen op all Node benotzt kĂ«nne ginn fir de Pod ausgewielt.
DĂ«st kann e Problem sinn fir BĂ€nn dĂ©i bedeitend Hostressourcen verbrauchen oder fir Lagerung dĂ©i nĂ«mmen op e puer Hosten verfĂŒgbar ass. Dofir stellt Kubernetes 1.19 zwee nei Alpha-Testvolumen Features vir, dĂ©i konzeptuell Ă€hnlech wĂ©i EmptyDir Volumen sinn:
allgemeng Zweck ephemeral BĂ€nn;
CSI SpÀicherkapazitéit Tracking.
Virdeeler vun der neier Approche:
Stockage kann lokal oder via engem Netz verbonne ginn;
BÀnn kënnen eng spezifizéiert Gréisst hunn déi net vun der Applikatioun iwwerschratt ka ginn;
schafft mat all CSI Treiber déi d'Bestëmmung vu persistent Volumen ënnerstëtzen an (fir Kapazitéit Tracking z'ënnerstëtzen) den Uruff implementéieren
GetCapacity;BÀnn kënnen e puer initial Daten hunn ofhÀngeg vum Chauffer an Astellungen;
all Standardoperatioune mat engem Volume (e Snapshot erstellen, d'Gréisst Ànneren, etc.) ginn ënnerstëtzt;
BÀnn kënne mat all Applikatioun Controller benotzt ginn, datt e Modul oder Volume Spezifizéierung acceptéiert;
De Kubernetes Scheduler wielt gëeegent Noden eleng, sou datt et net méi néideg ass fir Scheduler Extensiounen ze versuergen an ze konfiguréieren oder Webhooks z'Ànneren.
Applikatioun Optiounen
Dofir sinn allgemeng Zweck ephemeral BÀnn gëeegent fir déi folgend BenotzungsfÀll:
BestÀnneg Erënnerung als Ersatz fir RAM fir memcached
LÀscht Verëffentlechungen vun memcached benotzt persistent Erënnerung (Intel Optane, etc., ca. Iwwersetzer) amplaz regelméisseg RAM. Wann Dir memcached duerch en Applikatiounscontroller ofsetzt, kënnt Dir allgemeng Zweck ephemeral BÀnn benotzen fir ze froen datt e Volume vun enger bestëmmter Gréisst vum PMEM mat dem CSI Chauffer zougewisen gëtt, zum Beispill .
LVM lokal Stockage als AarbechtsberÀich
Uwendungen, déi mat Daten schaffen, déi méi grouss sinn wéi RAM, kënnen lokal SpÀichere mat enger Gréisst oder Leeschtungsmetriken erfuerderen, déi regelméisseg EmptyDir BÀnn vu Kubernetes net ubidden. Zum Beispill, fir dësen Zweck geschriwwen .
Lies-nëmmen Zougang fir Daten BÀnn
D'Allokatioun vun engem Volume kann zu der Schafung vun engem vollen Volume resultéieren wann:
Erhuelung ;
Schafung ;
ŃĐ°Đ±ĐŸŃĐ” .
Dës BÀnn kënnen am Liesmodus montéiert ginn.
Wéi heescht dat Aarbecht
Allgemeng Zweck Ephemeral BĂ€nn
Eng SchlĂ«ssel Feature vun allgemeng Zweck ephemeral BĂ€nn ass dĂ©i nei Volumenquell, EphemeralVolumeSource, dĂ©i all Felder enthĂ€lt fir eng Volumen Ufro ze kreĂ©ieren (historesch eng persistent Volumen Ufro genannt, PVC). Neie Controller an kube-controller-manager kuckt op d'Pods, dĂ©i sou eng Volumenquell kreĂ©ieren, a kreĂ©iert dann e PVC fir dĂ«s Pods. Fir den CSI Chauffer gesĂ€it dĂ«s Ufro d'selwecht aus wĂ©i dĂ©i aner, sou datt hei keng speziell ĂnnerstĂ«tzung gebraucht gĂ«tt.
Soulaang esou PVCs existéieren, kënne se wéi all aner Ufroen op de Volume benotzt ginn. Besonnesch kënne se als Datenquell referenzéiert ginn wann Dir e Volume kopéiert oder e Snapshot aus engem Volume erstellt. De PVC Objet enthÀlt och den aktuellen Zoustand vum Volume.
D'Nimm vun automatesch erstallt PVCs sinn virdefinéiert: si sinn eng Kombinatioun vum Podnumm an dem Volumennumm, getrennt vun engem Bindestrich. Virdefinéiert Nimm maachen et méi einfach mat der PVC ze interagéieren, well Dir musst net no kucken wann Dir de Podnumm a Volumennumm kennt. De Nodeel ass datt den Numm scho ka benotzt ginn, wat vu Kubernetes festgestallt gëtt an als Resultat ass de Pod blockéiert fir ze starten.
Fir sécherzestellen datt de Volume zesumme mam Pod gelÀscht gëtt, mécht de Controller eng Ufro un de Volume ënner dem Besëtzer. Wann de Pod gelÀscht gëtt, funktionnéiert de Standard Drecksammlungsmechanismus, deen souwuel d'Ufro an de Volume lÀscht.
Ufroe gi vum Stockage Chauffer duerch den normale Mechanismus vun der SpĂ€icherklass ugepasst. Och wann Klassen mat direkter a spĂ©ider Bindung (aka WaitForFirstConsumer) Ă«nnerstĂ«tzt ginn, fir ephemeral BĂ€nn mĂ©cht et SĂ«nn fir ze benotzen WaitForFirstConsumer, da kann de Scheduler souwuel d'Nodeverbrauch wĂ©i och d'SpĂ€icherverfĂŒgbarkeet berĂŒcksichtegen wann Dir en Node auswielt. Eng nei Feature erschĂ©ngt hei.
Stockage Kapazitéit Tracking
Typesch huet de Scheduler kee Wëssen iwwer wou den CSI Chauffer de Volume erstellt. Et gëtt och kee Wee fir de Scheduler de Chauffer direkt ze kontaktéieren fir dës Informatioun ze froen. Dofir pollt de Scheduler Node bis en fënnt een op deem Volumen zougÀnglech sinn (spéit Bindung) oder léisst d'Wiel vun der Plaz ganz un de Chauffer (direkt Bindung).
Nei CSIStorageCapacity, dĂ©i an der Alpha-BĂŒhn ass, erlaabt dĂ©i nĂ©ideg DonnĂ©eĂ«n an etcd ze spĂ€icheren, sou datt et dem Scheduler verfĂŒgbar ass. Am GĂ©igesaz zu der ĂnnerstĂ«tzung fir allgemeng Zweck ephemeral BĂ€nn, wann Dir de Chauffer ofsetzt, musst Dir d'SpĂ€icherkapazitĂ©it Tracking aktivĂ©ieren: external-provisioner soll d'KapazitĂ©it Informatioune vum Chauffer iwwer normal publizĂ©ieren GetCapacity.
Wann de Scheduler e Node fir e Pod mat engem ongebonnene Volumen auswielen muss, deen spéider Bindung benotzt, an de Chauffer huet dës Fonktioun wÀrend der Deployment aktivéiert andeems de FÀndel setzt. CSIDriver.storageCapacity, dann Noden déi net genuch SpÀicherkapazitéit hunn, ginn automatesch verworf. Dëst funktionnéiert souwuel fir allgemeng Zweck ephemeral a persistent BÀnn, awer net fir CSI ephemeral BÀnn well hir Parameteren net vu Kubernetes gelies kënne ginn.
Wéi gewinnt ginn direkt verlinkte BÀnn erstallt ier Pods geplangt sinn, an hir Plazéierung gëtt vum SpÀichertreiber gewielt, also wann Dir konfiguréiert external-provisioner Par défaut gi SpÀicherklassen mat direkter Bindung iwwersprangen, well dës Donnéeë souwisou net benotzt ginn.
ZĂ«nter datt de kubernetes Scheduler gezwongen ass mat potenziell verrĂ©ckten Informatioun ze schaffen, gĂ«tt et keng Garantie datt d'KapazitĂ©it an all Fall verfĂŒgbar ass wann de Volume erstallt gĂ«tt, awer d'Chancen datt et ouni Neiversicht erstallt gĂ«tt, ginn awer erop.
NB Dir kĂ«nnt mĂ©i detaillĂ©iert Informatiounen krĂ©ien, wĂ©i och sĂ©cher "Praxis op der Kazen Stand", an am Fall vun enger komplett onverstĂ€ndlech Situatioun, qualifizĂ©iert technesch ĂnnerstĂ«tzung HĂ«llef op intensiv Coursen krĂ©ien - wĂ€ert ofgehale ginn 28-30 September, a fir mĂ©i fortgeschratt Spezialisten 14-16 Oktober.
Sécherheet
CSIStorageCapacity
CSIStorageCapacity Objekter wunnen an Nummraim; wann Dir all CSI Chauffer a sengem eegene Nummraum ausrollt, ass et recommandéiert d'RBAC Rechter op d'CSIStorageCapacity an deem Raum ze beschrÀnken, well et offensichtlech ass wou d'Daten hierkommen. Kubernetes kontrolléiert dat souwisou net, a meeschtens ginn d'Treiber an dee selwechte Nummraum gesat, sou datt schlussendlech d'Chauffeuren erwaart ginn ze schaffen an net falsch Donnéeën ze publizéieren (an dat ass wou meng Kaart gescheitert ass, ca. Iwwersetzer baséiert op engem bÀertege Witz)
Allgemeng Zweck Ephemeral BĂ€nn
Wann d'Benotzer Rechter hunn fir e Pod ze kreéieren (direkt oder indirekt), kënne se och allgemeng Zweck ephemeral BÀnn erstellen, och wa se keng Rechter hunn fir eng Ufro op de Volume ze kreéieren. Dëst ass well RBAC Erlaabniskontrollen op de Controller applizéiert ginn deen de PVC erstellt, net fir de Benotzer. Dëst ass d'HaaptÀnnerung fir ze addéieren , ier Dir dës Fonktioun op Cluster aktivéiert, wou net vertraute Benotzer keng Rechter hunn fir BÀnn ze kreéieren.
Beispill:
Trennen PMEM-CSI enthĂ€lt all dĂ©i nĂ©ideg Ănnerungen fir e Kubernetes 1.19 Cluster bannent QEMU virtuelle Maschinnen mat all de Fonctiounen an der Alpha Etapp ze lafen. De Chauffercode ass net geĂ€nnert, nĂ«mmen d'Deployment ass geĂ€nnert.
Op engem passenden Auto (Linux, kann en normale Benotzer benotzen , kucken Detailer) dës Befehle bréngen de Cluster op an installéiert den PMEM-CSI Treiber:
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
Nodeems alles funktionnéiert, enthÀlt d'Ausgab d'Benotzungsinstruktiounen:
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 Objekter sinn net geduecht fir vu Mënschen gelies ze ginn, sou datt e puer Veraarbechtung erfuerderlech ass. Golang Templatefilter weisen d'SpÀicherklassen, dëst Beispill weist den Numm, Topologie a Kapazité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
Een eenzegen Objet huet de folgenden Inhalt:
$ 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>
Loosst eis probéieren eng Demo-Applikatioun mat engem eenzegen allgemengen Zweck ephemeral Volumen ze kreéieren. Datei Inhalt 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
No der Schafung, wéi an den Instruktiounen uewen gewisen, hu mir elo en zousÀtzleche Pod 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
PVC Besëtzer - ënner:
$ 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
...
Erwaart aktualiséiert Informatiounen fir 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
Wann eng aner Applikatioun mĂ©i brauch wĂ©i 26620Mi, gĂ«tt de Scheduler net berĂŒcksichtegt pmem-csi-pmem-govm-worker1 op jiddfer Fall.
Wat d'nÀchst?
BĂ©id Feature sinn nach Ă«mmer an der EntwĂ©cklung. Verschidde Applikatiounen goufen wĂ€hrend Alpha Testen opgemaach. D'Verbesserungsvirschlag Linken dokumentĂ©ieren d'Aarbecht dĂ©i muss gemaach ginn fir op d'Beta-BĂŒhn ze goen, souwĂ©i wĂ©i eng Alternativen scho berĂŒcksichtegt a verworf goufen:
Source: will.com
