Komèsan efemèr ak Suivi Kapasite Depo: EmptyDir sou Estewoyid
Gen kèk aplikasyon tou ki bezwen estoke done, men yo byen konfòtab ak lefèt ke done yo pa pral sove apre yon rekòmanse.
Pou egzanp, sèvis kachèt yo limite pa RAM, men yo ka deplase tou done ki raman itilize nan depo ki pi dousman pase RAM, ak ti enpak sou pèfòmans jeneral. Lòt aplikasyon yo dwe konnen ke ka gen kèk D 'sèlman lekti nan dosye yo, tankou anviwònman oswa kle sekrè.
Kubernetes deja gen plizyè kalite volim efemèr, men fonksyonalite yo limite a sa ki aplike nan K8 yo.
Efemèr Komèsan CSI pèmèt Kubernetes pwolonje ak chofè CSI pou bay sipò pou volim lokal ki lejè. Nan fason sa a li posib pou itilize estrikti abitrè: anviwònman, sekrè, done idantifikasyon, varyab, ak sou sa. Chofè CSI yo dwe modifye pou sipòte karakteristik Kubernetes sa a, paske yo sipoze ke chofè regilye ofisyèl yo pa pral travay - men li sipoze ke volim sa yo ka itilize sou nenpòt node chwazi pou gous la.
Sa a ka yon pwoblèm pou volim ki konsome resous lame enpòtan oswa pou depo ki disponib sèlman sou kèk lame. Se poutèt sa Kubernetes 1.19 prezante de nouvo karakteristik volim tès alfa ki konseptyèlman sanble ak komèsan EmptyDir:
volim efemèr objektif jeneral;
Suivi kapasite depo CSI.
Avantaj nan nouvo apwòch la:
depo ka lokal oswa konekte atravè yon rezo;
volim yo ka gen yon gwosè espesifik ki pa ka depase pa aplikasyon an;
travay ak nenpòt chofè CSI ki sipòte pwovizyon volim ki pèsistan epi (pou sipòte swivi kapasite) aplike apèl la GetCapacity;
volim yo ka gen kèk premye done depann sou chofè a ak anviwònman;
tout operasyon estanda ak yon volim (kreye yon snapshot, redimensionnement, elatriye) yo sipòte;
volim yo ka itilize ak nenpòt kontwolè aplikasyon ki aksepte yon modil oswa spesifikasyon volim;
Planifikatè Kubernetes chwazi nœuds apwopriye poukont li, kidonk pa gen okenn nesesite ankò pou pwovizyon ak konfigirasyon ekstansyon orè oswa modifye webhooks.
Opsyon aplikasyon yo
Se poutèt sa, volim efemèr objektif jeneral yo apwopriye pou ka itilizasyon sa yo:
Memwa ki pèsistan kòm yon ranplasman pou RAM pou memcached
Dènye degaje memcached te ajoute sipò lè l sèvi avèk memwa ki pèsistan (Intel Optane, elatriye, approx. tradiktè) olye de RAM regilye. Lè w ap deplwaye memcached atravè yon kontwolè aplikasyon, ou ka sèvi ak volim efemèr bi jeneral pou mande pou PMEM bay yon volim nan yon gwosè bay lè l sèvi avèk chofè CSI la, pa egzanp. PMEM-CSI.
LVM lokal depo kòm yon espas travay
Aplikasyon ki travay ak done ki pi gwo pase RAM ka mande pou depo lokal ak yon gwosè oswa mezi pèfòmans ke volim EmptyDir regilye soti nan Kubernetes pa ka bay. Pou egzanp, pou objektif sa a li te ekri TopoLVM.
Aksè lekti sèlman pou volim done
Alokasyon yon volim ka lakòz kreyasyon yon volim konplè lè:
Yon karakteristik kle nan volim efemèr objektif jeneral se nouvo sous volim, EphemeralVolumeSource, ki gen tout jaden yo kreye yon demann volim (istorikman yo rele yon demann volim ki pèsistan, PVC). Nouvo kontwolè nan kube-controller-manager gade gous yo ki kreye tankou yon sous volim, ak Lè sa a, kreye yon PVC pou gous sa yo. Pou chofè CSI a, demann sa a sanble menm jan ak lòt yo, kidonk pa gen okenn sipò espesyal ki nesesè isit la.
Osi lontan ke PVC sa yo egziste, yo ka itilize tankou nenpòt lòt demann sou volim la. An patikilye, yo ka referans kòm yon sous done lè yo kopye yon volim oswa kreye yon snapshot soti nan yon volim. Objè PVC a gen ladan tou eta aktyèl volim la.
Non PVC otomatikman kreye yo predefini: yo se yon konbinezon non gous la ak non volim, separe pa yon tire. Non prédéfinis fè li pi fasil pou kominike ak PVC a paske ou pa gen pou chèche pou li si ou konnen gous non ak non volim. Inconvénient la se ke non an ka deja itilize, ki se detekte pa Kubernetes ak kòm yon rezilta gous la bloke soti nan kòmanse.
Pou asire ke volim la efase ansanm ak gous la, kontwolè a fè yon demann nan volim ki anba pwopriyetè a. Lè gous la efase, mekanis estanda koleksyon fatra a ap travay, ki efase tou de demann lan ak volim la.
Demann yo matche pa chofè depo a atravè mekanis nòmal klas depo a. Malgre ke klas ak imedya ak an reta obligatwa (aka WaitForFirstConsumer) yo sipòte, pou volim efemèr li fè sans pou itilize WaitForFirstConsumer, Lè sa a, pwogramè a ka konsidere tou de itilizasyon ne ak disponiblite depo lè w ap chwazi yon ne. Yon nouvo karakteristik parèt isit la.
Tracking Kapasite Depo
Tipikman pwogramè a pa gen okenn konesans sou kote chofè CSI a pral kreye volim nan. Pa gen okenn fason tou pou pwogramè a kontakte chofè a dirèkteman pou mande enfòmasyon sa a. Se poutèt sa, pwogramè a sondaj nœuds jiskaske li jwenn youn sou ki komèsan yo ka jwenn aksè (anreta obligatwa) oswa kite chwa a nan kote antyèman nan chofè a (imedya obligatwa).
New APICSIStorageCapacity, ki se nan etap alfa a, pèmèt done ki nesesè yo dwe estoke nan etcd pou ke li disponib nan orè a. Kontrèman ak sipò pou volim efemèr bi jeneral, lè ou deplwaye chofè a, ou dwe pèmèt swiv kapasite depo: external-provisioner ta dwe pibliye enfòmasyon sou kapasite yo resevwa nan men chofè a atravè nòmal GetCapacity.
Si planifikatè a bezwen chwazi yon ne pou yon gous ki gen yon volim dekonekte ki itilize an reta, epi chofè a te pèmèt karakteristik sa a pandan deplwaman lè li mete drapo a. CSIDriver.storageCapacity, Lè sa a, nœuds ki pa gen ase kapasite depo yo pral otomatikman jete. Sa a travay pou tou de volim efemèr ak pèsistan objektif jeneral, men se pa pou volim efemèr CSI paske paramèt yo pa ka li pa Kubernetes.
Kòm dabitid, volim ki lye imedyatman yo kreye anvan gous yo pwograme, epi chofè depo a chwazi plasman yo, kidonk lè w ap konfigirasyon. external-provisioner Pa defo, klas depo ak obligatwa imedya yo sote, paske done sa yo pa pral itilize de tout fason.
Piske pwogramasyon kubernetes fòse yo travay ak enfòmasyon ki kapab demode, pa gen okenn garanti ke kapasite yo ap disponib nan chak ka lè yo kreye volim la, men chans pou yo kreye li san nou pa eseye ankò ap ogmante.
NB Ou ka jwenn plis enfòmasyon detaye, osi byen ke san danje "pratik sou kanpe chat la", epi nan ka yon sitiyasyon konplètman enkonpreyansib, resevwa asistans sipò teknik kalifye nan kou entansif - Kubernetes baz ap fèt sou 28-30 septanm, ak pou espesyalis ki pi avanse Kubernetes Mega 14–16 oktòb.
Безопасность
CSIStorageCapacity
Objè CSIStorageCapacity abite nan espas non lè yo ap woule chak chofè CSI nan espas non pa yo, li rekòmande pou limite dwa RBAC sou CSIStorageCapacity nan espas sa a paske li evidan kote done yo soti. Kubernetes pa tcheke pou sa de tout fason, epi anjeneral chofè yo mete nan menm espas non an, kidonk finalman chofè yo espere travay epi yo pa pibliye done ki pa kòrèk (e sa a se kote kat mwen an echwe, approx. tradiktè ki baze sou yon blag bab)
Objektif jeneral volim efemèr
Si itilizatè yo gen dwa pou kreye yon gous (dirèkteman oswa endirèkteman), yo pral kapab tou kreye volim efemèr pou objektif jeneral menm si yo pa gen dwa pou kreye yon demann sou volim nan. Sa a se paske chèk pèmisyon RBAC yo aplike nan kontwolè a ki kreye PVC a, pa nan itilizatè a. Sa a se chanjman prensipal la ajoute sou kont ou, anvan yo pèmèt karakteristik sa a sou grap kote itilizatè ki pa fè konfyans pa ta dwe gen dwa pou kreye volim.
Egzanp
Separe branch PMEM-CSI gen tout chanjman ki nesesè pou kouri yon gwoup Kubernetes 1.19 andedan machin vityèl QEMU ak tout karakteristik yo nan etap alfa. Kòd chofè a pa chanje, sèlman deplwaman an chanje.
Sou yon machin apwopriye (Linux, yon itilizatè nòmal ka itilize Koupre, gade isit la detay) kòmandman sa yo pral pote gwoup la epi enstale chofè PMEM-CSI la:
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
Apre tout bagay ap travay, pwodiksyon an ap gen enstriksyon pou itilize:
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 -
Objè CSIStorageCapacity yo pa vle di ke moun dwe li, kidonk gen kèk pwosesis obligatwa. Filtè modèl Golang pral montre klas depo yo, egzanp sa a pral montre non, topoloji ak kapasite:
Ann eseye kreye yon aplikasyon Demo ak yon sèl volim efemèr objektif jeneral. Fichye kontni 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
Apre nou fin kreye, jan yo montre nan enstriksyon ki anwo yo, kounye a nou gen yon gous adisyonèl ak 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
Si yon lòt aplikasyon bezwen plis pase 26620Mi, orè a pa pral pran an kont pmem-csi-pmem-govm-worker1 nan nenpòt ka.
Ki sa ki nan pwochen?
Tou de karakteristik yo toujou nan devlopman. Plizyè aplikasyon yo te louvri pandan tès alfa. Lyen pwopozisyon amelyorasyon yo dokimante travay ki bezwen fè pou ale nan etap beta a, ansanm ak ki altènativ yo te deja konsidere ak rejte: