کنٹینرز اب زیادہ تر پیداواری ماحول میں استعمال ہورہے ہیں کیونکہ وہ زیادہ قابل توسیع، قابل استطاعت، ورچوئل مشینوں سے برتر اور تیزی سے تعیناتی کے قابل ہیں۔
بلاشبہ، 10-20 کنٹینرز کے ساتھ کام کرنا چیزوں کو آسان بنا دیتا ہے، لیکن ایک ایسے منظر نامے پر غور کریں جس میں آپ کے Kubernetes کلسٹر پروڈکشن ماحول میں سینکڑوں کنٹینرز ہوں۔
جب ایک ساتھ کئی کنٹینرز چل رہے ہوں تو زندگی بھر کنٹینر کو کنٹرول کرنا مشکل ہو جاتا ہے۔ آپ کو کنٹینر آرکیسٹریشن پلیٹ فارم یا تمام خودکار کنٹینر کی تعیناتی، اسکیلنگ، تنظیم اور انتظامیہ کو سنبھالنے کے لیے حل کی ضرورت ہے۔
چونکہ دونوں کنٹینر آرکیسٹریشن حل دو الگ الگ منصوبے ہیں، اس لیے Kubernetes اور OpenShift کا موازنہ کرنا غیر منصفانہ ہے۔
OpenShift کے برعکس، جو کہ ایک Red Hat سروس ہے، Kubernetes ایک اوپن سورس پہل ہے۔ اس وقت مارکیٹ میں دو سرفہرست کنٹینر آرکیسٹریشن ٹولز ہیں Kubernetes اور Red Hat OpenShift۔
یہ پوسٹ مختلف ٹولز سے گزرے گی اور یہ کہ وہ ایک دوسرے سے کیسے مختلف ہیں۔
آگے بڑھنے سے پہلے، آئیے کنٹینر آرکیسٹریشن کو سمجھتے ہیں۔
تو، کنٹینر آرکیسٹریشن کیا ہے؟
کنٹینرز کی خودکار ترتیب کنٹینر آرکیسٹریشن سافٹ ویئر کے ذریعہ ممکن ہوئی ہے۔ اسے کسی بھی ترتیب میں بنایا اور استعمال کیا جا سکتا ہے، اس لیے اسے پورٹیبل سمجھا جاتا ہے۔
کنٹینر ٹیکنالوجی کسی ایک ایونٹ کو استعمال کرکے ایپلیکیشن کوڈ، لائبریریوں اور دیگر مطلوبہ ڈیٹا کو بنڈل کرتی ہے۔
اس حقیقت کی وجہ سے کہ اس میں سب سے بنیادی آبجیکٹ- یا عمل پر مبنی کوڈ ہوتا ہے، اسے پروگرام کی "سنگل یونٹ" کہا جاتا ہے۔
ایپلیکیشنز اب زیادہ مؤثر طریقے سے کام کر سکتی ہیں، چاہے ڈویلپر ماحولیاتی نظام میں استعمال ہوں یا آن پریمیسس۔ کلسٹر کنٹینر آرکیسٹریشن کنٹینر سافٹ ویئر ٹیکنالوجی کی ایک مقبول قسم ہے، اور Kubernetes اس قسم کی ٹیکنالوجی کے لیے بنایا گیا ہے۔
کنٹینرائزیشن نوڈس کے کلسٹرز کا استعمال کرتے ہوئے ایک موثر سرور جیسا نظام بناتی ہے — یا تو اصل یا ورچوئل مشینیں۔ اس کے نتیجے میں، زیادہ گنجائش ہے، درخواست کی علیحدگی، وزن کو متوازن کرنا، اور مسلسل بہتر پروسیسنگ کی شرحیں دستیاب ہیں۔
کیا ہے Kubernetes?
کنٹینر آرکیسٹریشن کے لیے بنایا گیا نظام، Kubernetes اوپن سورس اور مفت ہے۔ گوگل اس کا اصل خالق تھا۔
Cloud Native Computing Foundation، جو کنٹینر ٹیکنالوجی کو آگے بڑھانے کے لیے قائم کیا گیا تھا، اب Kubernetes کو بطور ممبر شامل کرتا ہے۔
ایک پورٹیبل کنٹینرائزیشن پلیٹ فارم جسے Kubernetes کہا جاتا ہے بہت ساری صلاحیتیں پیش کرتا ہے جس کا مقصد خدمات اور کام کے بوجھ کو آسان بنانا ہے۔
تعیناتی، نیٹ ورکنگ، اور اسکیل ایبلٹی ان کارروائیوں میں سے چند ایک ہیں جن کو خودکار کرنے کے لیے Kubernetes کے پاس ٹولز ہیں۔
Kubernetes کو ڈویلپرز اپنی CI/CD پائپ لائنوں میں فعالیت کو ضم کرنے کے لیے استعمال کرتے ہیں، جیسے لوڈ بیلنسنگ، عمل آٹومیشن، اور اسٹوریج آرکیسٹریشن۔
Kubernetes کلسٹر میں، ایک ماسٹر نوڈ اور متعدد ورکر نوڈس ایک ماسٹر غلام ڈیزائن استعمال کر رہے ہیں۔
ہر ورکر نوڈ میں کام کرنے والے بہت سے حصے ہوں گے جو ایک فعال یونٹ کے طور پر متحد کنٹینرز کے مجموعے سے زیادہ کچھ نہیں ہیں۔
Kubernetes YAML کا استعمال کرتے ہوئے حقیقی ایپلی کیشن کی تخلیق کے لیے API سرور کو فراہم کردہ وسائل کی وضاحت کرتا ہے۔
خصوصیات
- اسے کسی بھی پلیٹ فارم پر چارج کیے بغیر استعمال کیا جا سکتا ہے کیونکہ یہ اوپن سورس ہے۔
- ڈاؤن ٹائم کو خود بخود سنبھالنے کے لیے آپ واپس رول اور جلدی سے رول آؤٹ کر سکتے ہیں۔
- یہ نیٹ ورک ٹریفک کی تقسیم کے لیے لوڈ بیلنسنگ خصوصیات فراہم کرتا ہے۔
- اس میں ایک مضبوط، فعال ترقی اور انجینئرنگ کمیونٹی ہے، جو نئی خصوصیات کے جاری ہونے میں مدد کرتی ہے۔
- یہ کئی پروگرامنگ زبانوں اور فریم ورک کو سپورٹ کرتا ہے، جس سے ڈویلپرز اور ایڈمنسٹریٹر کو آزادی ملتی ہے۔
- اس میں ایک ڈیفالٹ ڈیش بورڈ ہے جو کلسٹر کے ہر پہلو کو سمجھنے کے لیے ڈیٹا کی دولت فراہم کرتا ہے۔
- یہ بنیادی ڈھانچے کے وسائل کو مؤثر طریقے سے استعمال کرنے اور مجموعی اخراجات کو کم کرنے میں مدد کرتا ہے۔
- ایپس لانچ کرنے کے لیے، Kubernetes آپ کے منتخب کردہ اسٹوریج سسٹم کو ماؤنٹ کرتا ہے اور شامل کرتا ہے۔
- Kubernetes کے ساتھ، آپ عمودی اور افقی طور پر وسائل کو تیزی سے اور مؤثر طریقے سے پیمانہ کر سکتے ہیں۔
- عملدرآمد کے دوران ناکام ہونے والے کنٹینرز کو کبرنیٹس خود بخود دوبارہ شروع کر سکتے ہیں، اور جو صارف کی طرف سے طے شدہ صحت کی جانچ پر ردعمل ظاہر نہیں کرتے ہیں انہیں مار دیا جاتا ہے۔ تاہم، اگر کوئی نوڈ ناکام ہوجاتا ہے، تو یہ اسے بدل دیتا ہے اور ناکام کنٹینرز کو دوسرے فعال نوڈس میں دوبارہ تقسیم کرتا ہے۔
کیا ہے اوپن شفٹ۔?
ریڈ ہیٹ نے کنٹینرائزیشن ٹولز کا اوپن شفٹ مجموعہ بنایا۔ ڈوکر اور کبرنیٹس, دو اچھی طرح سے پسند کی جانے والی کنٹینرائزیشن ٹیکنالوجیز، OpenShift کی ترقی کے حصے میں استعمال ہوتی ہیں۔
جب اس کے تقسیم شدہ پلیٹ فارم کی بات آتی ہے تو، Red Hat OpenShift کو تقسیم اور Kubernetes کو پلیٹ فارم کے بنیادی کے طور پر دیکھتا ہے۔
Kubernetes پر بنایا گیا اور کلاؤڈ میں دستیاب پلیٹ فارم کو OpenShift Container Platform کہا جاتا ہے۔ اسے اکثر پلیٹ فارم بطور سروس (PaaS) پیش کرنے والے کنٹینرائزیشن خدمات کے طور پر سمجھا جاتا ہے۔
یہ سیلف سروس پروویژننگ، سنٹرلائزڈ پالیسی ایڈمنسٹریشن، بلٹ ان مانیٹرنگ، اور سیکیورٹی فراہم کرتا ہے جو کاروبار کے لیے اعلیٰ ترین سطح کی ہے۔
Kubernetes کنٹینر ورک بوجھ کے ساتھ، OpenShift مطابقت رکھتا ہے۔
اس کے علاوہ، یہ OpenShift OKD (پہلے Origin کے نام سے جانا جاتا تھا) فراہم کرتا ہے، جو آپ کو کلاؤڈ بیسڈ ایپلی کیشنز بنانے، تقسیم کرنے اور جانچنے کے قابل بناتا ہے۔
Node.js، Ruby، Python، Perl، اور Java میں لکھی گئی ایپلیکیشنز کو OpenShift کے ذریعے ہینڈل کیا جا سکتا ہے۔ پلیٹ فارم کنٹینرائزڈ پروگراموں کی خودکار یا دستی اسکیلنگ کی اجازت دیتا ہے۔
OpenShift ایک تجریدی پرت کے طور پر متعدد ورچوئلائزیشن تصورات کو شامل کرتا ہے۔ OpenShift کے پیچھے بنیادی خیال ورچوئلائزیشن ہے۔
OpenShift کنٹینر ہوسٹنگ اور رن ٹائم کے لیے Open Container Initiative (OCI) کے ساتھ مطابقت رکھتا ہے اور دیگر DevOps ٹیکنالوجیز کے ساتھ تیزی سے تعامل کرتا ہے۔
OpenShift استعمال کرنے والی کمپنیوں کو سخت حفاظتی رہنما خطوط، فوری درخواست کی تعیناتی، اور خصوصی مدد کے ساتھ ایک جامع پلیٹ فارم کی ضرورت ہے۔
یہ بڑے پیمانے پر پروجیکٹوں یا چھوٹے کاروباروں کے لیے خاص طور پر پرکشش انتخاب بناتا ہے جن میں اپنی ایپس کے نظم و نسق، حفاظت اور نگرانی کے لیے خصوصی افراد کی کمی ہے۔
خصوصیات
- یہ زیادہ تیزی اور چست طریقے سے ایپلیکیشن بنا اور لانچ کر سکتا ہے۔
- بہت سے دوسرے DevOps ٹولز کو آسانی سے اس کے ساتھ مربوط کیا جا سکتا ہے۔
- ہر ریلیز کے لیے، یہ متعدد تھرڈ پارٹی پلگ انز کی جانچ کرتا ہے۔
- مقامی طور پر یا کسی بھی کلاؤڈ سروس فراہم کنندہ کے ساتھ استعمال کرنا آسان ہے۔
- یہ کنٹینرز کی میزبانی اور چلانے کے لیے اوپن کنٹینر انیشی ایٹو (OCI) کی حمایت کرتا ہے۔
- اس میں کارکردگی، نقائص، اور حفاظتی خدشات کے لیے کئی اصلاحات شامل ہیں۔
- Prometheus اور Grafana کی حمایت کی جاتی ہے، جو کلسٹر کی نگرانی میں مدد کرتے ہیں۔
- یہ Red Hat پر متحد کنسول کا استعمال کرتے ہوئے تیزی سے پالیسیاں بنا اور نافذ کر سکتا ہے۔
- رسائی کے کنٹرول، نیٹ ورکنگ، اور ایک انٹرپرائز رجسٹری ایک بلٹ ان سکینر کے ساتھ Red Hat OpenShift کی بنیادی حفاظتی خصوصیات میں سے صرف چند ہیں۔
- Red Hat OpenShift پر مبنی ایپلی کیشنز سیکنڈوں کے معاملے میں سینکڑوں نوڈس پر ہزاروں مثالوں تک بڑھ سکتی ہیں۔
- 3-نوڈ کلسٹرز، ایک واحد Red Hat OpenShift نوڈ، اور ریموٹ ورکر نوڈس کی مدد سے، Red Hat OpenShift کنارے کے منظرناموں میں چھوٹے فٹ پرنٹ ٹوپولاجیز کے لیے تعاون کو بہتر بناتا ہے۔ یہ ٹوپولوجی مختلف ایج سائٹس کے جسمانی سائز، کنیکٹیویٹی، اور دستیابی کی ضروریات سے بہتر طور پر مطابقت رکھتی ہیں۔
Kubernetes اور OpenShift کے درمیان بنیادی فرق
اوپن سورس اور کمرشل
Kubernetes اور OpenShift کے درمیان بنیادی فرق یہ ہے کہ سابقہ ایک اوپن سورس پروجیکٹ ہے، جبکہ مؤخر الذکر منافع بخش کارپوریٹ پیشکش ہے۔ نتیجے کے طور پر، Kubernetes ایک خود کو برقرار رکھنے والا آلہ ہے۔
لوگ Kubernetes کمیونٹی سے رابطہ کرتے ہیں، جس میں کئی ڈویلپرز، ایڈمنسٹریٹرز، آرکیٹیکٹس وغیرہ شامل ہیں، اس ٹیکنالوجی میں کسی بھی مسئلے یا کیڑے کو حل کرنے کے لیے۔
OpenShift کے ساتھ اس Red Hat پروڈکٹ سبسکرپشن کو استعمال کرتے وقت، آپ کے پاس کسی بھی مسئلے کو حل کرنے کے لیے ایک بہترین بامعاوضہ سپورٹ آپشن ہوتا ہے۔ Red Hat CloudForms کو اوپن شفٹ سبسکرپشن کے ساتھ فزیکل، ورچوئل اور کلاؤڈ انفراسٹرکچر کو منظم کرنے کے لیے استعمال کیا جا سکتا ہے۔
پلیٹ فارم کی قیمت دیکھی جا سکتی ہے۔ یہاں.
یوزر انٹرفیس اور تجربہ
Kubernetes کا پیچیدہ ویب انٹرفیس ممکنہ طور پر ابتدائی افراد کو الجھا سکتا ہے۔
صارفین کو Kubernetes کا ڈیش بورڈ انسٹال کرنا چاہیے اور Kubernetes ویب گرافیکل یوزر انٹرفیس (GUI) دیکھنے کے لیے اپنی مشین کے پورٹ کو کلسٹر سرور سے مواصلت کرنے کے لیے Kube-proxy کا استعمال کرنا چاہیے۔
چونکہ ڈیش بورڈ میں لاگ ان صفحہ نہیں ہے، اس لیے صارفین کو تصدیق اور اجازت فراہم کرنے کے لیے بیئرر ٹوکنز بھی قائم کرنا ہوں گے۔
دوسری طرف، OpenShift ایک ٹچ لاگ ان صفحہ کے ساتھ صارف کے لیے دوستانہ آن لائن کنسول پیش کرتا ہے۔ کنسول صارفین کو استعمال میں آسان فارم پر مبنی انٹرفیس فراہم کرتا ہے جو وسائل کے اضافے، حذف کرنے اور ترمیم کے قابل بناتا ہے۔ OpenShift کے ساتھ، صارفین کو واضح طور پر فائدہ ہوتا ہے۔
ویب انٹرفیس
آپ کلسٹر انتظامیہ کے تمام کاموں کو انجام دینے کے لیے ایک مناسب اور صارف دوست ویب انٹرفیس چاہتے ہیں۔ اور OpenShift یہ فراہم کرتا ہے۔ ہر صارف کو پورے کلسٹر کی بدیہی نمائندگی کے ساتھ پیش کرنے سے پہلے صرف ایک مختصر لاگ ان عمل کو مکمل کرنے کی ضرورت ہے۔
Red Hat سے OpenShift ایک بدیہی ویب UI فراہم کرتا ہے جو DevOps پیشہ ور افراد کو آسانی سے Kubernetes سرگرمیاں انجام دینے اور آپریشن ٹیموں کو آرام سے ایپلی کیشن کی نگرانی کرنے کے قابل بناتا ہے۔
کنٹرول متعدد انتخاب فراہم کرتا ہے جو صرف ایک کلک کے ساتھ لاگو کیے جا سکتے ہیں، بشمول تعمیر، تعینات، اپ ڈیٹ، پیمانہ، اور نمائش۔
Kubernetes میں ایک سادہ ڈیش بورڈ شامل ہے جو صرف بنیادی کاموں میں آپ کی مدد کر سکتا ہے۔ مزید برآں، مارکیٹ میں موجود دیگر ڈیش بورڈز کے مقابلے میں، ڈیش بورڈ زیادہ صارف دوست نہیں ہے۔
نتیجے کے طور پر، DevOps پیشہ ور افراد بنیادی Kubernetes ڈیش بورڈ کو متبادل ویژولائزیشن ٹولز کے ساتھ جوڑنے کو ترجیح دیتے ہیں جیسے Prometheus اور گرافانا.
اسکیل ایبلٹی
ایک کلسٹر میں متعدد ورچوئل کمپیوٹرز ہوں گے، چاہے ورچوئلائزڈ ہو یا ننگی دھات۔ Kubernetes میں ورچوئل مشین کا اضافہ ایک وقت طلب عمل ہے۔ اس کے لیے پروگرامرز کو YAML اسکرپٹ لکھنے کی ضرورت ہوتی ہے۔
اس کے برعکس OpenShift کا استعمال کرتے ہوئے اسکیلنگ آسان ہے۔ دستیاب انسٹالرز اور جوابی پلے بکس کی مدد سے، اوپن شفٹ کلسٹر میں ورچوئل مشینوں کو تیزی سے ترتیب دے سکتا ہے۔
مزید برآں، OpenShift میں اسکیل ایبلٹی ایک سادہ طریقہ کار ہے۔
لچک
چونکہ Kubernetes کو استعمال کرنے کا کوئی طے شدہ طریقہ نہیں ہے، اس لیے یہ بہت زیادہ آزادی فراہم کرتا ہے۔ اضافی پابندیوں والا کوئی بھی آپریٹنگ سسٹم Kubernetes کو چلانے کے لیے استعمال کیا جا سکتا ہے۔
ان کی پرانی نوعیت اور جدید مارکیٹ کے تقاضوں کو پورا کرنے میں ناکامی کی وجہ سے، میراثی فن تعمیر بہت سے کاروباری اداروں کے لیے ایک رکاوٹ تھے۔
OpenShift کے ساتھ کام کرتے وقت، تمام آپریٹنگ سسٹم سپورٹ نہیں ہوتے ہیں۔ صرف FedoraOS، CentOS، اور Red Hat کی تقسیمیں OpenShift کے ساتھ مطابقت رکھتی ہیں۔
مینجمنٹ
ابتدائی طور پر، آپ ڈیفالٹ ڈیش بورڈ کا استعمال کرتے ہوئے Kubernetes میں کلسٹر کو کنٹرول کر سکتے ہیں۔
تاہم، اس کی محدود فعالیت اور کم سے کم یوزر انٹرفیس کی وجہ سے، جب کلسٹر کا سائز بڑھتا ہے، آپ کو آسانی سے کلسٹر کا انتظام کرنے کے لیے Istio، Prometheus، اور Grafana جیسے مزید طاقتور ٹولز شامل کرنے کی ضرورت ہوگی۔
کلسٹر کا انتظام کرنے کے لیے، Red Hat OpenShift ایک صارف دوست ڈیش بورڈ فراہم کرتا ہے۔ OpenShift کا ویب پورٹل آپ کو بہتر انتظامیہ کے لیے کلسٹر پر جدید ترین آپریشنز کرنے کی اجازت دیتا ہے۔
OpenShift کلسٹر کو EFK اسٹیک اور Istio سے منسلک کرنے کی بھی سفارش کرتا ہے۔ آخر میں، اوپن شفٹ میں قابل رسائی قابل جواب پلے بکس اور انسٹالر کلسٹر مینجمنٹ کے ساتھ مدد کرتا ہے۔
تعیناتی
ڈی او اوپس کا ایک ضروری مرحلہ پروڈکشن میں ایک ایپلیکیشن کو تعینات کر رہا ہے، اور اوپن شفٹ اس عمل کو بالکل سیدھا بناتا ہے۔
CICD عمل آپ کے لیے ترقی سے لے کر تعیناتی تک ہر چیز کو سنبھالتا ہے، لہذا آپ کو ہر قدم کو دستی طور پر انجام دینے کی فکر کرنے کی ضرورت نہیں ہے۔
آپ گھر پر ہی محسوس کریں گے کہ آپ OpenShift کے ساتھ درخواست کی تعیناتی کے لیے CICD پائپ لائن چلا رہے ہیں، یہاں تک کہ اگر آپ مکمل نوآموز ہیں۔ OpenShift ایپس کو تعینات کرنے کے لیے، DeploymentConfig کمانڈ استعمال کریں۔
تاہم، Kubernetes کا نفاذ مشکل ہے اور اکثر خصوصی طور پر ایک ماہر کے ذریعے کیا جاتا ہے۔
درخواست کی تعیناتی کے لیے پائپ لائن کے ہر مرحلے کو ہاتھ سے ترتیب دینے کی ضرورت ہوگی۔ Kubernetes کی تعیناتیاں تعیناتی اشیاء کا استعمال کرتی ہیں، جو بہت سی ہم آہنگی تبدیلیوں کی حمایت کرتی ہیں۔
سلامتی
Kubernetes کے مقابلے میں، OpenShift میں مضبوط حفاظتی ضوابط ہیں۔ مثال کے طور پر، کنٹینرز کو روٹ کے طور پر چلانا OpenShift کے ساتھ ممکن نہیں ہے۔
مزید برآں، یہ صارفین کو DockerHub پر بہت سی سرکاری تصاویر استعمال کرنے سے روکتا ہے۔ اس لیے آپ کو OpenShift کی حفاظتی پالیسیوں کو استعمال کرنے سے پہلے اس سے واقف ہونا چاہیے۔
تاہم، یہ حدود OpenShift کی توثیق اور اجازت کو Kubernetes سے زیادہ قابل اعتماد بناتی ہیں۔
Kubernetes کے تحت، مناسب شناخت اور اجازت کی صلاحیتوں کو تیار کرنا مشکل ہوگا۔
اگر کنٹینر اسکیننگ ٹولز کو کلسٹر میں شامل نہیں کیا گیا ہے، OpenShift کے برعکس، Kubernetes کلسٹرز میں بڑی تعداد میں غیر محفوظ ڈوکر امیجز شامل ہو سکتے ہیں۔
رول پر مبنی رسائی کنٹرول (RBAC) ٹیکنالوجیز Kubernetes میں دستیاب ہیں، تاہم، وہ پروڈکشن ایپلی کیشنز میں درکار اعلی درجے کی سیکیورٹی کے لیے ناکافی ہیں۔
لہذا، اوپن شفٹ کے مقابلے کبرنیٹس کو اب بھی بہت سی حفاظتی پیشرفت کرنی ہے۔
نتیجہ
یہ سب Kubernetes اور OpenShift کے درمیان فرق کے بارے میں تھا۔ آئی ٹی سیکٹر میں، دونوں کنٹینر آرکیسٹریشن پلیٹ فارمز کی مانگ ہے۔ لہذا، آپ کنٹینر آرکیسٹریشن پلیٹ فارم منتخب کر سکتے ہیں جو آپ کی ضروریات کی بنیاد پر آپ کی کمپنی کے لیے مثالی ہو۔
اگر آپ کے پروجیکٹس کو لچک درکار ہے تو آپ کو Kubernetes استعمال کرنا چاہیے۔
تاہم، اگر آپ پہلے سے طے شدہ منصوبے پر قائم رہ سکتے ہیں اور کنٹینر آرکیسٹریشن کے لیے ایک پلیٹ فارم استعمال کرنا چاہتے ہیں تو اوپن شفٹ ایک بہترین آپشن ہے جس کا استعمال اور انتظام کرنا آسان ہے۔
اور اگر آپ تھوڑی دیر سے DevOps اسپیس میں کام کر رہے ہیں، تو آپ Kubernetes کو شاٹ دینا چاہیں گے۔
تاہم، اگر آپ نوآموز ہیں، تو OpenShift کے ساتھ جائیں کیونکہ یہ آپ کے لیے زیادہ تر چیزوں کو کافی آسان بنا دے گا۔
Red Hat OpenShift اور Kubernetes اب آپ کے انتخاب ہیں، لہذا سمجھداری سے انتخاب کریں۔
جواب دیجئے