منصوبے کے بارے میں
pillar-csi خود میزبان bare-metal کلسٹرز کے لیے ایک Kubernetes CSI ڈرائیور ہے۔ یہ ایک مخصوص اسٹوریج نوڈ پر مقامی ZFS zvols یا LVM منطقی والیومز لیتا ہے اور انہیں NVMe-oF/TCP کے ذریعے باقی کلسٹر کو برآمد کرتا ہے، SSH، Python ڈیمونز، یا بیرونی ٹارگٹ CLIs پر انحصار کرنے کے بجائے configfs کے ذریعے براہ راست کرنل میں لکھتا ہے۔ یہ واضح طور پر ایک تقسیم شدہ فائل سسٹم نہیں ہے: یہ نوڈز کے درمیان اسٹوریج کی نقل، سٹرائپنگ، یا پولنگ نہیں کرتا۔
آرکیٹیکچر تین ورک لوڈز پر مشتمل ہے۔ pillar-controller ایک Deployment کے طور پر چلتا ہے اور کلسٹر اسکوپڈ Pillar* CRDs کو reconcile کرتا ہے۔ pillar-agent صرف اسٹوریج نوڈز پر DaemonSet کے طور پر چلتا ہے اور میزبان پر تمام configfs تحریروں کا مالک ہے۔ pillar-node ہر ورکر پر چلتا ہے اور CSI Node سروس (initiator connect، mkfs، bind-mount) سنبھالتا ہے۔ دونوں DaemonSets hostNetwork استعمال کرتے ہیں تاکہ NVMe-oF/TCP ڈیٹا پلین میزبان نیٹ ورک نیم اسپیس سے بائنڈ ہو سکے۔
کنفیگریشن CRDs کے ذریعے اعلانیہ ہے: PillarAgent اسٹوریج ایجنٹ کا پتہ لگاتا ہے، PillarStore اسٹوریج پول (ZFS پول نام، LVM VG، بیک اینڈ کنفیگ) بیان کرتا ہے، PillarProtocol نیٹ ورک پروٹوکول کنفیگریشن بیان کرتا ہے، اور PillarStorageClass پول اور پروٹوکول کو خودکار طور پر تیار کردہ StorageClass میں یکجا کرتا ہے۔ ایک اندرونی PillarVolumeState CRD جزوی پروویژننگ ناکامیوں سے بحالی اور پبلیکیشن ٹریکنگ کے لیے پائیدار حالت ریکارڈ کرتا ہے؛ کنٹرولر اس ریکارڈ سے CSI ایکسیس موڈ کی خصوصیت نافذ کرتا ہے۔
ایک قابل ذکر ڈیزائن عنصر پرانی آپریشن فینسنگ ہے۔ ہر ایجنٹ کال جو والیوم کے وسائل کو تبدیل کرتی ہے ایک فینسنگ ٹوکن لے کر چلتی ہے جو والیوم اسٹیٹ UID (لائف سائیکل شناخت) اور compare-and-swap کے ذریعے بڑھائے گئے publicationGeneration کاؤنٹر پر مشتمل ہوتا ہے۔ ایجنٹ اسٹوریج نوڈ کی مقامی ڈسک پر /var/lib/pillar-csi/agent/generations/ کے تحت فی والیوم پائیدار نشانات رکھتا ہے، جو hostPath کے طور پر ماؤنٹ ہوتے ہیں تاکہ نشانات ری اسٹارٹ اور ری بوٹ کے بعد بھی برقرار رہیں۔ نشان سے پرانی درخواستیں، ختم یا تبدیل شدہ لائف سائیکل سے آنے والی، یا بغیر ٹوکن والی درخواستیں FAILED_PRECONDITION کے ساتھ مسترد کر دی جاتی ہیں۔ README ایک اپ گریڈ انتباہ نوٹ کرتا ہے: اپ گریڈ سے پہلے تمام والیومز ڈیٹیچ کریں، کیونکہ پہلے کے ورژنز نے کوئی پبلیکیشنز، لائف سائیکلز، یا جنریشنز ریکارڈ نہیں کیے، اور کوئی مائیگریشن شِم فراہم نہیں کیا گیا۔
نوڈ اسٹیج حالت ورکر پر /var/lib/pillar-csi/node/ کے تحت ریکارڈ ہوتی ہے، جو temp-file، sync، اور rename کے ذریعے ایٹمی طور پر لکھی جاتی ہے۔ NodeUnstageVolume ریکارڈ واپس پڑھتا ہے کیونکہ CO unstage پر نہ والیوم کیپیبلٹی نہ والیوم کانٹیکسٹ بھیجتا ہے۔ اَن ماؤنٹ کے فیصلے mounter کے idempotent Unmount کو سونپے جاتے ہیں، خراب ماؤنٹ پروب ایررز (EIO، ENOTCONN، ESTALE، EACCES) کو اب بھی ماؤنٹ شدہ سمجھتے ہوئے تاکہ kubelet ان پوڈز کو صاف کر سکے جن کا فائل سسٹم کرنل شٹ ڈاؤن میں چلا گیا ہو۔
سپورٹڈ میٹرکس: NVMe-oF/TCP پر ZFS zvol اور LVM LV بھیجے جاتے ہیں؛ iSCSI ڈیزائن شدہ ہے لیکن ابھی بھیجا نہیں گیا؛ ZFS ڈیٹاسیٹس کے لیے NFS ڈیزائن شدہ ہے لیکن ابھی بھیجا نہیں گیا۔ CSI آپریشنز میں CreateVolume، DeleteVolume، ControllerPublish/Unpublish، ControllerExpandVolume، NodeStage/Unstage، NodePublish/Unpublish، NodeExpandVolume، NodeGetVolumeStats، ValidateVolumeCapabilities، اور GetCapacity شامل ہیں۔ ایکسیس موڈز ReadWriteOnce، ReadWriteOncePod، اور ReadOnlyMany ہیں؛ والیوم موڈز Filesystem (ext4/xfs) اور Block ہیں۔
انسٹالیشن Helm کے ذریعے ہے۔ کنٹرولر اور ایجنٹ کے درمیان mTLS آپٹ اِن ہے (cert-manager موڈ یا فراہم کردہ Secret موڈ)؛ ڈیفالٹ plaintext gRPC ہے۔ Kubernetes 1.24 یا نیا درکار ہے۔ اسٹوریج نوڈز کو nvmet اور nvmet_tcp کرنل ماڈیولز درکار ہیں؛ ورکر نوڈز کو nvme_tcp اور nvme_fabrics؛ init-containers اسٹارٹ اپ پر modprobe چلاتے ہیں۔
README میں CRD YAML مثالوں کے ساتھ ایک کوئیک اسٹارٹ، معیاری kubectl describe اور لاگز کے ذریعے ٹربل شوٹنگ، اور ExportSpecMissing پر پھنسے لیگیسی والیومز کے لیے تفصیلی بحالی کا طریقہ کار شامل ہے، جو bindAddress، port، اور aclEnabled کے لیے رن ٹائم مشاہدات سے اندازہ لگانے کے بجائے واضح آپریٹر فیصلوں پر زور دیتا ہے۔
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.