GA میں Amazon EKS ونڈوز میں کیڑے ہیں، لیکن یہ سب سے تیز ہے۔

GA میں Amazon EKS ونڈوز میں کیڑے ہیں، لیکن یہ سب سے تیز ہے۔

بخیر دوپہر، میں آپ کے ساتھ ونڈوز کنٹینرز کے لیے AWS EKS (Elastic Kubernetes Service) سروس کو ترتیب دینے اور استعمال کرنے کے بارے میں اپنا تجربہ بتانا چاہتا ہوں، یا اس کے استعمال کی ناممکنات، اور AWS سسٹم کنٹینر میں پائے جانے والے بگ کے بارے میں، ان لوگوں کے لیے۔ جو ونڈوز کنٹینرز کے لیے اس سروس میں دلچسپی رکھتے ہیں، براہ کرم بلی کے نیچے۔

میں جانتا ہوں کہ ونڈوز کنٹینرز ایک مقبول موضوع نہیں ہے، اور بہت کم لوگ انہیں استعمال کرتے ہیں، لیکن میں نے پھر بھی یہ مضمون لکھنے کا فیصلہ کیا، کیونکہ kubernetes اور Windows پر Habré پر ایک دو مضامین تھے اور اب بھی ایسے لوگ موجود ہیں۔

شروع

یہ سب اس وقت شروع ہوا جب ہماری کمپنی میں خدمات کو kubernetes میں منتقل کرنے کا فیصلہ کیا گیا، جو کہ 70% Windows اور 30% Linux ہے۔ اس مقصد کے لیے، AWS EKS کلاؤڈ سروس کو ممکنہ اختیارات میں سے ایک سمجھا گیا۔ 8 اکتوبر 2019 تک، AWS EKS ونڈوز پبلک پریویو میں تھی، میں نے اس کے ساتھ شروعات کی، وہاں kubernetes کا پرانا 1.11 ورژن استعمال کیا گیا، لیکن میں نے بہرحال اسے چیک کرنے کا فیصلہ کیا اور یہ دیکھنے کا فیصلہ کیا کہ یہ کلاؤڈ سروس کس مرحلے پر ہے، آیا یہ کام کر رہی ہے۔ بالکل، جیسا کہ یہ نکلا، نہیں، اس میں پوڈز کو ہٹانے کے اضافے کے ساتھ ایک بگ تھا، جبکہ پرانے نے ونڈوز ورکر نوڈ کی طرح اسی سب نیٹ سے اندرونی آئی پی کے ذریعے جواب دینا بند کر دیا تھا۔

لہذا، اسی EC2 پر kubernetes پر ہمارے اپنے کلسٹر کے حق میں AWS EKS کا استعمال ترک کرنے کا فیصلہ کیا گیا، صرف ہمیں CloudFormation کے ذریعے تمام توازن اور HA کو خود بیان کرنا ہوگا۔

ایمیزون ای کے ایس ونڈوز کنٹینر سپورٹ اب عام طور پر دستیاب ہے۔

بذریعہ مارٹن بیبی | 08 اکتوبر 2019 کو

اس سے پہلے کہ میرے پاس اپنے کلسٹر کے لیے CloudFormation میں ٹیمپلیٹ شامل کرنے کا وقت ہوتا، میں نے یہ خبر دیکھی ایمیزون ای کے ایس ونڈوز کنٹینر سپورٹ اب عام طور پر دستیاب ہے۔

بلاشبہ، میں نے اپنے تمام کام کو ایک طرف رکھ دیا اور اس بات کا مطالعہ کرنا شروع کیا کہ انہوں نے GA کے لیے کیا کیا، اور عوامی پیش نظارہ کے ساتھ سب کچھ کیسے بدل گیا۔ جی ہاں، AWS، شاباش، ونڈوز ورکر نوڈ کے لیے تصاویر کو ورژن 1.14 میں اپ ڈیٹ کیا، اور ساتھ ہی ساتھ کلسٹر خود، EKS میں ورژن 1.14، اب ونڈوز نوڈس کو سپورٹ کرتا ہے۔ پراجیکٹ بذریعہ عوامی پیش نظارہ گیتھب انہوں نے اس کا احاطہ کیا اور کہا کہ اب یہاں سرکاری دستاویزات استعمال کریں: ای کے ایس ونڈوز سپورٹ

ایک EKS کلسٹر کو موجودہ VPC اور سب نیٹس میں ضم کرنا

