پرو هوسٽر > بلاگ > انتظاميه > Ephemeral Volumes with Storage Capacity Tracking: EmptyDir on Steroids
Ephemeral Volumes with Storage Capacity Tracking: EmptyDir on Steroids
ڪجهه ايپليڪيشنن کي ڊيٽا کي ذخيرو ڪرڻ جي ضرورت آهي، پر اهي حقيقت سان ڪافي آرام سان آهن ته ڊيٽا ٻيهر شروع ٿيڻ کان پوء محفوظ نه ٿيندي.
مثال طور، ڪيشنگ جون خدمتون RAM پاران محدود هونديون آهن، پر ڊيٽا کي منتقل ڪري سگھن ٿيون جيڪا اسٽوريج لاءِ استعمال ٿئي ٿي جيڪا RAM کان سست آهي، مجموعي ڪارڪردگيءَ تي ٿورڙي اثر سان. ٻين ايپليڪيشنن کي آگاهي ٿيڻ جي ضرورت آهي ته فائلن ۾ صرف پڙهڻ لاء ڪجهه ان پٽ ٿي سگهي ٿي، جهڙوڪ سيٽنگون يا ڳجهي چيڪ.
Kubernetes اڳ ۾ ئي ڪيترائي قسم آهن عارضي حجم، پر انهن جي ڪارڪردگي محدود آهي جيڪا K8s ۾ لاڳو ڪئي وئي آهي.
عارضي CSI حجم позволили расширять Kubernetes с помощью драйверов CSI для обеспечения поддержки легковесных локальных томов. Этим способом возможно применять خودمختياري جوڙجڪ: سيٽنگون، راز، سڃاڻپ ڊيٽا، متغير، وغيره. CSI ڊرائيورن کي لازمي طور تي تبديل ڪيو وڃي ته جيئن هن Kubernetes خصوصيت کي سپورٽ ڪري، ڇاڪاڻ ته اهو فرض ڪيو ويو آهي ته باقاعده معياري ڊرائيور ڪم نه ڪندا - پر اهو فرض ڪيو ويو آهي ته اهڙي مقدار کي استعمال ڪري سگھجن ٿيون پوڊ لاءِ چونڊيل ڪنهن به نوڊ تي.
اهو حجمن لاءِ مسئلو ٿي سگهي ٿو جيڪي اهم ميزبان وسيلن کي استعمال ڪن ٿا يا اسٽوريج لاءِ جيڪي صرف ڪجهه ميزبانن تي موجود آهن. اهو ئي سبب آهي ته ڪبرنيٽس 1.19 متعارف ڪرايو ٻه نوان الفا ٽيسٽنگ حجم خاصيتون جيڪي تصوراتي طور تي EmptyDir حجم سان ملندڙ جلندڙ آهن:
عام مقصد ephemeral حجم؛
CSI اسٽوريج جي گنجائش ٽريڪنگ.
نئين طريقي جا فائدا:
اسٽوريج مقامي يا نيٽ ورڪ ذريعي ڳنڍيل ٿي سگهي ٿو؛
حجم هڪ مخصوص سائيز ٿي سگھي ٿو جيڪا ايپليڪيشن کان وڌي نه ٿي سگھي؛
ڪنهن به CSI ڊرائيورن سان ڪم ڪري ٿو جيڪي مسلسل مقدار جي فراهمي جي حمايت ڪن ٿا ۽ (ظرفيت جي ٽريڪنگ کي سپورٽ ڪرڻ لاءِ) ڪال لاڳو ڪن ٿا GetCapacity;
سڀني معياري عملن کي حجم سان گڏ (سنيپ شاٽ ٺاهڻ، ريزائزنگ، وغيره) جي حمايت ڪئي وئي آهي؛
حجم ڪنهن به ايپليڪيشن ڪنٽرولر سان استعمال ڪري سگھجن ٿيون جيڪو ماڊل يا حجم جي وضاحت کي قبول ڪري ٿو؛
ڪبرنيٽس شيڊولر پاڻ تي مناسب نوڊس چونڊيندو آهي، تنهنڪري هاڻي شيڊيولر ايڪسٽينشن کي ترتيب ڏيڻ ۽ ترتيب ڏيڻ يا ويب هِڪ کي تبديل ڪرڻ جي ڪا ضرورت ناهي.
ائپليڪيشن جا اختيار
تنهن ڪري، عام مقصد ephemeral حجم هيٺين استعمال جي ڪيسن لاء مناسب آهن:
مستقل ميموري ميمڪيڊ لاءِ رام جي متبادل طور
memcached جي تازي رليز شامل ڪيل سپورٽ مسلسل ياداشت استعمال ڪندي (Intel Optane، وغيره، لڳ ڀڳ مترجم) باقاعده رام جي بدران. جڏهن ايپليڪيشن ڪنٽرولر ذريعي ميمڪيچ کي ترتيب ڏيڻ، توهان عام مقصد جي عارضي حجم استعمال ڪري سگهو ٿا درخواست ڪرڻ لاءِ ته ڏنل سائيز جو مقدار مختص ڪيو وڃي PMEM کان CSI ڊرائيور استعمال ڪندي، مثال طور. PMEM-CSI.
LVM مقامي اسٽوريج هڪ ڪم اسپيس جي طور تي
ايپليڪيشنون جيڪي ڊيٽا سان ڪم ڪن ٿيون جيڪي RAM کان وڏي هونديون آهن شايد مقامي اسٽوريج جي ضرورت هجي سائيز يا ڪارڪردگي جي ماپ سان جيڪي باقاعده EmptyDir حجم Kubernetes کان مهيا نه ڪري سگھن ٿيون. مثال طور، هن مقصد لاء اهو لکيو ويو آهي TopoLVM.
ڊيٽا جي مقدار لاء صرف پڙهڻ جي رسائي
حجم جي تخصيص جي نتيجي ۾ مڪمل حجم پيدا ٿي سگھي ٿي جڏھن:
عام مقصد جي عارضي حجم جي هڪ اهم خصوصيت نئين حجم جو ذريعو آهي، EphemeralVolumeSource, سڀني شعبن تي مشتمل هڪ حجم درخواست ٺاهڻ لاء (تاريخي طور تي هڪ مسلسل حجم جي درخواست، PVC سڏيو ويندو آهي). نئون ڪنٽرولر ۾ kube-controller-manager پوڊس کي ڏسندو آهي جيڪي اهڙي حجم جو ذريعو ٺاهيندا آهن، ۽ پوء انهن پوڊز لاء هڪ PVC ٺاهي ٿو. CSI ڊرائيور لاء، هي درخواست ٻين وانگر ساڳيو نظر اچي ٿو، تنهنڪري هتي ڪا خاص مدد جي ضرورت ناهي.
جيستائين اهڙيون PVCs موجود آهن، اهي استعمال ڪري سگھجن ٿيون جهڙوڪ حجم تي ڪنهن ٻئي درخواستون. خاص طور تي، اهي حوالو ڪري سگھجن ٿا ڊيٽا ماخذ جي طور تي جڏهن حجم ڪاپي ڪري يا حجم مان هڪ سنيپ شاٽ ٺاهي. PVC اعتراض پڻ حجم جي موجوده حالت تي مشتمل آهي.
پاڻمرادو ٺاهيل PVCs جا نالا اڳ ۾ بيان ڪيا ويا آهن: اهي پوڊ جي نالي ۽ حجم جي نالي جو هڪ مجموعو آهن، هڪ هائفن سان الڳ ٿيل آهن. اڳواٽ بيان ڪيل نالن کي PVC سان رابطو ڪرڻ آسان بڻائي ٿو ڇو ته توهان کي ان کي ڳولڻ جي ضرورت ناهي جيڪڏهن توهان پوڊ جو نالو ۽ حجم جو نالو ڄاڻو ٿا. نقصان اهو آهي ته اهو نالو شايد اڳ ۾ ئي استعمال ۾ هجي، جيڪو ڪبرنيٽس پاران معلوم ڪيو ويو آهي ۽ نتيجي ۾ پوڊ کي شروع ٿيڻ کان روڪيو ويو آهي.
انهي کي يقيني بڻائڻ لاءِ ته حجم کي پوڊ سان گڏ ختم ڪيو ويو آهي، ڪنٽرولر مالڪ جي هيٺان حجم کي درخواست ڪري ٿو. جڏهن پوڊ کي ختم ڪيو ويندو آهي، معياري ڪچرو گڏ ڪرڻ وارو ميڪانيزم ڪم ڪري ٿو، جيڪو درخواست ۽ حجم ٻنهي کي ختم ڪري ٿو.
اسٽوريج ڪلاس جي عام ميکانيزم ذريعي اسٽوريج ڊرائيور طرفان درخواستون ملن ٿيون. جيتوڻيڪ ڪلاس فوري ۽ دير سان پابند ٿيل (اڪا WaitForFirstConsumer) جي حمايت ڪئي وئي آهي، غير معمولي حجمن لاء اهو استعمال ڪرڻ جو احساس آهي WaitForFirstConsumer، پوءِ شيڊولر ٻنهي نوڊ استعمال ۽ اسٽوريج جي دستيابي تي غور ڪري سگھي ٿو جڏهن نوڊ چونڊيو. هتي هڪ نئين خاصيت ظاهر ٿئي ٿي.
اسٽوريج جي صلاحيت ٽريڪنگ
عام طور تي شيڊولر کي ڪا به ڄاڻ نه آهي ته CSI ڊرائيور ڪٿي حجم ٺاهيندو. هن معلومات جي درخواست ڪرڻ لاء سڌو سنئون ڊرائيور سان رابطو ڪرڻ لاء شيڊولر لاء ڪو طريقو ناهي. تنهن ڪري، شيڊولر پولنگ نوڊس جيستائين اهو هڪ نه ڳولي ٿو جنهن تي حجم تائين رسائي ٿي سگهي ٿي (دير سان پابند) يا جڳهه جي چونڊ کي مڪمل طور تي ڊرائيور ڏانهن ڇڏي ٿو (فوري پابند).
نئين APICSIStorageCapacity، جيڪو الفا اسٽيج ۾ آهي، ضروري ڊيٽا کي وغيره ۾ ذخيرو ڪرڻ جي اجازت ڏئي ٿو ته جيئن اهو شيڊولر وٽ موجود هجي. عام مقصد جي عارضي حجم جي حمايت جي برعڪس، جڏهن توهان ڊرائيور کي ترتيب ڏيو ٿا، توهان کي لازمي طور تي رکڻ جي صلاحيت جي ٽريڪنگ کي فعال ڪرڻ گهرجي: external-provisioner عام ذريعي ڊرائيور کان حاصل ڪيل صلاحيت جي معلومات کي شايع ڪرڻ گهرجي GetCapacity.
جيڪڏهن شيڊيولر کي ضرورت آهي ته هڪ پوڊ لاءِ هڪ نوڊ چونڊيو جيڪو اڻ بائونڊ حجم سان آهي جيڪو دير سان بائنڊنگ استعمال ڪري ٿو، ۽ ڊرائيور هن فيچر کي ڊيپلائي ڪرڻ دوران پرچم کي ترتيب ڏيندي فعال ڪيو. CSIDriver.storageCapacity، پوءِ نوڊس جيڪي ڪافي اسٽوريج جي صلاحيت نه رکندا آھن پاڻمرادو رد ڪيا ويندا. ھي ڪم ٻنھي عام مقصد جي ھميشه ۽ مستقل حجمن لاءِ، پر سي ايس آءِ جي عارضي حجمن لاءِ نه، ڇاڪاڻ ته انھن جا پيرا ميٽر ڪبرنيٽس پاران پڙھي نه سگھندا آھن.
عام طور تي، فوري طور تي ڳنڍيل حجم پيدا ٿيڻ کان اڳ پوڊ مقرر ڪيا ويا آهن، ۽ انهن جي جڳهه کي اسٽوريج ڊرائيور طرفان چونڊيو ويندو آهي، تنهنڪري جڏهن ترتيب ڏيڻ external-provisioner ڊفالٽ طور، اسٽوريج ڪلاس کي فوري طور تي پابند ڪيو ويو آهي، ڇو ته هي ڊيٽا ڪنهن به صورت ۾ استعمال نه ڪيو ويندو.
جيئن ته ڪبرنيٽس شيڊولر کي ممڪن طور تي پراڻي معلومات سان ڪم ڪرڻ تي مجبور ڪيو ويو آهي، ان جي ڪا به ضمانت نه آهي ته گنجائش هر صورت ۾ موجود هوندي جڏهن حجم ٺاهي ويندي، پر ان جي باوجود ان جي ٻيهر ڪوششن جي پيدا ٿيڻ جا موقعا وڌي ويا آهن.
اين بي توهان وڌيڪ تفصيلي معلومات حاصل ڪري سگهو ٿا، انهي سان گڏ محفوظ طور تي "ڪئٽس اسٽينڊ تي مشق"، ۽ مڪمل طور تي ناقابل فهم صورتحال جي صورت ۾، سخت ڪورسز تي قابل ٽيڪنيڪل سپورٽ مدد حاصل ڪريو - ڪبرنيٽس جو بنياد سيپٽمبر 28-30 تي منعقد ڪئي ويندي، ۽ وڌيڪ ترقي يافته ماهرن لاء ڪبرنيٽس ميگا آڪٽوبر 14-16.
حفاظت
CSISstorageCapacity
CSIStorageCapacity شيون نالن جي اسپيس ۾ رهن ٿيون؛ جڏهن هر CSI ڊرائيور کي ان جي پنهنجي نالي واري جاءِ ۾ رول آئوٽ ڪيو وڃي ٿو، اها سفارش ڪئي وئي آهي ته RBAC حقن کي محدود ڪيو وڃي CSIStorageCapacity کي ان اسپيس ۾، ڇاڪاڻ ته اهو واضح آهي ته ڊيٽا ڪٿان اچي رهي آهي. ڪبرنيٽس ان کي ڪنهن به صورت ۾ چيڪ نٿو ڪري، ۽ عام طور تي ڊرائيور ساڳئي نالي جي جاء تي رکيا ويندا آهن، تنهنڪري آخرڪار ڊرائيور کي ڪم ڪرڻ ۽ غلط ڊيٽا شايع نه ڪرڻ جي اميد آهي (۽ اهو آهي جتي منهنجو ڪارڊ ناڪام ٿيو، لڳ ڀڳ مترجم هڪ ڏاڙهي واري مذاق تي ٻڌل آهي)
عام مقصد Ephemeral حجم
جيڪڏهن صارفين کي پوڊ ٺاهڻ جا حق آهن (سڌي يا اڻ سڌي طرح)، اهي پڻ عام مقصد جي عارضي حجم ٺاهي سگهندا، جيتوڻيڪ انهن وٽ حجم تي درخواست ٺاهڻ جا حق نه هوندا. اهو ئي سبب آهي ته RBAC اجازت چيڪن کي ڪنٽرولر تي لاڳو ڪيو ويو آهي جيڪو PVC ٺاهي ٿو، صارف کي نه. هي شامل ڪرڻ لاء بنيادي تبديلي آهي توهان جي اڪائونٽ ڏانهنهن فيچر کي فعال ڪرڻ کان اڳ ڪلسٽرن تي جتي ناقابل اعتماد استعمال ڪندڙن کي حجم ٺاهڻ جا حق نه هجڻ گهرجن.
مثال طور
الڳ شاخ PMEM-CSI سڀني ضروري تبديلين تي مشتمل آھي ھڪڙي Kubernetes 1.19 ڪلسٽر کي هلائڻ لاءِ QEMU ورچوئل مشينن ۾ الفا اسٽيج ۾ سڀني خصوصيتن سان. ڊرائيور ڪوڊ تبديل نه ڪيو ويو آهي، صرف تعیناتي تبديل ٿي وئي آهي.
هڪ مناسب مشين تي (لينڪس، هڪ عام صارف استعمال ڪري سگهي ٿو Docker، ڏس هتي تفصيل) اهي حڪم ڪلستر آڻيندا ۽ 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
سڀڪنھن شيء کي ڪم ڪرڻ کان پوء، پيداوار ۾ استعمال لاء هدايتون شامل ٿيندو:
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 شيون انسانن جي پڙهڻ لاءِ نه آهن، تنهنڪري ڪجهه پروسيسنگ گهربل آهي. گولنگ ٽيمپليٽ فلٽر ڏيکاريندا اسٽوريج ڪلاس، هي مثال ڏيکاريندو نالو، ٽوپولوجي ۽ گنجائش:
$ 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