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;
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 APICSIStorageCapacity, 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.
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:
# 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