تمام ذرائع میں، اعلان کے اوپر دیے گئے لنک کے ساتھ ساتھ دستاویزات میں، کلسٹر کو یا تو ملکیتی eksctl یوٹیلیٹی کے ذریعے یا CloudFormation + kubectl کے ذریعے تعینات کرنے کی تجویز پیش کی گئی تھی، اس کے بعد صرف Amazon میں پبلک سب نیٹ کا استعمال کرتے ہوئے، اور ساتھ ہی نئے کلسٹر کے لیے علیحدہ VPC۔

یہ آپشن بہت سے لوگوں کے لیے موزوں نہیں ہے؛ سب سے پہلے، ایک علیحدہ VPC کا مطلب ہے اس کی لاگت کے لیے اضافی لاگت + آپ کے موجودہ VPC پر ٹریفک کو ہموار کرنا۔ وہ لوگ جن کے پاس پہلے سے ہی AWS میں اپنے ایک سے زیادہ AWS اکاؤنٹس، VPC، سب نیٹس، روٹ ٹیبلز، ٹرانزٹ گیٹ وے وغیرہ کے ساتھ ایک ریڈی میڈ انفراسٹرکچر ہے انہیں کیا کرنا چاہیے؟ یقیناً، آپ ان سب کو توڑنا یا دوبارہ کرنا نہیں چاہتے، اور آپ کو موجودہ VPC کا استعمال کرتے ہوئے، نئے EKS کلسٹر کو موجودہ نیٹ ورک انفراسٹرکچر میں ضم کرنے کی ضرورت ہے اور، علیحدگی کے لیے، زیادہ سے زیادہ کلسٹر کے لیے نئے سب نیٹس بنانے کی ضرورت ہے۔

میرے معاملے میں، یہ راستہ منتخب کیا گیا تھا، میں نے موجودہ VPC کا استعمال کیا، نئے کلسٹر کے لیے صرف 2 پبلک سب نیٹس اور 2 پرائیویٹ سب نیٹس شامل کیے، یقیناً، دستاویزات کے مطابق تمام قواعد کو مدنظر رکھا گیا تھا۔ اپنا ایمیزون ای کے ایس کلسٹر وی پی سی بنائیں.

ایک شرط یہ بھی تھی: EIP کا استعمال کرتے ہوئے عوامی ذیلی نیٹ ورک میں کوئی کارکن نوڈس نہیں ہے۔

eksctl بمقابلہ CloudFormation

میں ابھی ایک ریزرویشن کروں گا کہ میں نے کلسٹر کی تعیناتی کے دونوں طریقے آزمائے، دونوں صورتوں میں تصویر ایک جیسی تھی۔

میں صرف eksctl کا استعمال کرتے ہوئے ایک مثال دکھاؤں گا کیونکہ یہاں کوڈ چھوٹا ہوگا۔ eksctl کا استعمال کرتے ہوئے، کلسٹر کو 3 مراحل میں تعینات کریں:

1. ہم خود کلسٹر + لینکس ورکر نوڈ بناتے ہیں، جو بعد میں سسٹم کنٹینرز کی میزبانی کرے گا اور وہی بدقسمت vpc-کنٹرولر۔

eksctl create cluster 
--name yyy 
--region www 
--version 1.14 
--vpc-private-subnets=subnet-xxxxx,subnet-xxxxx 
--vpc-public-subnets=subnet-xxxxx,subnet-xxxxx 
--asg-access 
--nodegroup-name linux-workers 
--node-type t3.small 
--node-volume-size 20 
--ssh-public-key wwwwwwww 
--nodes 1 
--nodes-min 1 
--nodes-max 2 
--node-ami auto 
--node-private-networking

کسی موجودہ VPC پر تعینات کرنے کے لیے، صرف اپنے ذیلی نیٹ کی آئی ڈی کی وضاحت کریں، اور eksctl خود VPC کا تعین کرے گا۔

اس بات کو یقینی بنانے کے لیے کہ آپ کے ورکر نوڈس صرف نجی سب نیٹ پر تعینات ہیں، آپ کو نوڈ گروپ کے لیے --node-private-networking کی وضاحت کرنے کی ضرورت ہے۔

2. ہم اپنے کلسٹر میں vpc-controller انسٹال کرتے ہیں، جو پھر ہمارے ورکر نوڈس پر کارروائی کرے گا، مفت IP پتوں کی تعداد کے ساتھ ساتھ مثال کے طور پر ENIs کی تعداد، ان کو شامل اور ہٹائے گا۔

eksctl utils install-vpc-controllers --name yyy --approve

3. آپ کے سسٹم کنٹینرز کے آپ کے لینکس ورکر نوڈ پر کامیابی کے ساتھ لانچ ہونے کے بعد، بشمول vpc-controller، باقی صرف ونڈوز ورکرز کے ساتھ ایک اور نوڈ گروپ بنانا ہے۔

eksctl create nodegroup 
--region www 
--cluster yyy 
--version 1.14 
--name windows-workers 
--node-type t3.small 
--ssh-public-key wwwwwwwwww 
--nodes 1 
--nodes-min 1 
--nodes-max 2 
--node-ami-family WindowsServer2019CoreContainer 
--node-ami ami-0573336fc96252d05 
--node-private-networking

آپ کے نوڈ کے کامیابی کے ساتھ آپ کے کلسٹر سے جڑ جانے کے بعد اور سب کچھ ٹھیک لگنے کے بعد، یہ تیار حالت میں ہے، لیکن نہیں۔

وی پی سی کنٹرولر میں خرابی۔

اگر ہم ونڈوز ورکر نوڈ پر پوڈ چلانے کی کوشش کرتے ہیں تو ہمیں خرابی ملے گی:

NetworkPlugin cni failed to teardown pod "windows-server-iis-7dcfc7c79b-4z4v7_default" network: failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address]

اگر ہم گہرائی میں دیکھیں تو ہم دیکھتے ہیں کہ AWS میں ہماری مثال اس طرح نظر آتی ہے:

GA میں Amazon EKS ونڈوز میں کیڑے ہیں، لیکن یہ سب سے تیز ہے۔

اور یہ اس طرح ہونا چاہئے:

GA میں Amazon EKS ونڈوز میں کیڑے ہیں، لیکن یہ سب سے تیز ہے۔

اس سے یہ واضح ہوتا ہے کہ vpc-controller نے کسی وجہ سے اپنا حصہ پورا نہیں کیا اور مثال میں نئے IP ایڈریس شامل نہیں کر سکا تاکہ پوڈز انہیں استعمال کر سکیں۔

آئیے وی پی سی-کنٹرولر پوڈ کے لاگز کو دیکھیں اور یہ وہی ہے جو ہم دیکھتے ہیں:

کیوبیکٹل لاگ -n کیوب سسٹم

I1011 06:32:03.910140       1 watcher.go:178] Node watcher processing node ip-10-xxx.ap-xxx.compute.internal.
I1011 06:32:03.910162       1 manager.go:109] Node manager adding node ip-10-xxx.ap-xxx.compute.internal with instanceID i-088xxxxx.
I1011 06:32:03.915238       1 watcher.go:238] Node watcher processing update on node ip-10-xxx.ap-xxx.compute.internal.
E1011 06:32:08.200423       1 manager.go:126] Node manager failed to get resource vpc.amazonaws.com/CIDRBlock  pool on node ip-10-xxx.ap-xxx.compute.internal: failed to find the route table for subnet subnet-0xxxx
E1011 06:32:08.201211       1 watcher.go:183] Node watcher failed to add node ip-10-xxx.ap-xxx.compute.internal: failed to find the route table for subnet subnet-0xxx
I1011 06:32:08.201229       1 watcher.go:259] Node watcher adding key ip-10-xxx.ap-xxx.compute.internal (0): failed to find the route table for subnet subnet-0xxxx
I1011 06:32:08.201302       1 manager.go:173] Node manager updating node ip-10-xxx.ap-xxx.compute.internal.
E1011 06:32:08.201313       1 watcher.go:242] Node watcher failed to update node ip-10-xxx.ap-xxx.compute.internal: node manager: failed to find node ip-10-xxx.ap-xxx.compute.internal.

گوگل پر تلاش کرنے سے کچھ حاصل نہیں ہوا، کیونکہ بظاہر ابھی تک کسی نے بھی ایسا بگ نہیں پکڑا تھا، یا اس پر کوئی ایشو پوسٹ نہیں کیا تھا، اس لیے مجھے پہلے آپشنز کے بارے میں سوچنا پڑا۔ پہلی چیز جو ذہن میں آئی وہ یہ تھی کہ شاید vpc-controller ip-10-xxx.ap-xxx.compute.internal کو حل نہیں کر سکتا اور اس تک نہیں پہنچ سکتا اور اس وجہ سے غلطیاں ہوتی ہیں۔

ہاں، واقعی، ہم VPC میں اپنی مرضی کے DNS سرورز استعمال کرتے ہیں اور اصولی طور پر، ہم Amazon والے استعمال نہیں کرتے، اس لیے اس ap-xxx.compute.internal ڈومین کے لیے فارورڈنگ کو بھی کنفیگر نہیں کیا گیا تھا۔ میں نے اس آپشن کا تجربہ کیا، اور اس سے کوئی نتیجہ نہیں نکلا، شاید ٹیسٹ صاف نہیں تھا، اور اسی لیے، آگے تک، جب تکنیکی مدد کے ساتھ بات چیت کی، میں ان کے خیال سے دستبردار ہوگیا۔

چونکہ وہاں واقعی کوئی آئیڈیا نہیں تھا، اس لیے تمام سیکیورٹی گروپ خود eksctl نے بنائے تھے، اس لیے ان کی سروس ایبلٹی میں کوئی شک نہیں، روٹ ٹیبلز بھی درست تھے، نیٹ، ڈی این ایس، ورکر نوڈس کے ساتھ انٹرنیٹ کی سہولت بھی موجود تھی۔

مزید برآں، اگر آپ —node-private-networking استعمال کیے بغیر کسی ورکر نوڈ کو پبلک سب نیٹ پر تعینات کرتے ہیں، تو اس نوڈ کو فوری طور پر vpc-controller کے ذریعے اپ ڈیٹ کر دیا گیا تھا اور ہر چیز گھڑی کے کام کی طرح کام کرتی تھی۔

دو اختیارات تھے:

  1. اسے چھوڑ دیں اور اس وقت تک انتظار کریں جب تک کہ کوئی AWS میں اس مسئلے کی وضاحت نہیں کرتا اور وہ اسے ٹھیک کر دیتے ہیں، اور پھر آپ AWS EKS ونڈوز کو محفوظ طریقے سے استعمال کر سکتے ہیں، کیونکہ وہ ابھی GA میں ریلیز ہوئے ہیں (اس مضمون کو لکھتے وقت 8 دن گزر چکے ہیں)، بہت سے لوگ شاید میرے جیسا راستہ اختیار کرو۔
  2. AWS سپورٹ کو لکھیں اور انہیں ہر جگہ سے لاگوں کے پورے گروپ کے ساتھ مسئلہ کا نچوڑ بتائیں اور انہیں ثابت کریں کہ آپ کے VPC اور سب نیٹس کا استعمال کرتے وقت ان کی سروس کام نہیں کرتی ہے، یہ کچھ بھی نہیں ہے کہ ہمارے پاس بزنس سپورٹ ہے، آپ کو استعمال کرنا چاہئے۔ یہ کم از کم ایک بار :)

AWS انجینئرز کے ساتھ مواصلت

پورٹل پر ٹکٹ بنانے کے بعد، میں نے غلطی سے مجھے ویب - ای میل یا سپورٹ سینٹر کے ذریعے جواب دینے کا انتخاب کیا، اس آپشن کے ذریعے وہ آپ کو کچھ دنوں کے بعد بالکل بھی جواب دے سکتے ہیں، اس حقیقت کے باوجود کہ میرے ٹکٹ میں سیوریٹی - سسٹم خراب تھا، جو مطلب <12 گھنٹے کے اندر جواب، اور چونکہ بزنس سپورٹ پلان کو 24/7 سپورٹ حاصل ہے، اس لیے مجھے بہترین کی امید تھی، لیکن یہ ہمیشہ کی طرح نکلا۔

میرا ٹکٹ جمعہ سے پیر تک غیر تفویض چھوڑ دیا گیا تھا، پھر میں نے انہیں دوبارہ لکھنے کا فیصلہ کیا اور چیٹ کے جواب کا اختیار منتخب کیا۔ تھوڑی دیر انتظار کرنے کے بعد، ہرشد مادھو کو مجھ سے ملنے کے لیے مقرر کیا گیا، اور پھر شروع ہوا...

ہم نے لگاتار 3 گھنٹے تک اس کے ساتھ آن لائن ڈیبگ کیا، لاگز کو منتقل کیا، اسی کلسٹر کو AWS لیبارٹری میں تعینات کیا تاکہ مسئلہ کی تقلید کی جا سکے، اپنی طرف سے کلسٹر کو دوبارہ بنانا، اور اسی طرح، ہمارے پاس صرف ایک چیز آئی ہے لاگز سے یہ واضح تھا کہ ریزول AWS کے اندرونی ڈومین ناموں پر کام نہیں کر رہا تھا، جس کے بارے میں میں نے اوپر لکھا تھا، اور ہرشد مادھو نے مجھ سے فارورڈنگ بنانے کے لیے کہا، مبینہ طور پر ہم کسٹم DNS استعمال کرتے ہیں اور یہ ایک مسئلہ ہو سکتا ہے۔

فارورڈنگ

ap-xxx.compute.internal  -> 10.x.x.2 (VPC CIDRBlock)
amazonaws.com -> 10.x.x.2 (VPC CIDRBlock)

ایسا ہی کیا گیا، دن ختم ہو گیا، ہرشد مادھو نے اسے چیک کرنے کے لیے واپس لکھا اور اسے کام کرنا چاہیے، لیکن نہیں، اس قرارداد سے کوئی فائدہ نہیں ہوا۔

اس کے بعد 2 اور انجینئرز کے ساتھ بات چیت ہوئی، ایک تو بس چیٹ سے باہر ہو گیا، بظاہر وہ ایک پیچیدہ کیس سے ڈرتا تھا، دوسرے نے میرا دن دوبارہ ڈیبگ کرنے، لاگ بھیجنے، دونوں طرف کلسٹر بنانے کے پورے چکر میں گزارا۔ آخر میں اس نے ٹھیک کہا، یہ میرے لیے کام کرتا ہے، میں یہاں ہوں میں سب کچھ مرحلہ وار سرکاری دستاویزات میں کرتا ہوں اور آپ اور آپ کامیاب ہوں گے۔

جس پر میں نے شائستگی سے اس سے کہا کہ وہ چلے جائیں اور کسی اور کو میرا ٹکٹ تفویض کریں اگر آپ نہیں جانتے کہ مسئلہ کہاں تلاش کرنا ہے۔

ختم

تیسرے دن، ایک نئے انجینئر ارون بی کو میرے سپرد کیا گیا، اور ان کے ساتھ بات چیت کے آغاز سے ہی یہ فوری طور پر واضح ہو گیا کہ یہ 3 پچھلے انجینئر نہیں تھے۔ اس نے پوری تاریخ پڑھی اور فوری طور پر پی ایس 1 پر اپنی اسکرپٹ کا استعمال کرتے ہوئے لاگز جمع کرنے کو کہا، جو اس کے گیتھب پر تھا۔ اس کے بعد کلسٹرز بنانے، کمانڈ کے نتائج نکالنے، لاگز اکٹھے کرنے کے تمام اعادے ہوئے، لیکن ارون بی مجھ سے پوچھے گئے سوالات کے مطابق درست سمت میں آگے بڑھ رہے تھے۔

ہم ان کے vpc-controller میں -stderrthreshold=debug کو فعال کرنے کے مقام پر کب پہنچے، اور آگے کیا ہوا؟ یقیناً یہ کام نہیں کرتا) پوڈ صرف اس آپشن سے شروع نہیں ہوتا، صرف -stderrthreshold=info کام کرتا ہے۔

ہم نے یہاں ختم کیا اور ارون بی نے کہا کہ وہ اسی غلطی کو حاصل کرنے کے لیے میرے اقدامات کو دوبارہ پیش کرنے کی کوشش کریں گے۔ اگلے دن مجھے ارون بی کی طرف سے جواب موصول ہوا، اس نے اس معاملے کو ترک نہیں کیا، بلکہ اپنے vpc-کنٹرولر کا ریویو کوڈ لیا اور وہ جگہ تلاش کی جہاں یہ ہے اور یہ کیوں کام نہیں کرتا:

GA میں Amazon EKS ونڈوز میں کیڑے ہیں، لیکن یہ سب سے تیز ہے۔

اس طرح، اگر آپ اپنے VPC میں مین روٹ ٹیبل استعمال کرتے ہیں، تو پہلے سے طے شدہ طور پر اس میں ضروری سب نیٹس کے ساتھ ایسوسی ایشن نہیں ہوتی ہے، جو vpc-controller کے لیے بہت ضروری ہے، عوامی سب نیٹ کی صورت میں، اس میں اپنی مرضی کے مطابق روٹ ٹیبل ہوتا ہے۔ جس کی ایک انجمن ہے۔

مین روٹ ٹیبل کے لیے ضروری سب نیٹس کے ساتھ دستی طور پر ایسوسی ایشنز کو شامل کرکے، اور نوڈ گروپ کو دوبارہ بنانے سے، سب کچھ بالکل ٹھیک کام کرتا ہے۔

مجھے امید ہے کہ ارون بی واقعی اس مسئلے کی اطلاع EKS ڈویلپرز کو دیں گے اور ہم vpc-controller کا ایک نیا ورژن دیکھیں گے جہاں ہر چیز باکس سے باہر کام کرے گی۔ فی الحال تازہ ترین ورژن ہے: 602401143452.dkr.ecr.ap-southeast-1.amazonaws.com/eks/vpc-resource-controller:0.2.1
یہ مسئلہ ہے؟

ہر ایک کا شکریہ جنہوں نے آخر تک پڑھا، عمل درآمد سے پہلے ہر اس چیز کی جانچ کریں جو آپ پیداوار میں استعمال کرنے جا رہے ہیں۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں