ڪبرنيٽس ۾ پوڊ جي ترجيحات ڪيئن گرافانا ليبز ۾ وقت جي گھٽتائي جو سبب بڻيون

نوٽ. ترجمو: اسان توهان جي توجه لاءِ پيش ڪريون ٿا فني تفصيلن جي سببن جي باري ۾ جيڪي ڪلائوڊ سروس ۾ تازو بند ٿيڻ جي سببن جي باري ۾ جيڪي گرافانا جي تخليق ڪندڙن پاران برقرار رکيا ويا آهن. هي هڪ شاندار مثال آهي ته ڪيئن هڪ نئين ۽ بظاهر انتهائي مفيد خصوصيت جيڪا بنيادي ڍانچي جي معيار کي بهتر بڻائڻ لاءِ ٺاهي وئي آهي... نقصان پهچائي سگهي ٿي جيڪڏهن توهان پيداوار جي حقيقتن ۾ ان جي استعمال جي ڪيترن ئي نونسن لاءِ مهيا نه ڪيو. اهو تمام سٺو آهي جڏهن هن جهڙو مواد ظاهر ٿئي ٿو جيڪو توهان کي نه صرف توهان جي غلطين مان سکڻ جي اجازت ڏئي ٿو. تفصيلات هن متن جي ترجمي ۾ آهن پراڊڪٽ جي نائب صدر کان Grafana Labs.

ڪبرنيٽس ۾ پوڊ جي ترجيحن جو سبب گرافانا ليبز ۾ وقت ختم ٿي ويو

جمعه، جولاءِ 19 تي، گرافانا ڪلائوڊ ۾ ميزباني ڪيل پروميٿيس سروس لڳ ڀڳ 30 منٽن لاءِ ڪم ڪرڻ بند ٿي وئي. آئون بندش کان متاثر سڀني گراهڪن کان معافي وٺان ٿو. اسان جو ڪم آهي مانيٽرنگ ٽولز مهيا ڪرڻ جنهن جي توهان کي ضرورت آهي، ۽ اسان سمجهون ٿا ته انهن جو دستياب نه هجڻ توهان جي زندگي وڌيڪ مشڪل بڻائي سگهي ٿي. اسان ان واقعي کي انتهائي سنجيدگي سان ٿا وٺون. هي نوٽ بيان ڪري ٿو ته ڇا ٿيو، اسان ڪيئن جواب ڏنو، ۽ اسان ڇا ڪري رهيا آهيون انهي کي يقيني بڻائڻ لاءِ ته اهو ٻيهر نه ٿئي.

prehistory

Grafana Cloud Hosted Prometheus خدمت تي ٻڌل آهي پرسڪريڪس - CNCF پروجيڪٽ ٺاهڻ لاءِ افقي طور تي اسپيبلبل، انتهائي دستياب، گھڻا نوڪر پروميٿيس سروس. Cortex آرڪيٽيڪچر انفرادي مائڪرو سروسز جي هڪ سيٽ تي مشتمل آهي، جن مان هر هڪ پنهنجي ڪم کي انجام ڏئي ٿو: نقل، اسٽوريج، سوال، وغيره. Cortex فعال ترقي هيٺ آهي ۽ مسلسل نئين خاصيتون شامل ڪري رهيو آهي ۽ ڪارڪردگي بهتر ڪري رهيو آهي. اسان باقاعدگي سان نيون Cortex رليزز کي ڪلسٽرز ۾ ترتيب ڏيون ٿا ته جيئن گراهڪ انهن خاصيتن مان فائدو وٺي سگهن - خوش قسمتي سان، Cortex بغير وقت جي اپڊيٽ ٿي سگهي ٿو.

بيحد تازه ڪارين لاءِ، Ingester Cortex سروس کي اپڊيٽ جي عمل دوران اضافي Ingester نقل جي ضرورت آھي. (نوٽ. ترجمو: انجيسٽر - Cortex جو بنيادي حصو. ان جو ڪم آهي نمونن جو مسلسل وهڪرو گڏ ڪرڻ، انهن کي پروميٿيوس جي ٽڪرن ۾ گروپ ڪرڻ ۽ انهن کي ڊيٽابيس ۾ ذخيرو ڪرڻ جهڙوڪ DynamoDB، BigTable يا Cassandra.) هي اجازت ڏئي ٿو پراڻن انجيسٽرن کي موجوده ڊيٽا کي نئين انجيسٽرز ڏانهن اڳتي وڌائڻ لاءِ. اها ڳالهه نوٽ ڪرڻ جي قابل آهي ته Ingesters وسيلن جي گهرج آهي. انھن کي ڪم ڪرڻ لاءِ، توھان کي 4 ڪور ۽ 15 GB ميموري في پوڊ جي ضرورت آھي، يعني. اسان جي ڪبرنيٽس ڪلستر جي صورت ۾ بنيادي مشين جي پروسيسنگ پاور ۽ ياداشت جو 25٪. عام طور تي، اسان وٽ عام طور تي 4 ڪور ۽ 15 GB جي ميموري کان ڪلستر ۾ تمام گهڻو وڌيڪ غير استعمال ٿيل وسيلا آهن، تنهن ڪري اسان آساني سان اپ گريڊ دوران انهن اضافي انجينرز کي اسپن ڪري سگهون ٿا.

بهرحال، اهو اڪثر ٿئي ٿو ته عام آپريشن دوران مشينن مان ڪنهن به نه آهي 25٪ غير استعمال ٿيل وسيلن جو. ها، اسان اڃا به ڪوشش نه ڪندا آهيون: سي پي يو ۽ ميموري هميشه ٻين عملن لاء ڪارائتو هوندا. هن مسئلي کي حل ڪرڻ لاء، اسان کي استعمال ڪرڻ جو فيصلو ڪيو ڪبرنيٽس پوڊ ترجيحات. خيال اهو آهي ته Ingesters کي ٻين (بي رياست) مائڪرو سروسز جي ڀيٽ ۾ اعلي ترجيح ڏني وڃي. جڏهن اسان کي هڪ اضافي (N+1) Ingester هلائڻ جي ضرورت آهي، اسان عارضي طور تي ٻين، ننڍن پوڊن کي مٽائي ڇڏيندا آهيون. اهي پوڊس ٻين مشينن تي مفت وسيلن ڏانهن منتقل ڪيا ويا آهن، هڪ وڏو ڪافي ”سوراخ“ ڇڏي وڃي ٿو اضافي انجيسٽر کي هلائڻ لاءِ.

خميس، جولاءِ 18 تي، اسان چار نوان ترجيحي سطحون اسان جي ڪلسٽرن ۾ شامل ڪيون: تنقيدي, اعلي, سراسري طور и گهٽ. انهن کي هڪ اندروني ڪلستر تي آزمايو ويو جنهن ۾ ڪلائنٽ ٽرئفڪ نه هئي اٽڪل هڪ هفتي لاءِ. ڊفالٽ طور، پوڊ بغير ڪنهن مخصوص ترجيح حاصل ڪئي سراسري طور priority, class مقرر ڪيو ويو ingesters with with اعلي ترجيح. نازڪ مانيٽرنگ لاءِ مخصوص ڪيو ويو (Prometheus, Alertmanager, node-exporter, kube-state-metrics, etc.). اسان جي ترتيب کليل آهي، ۽ توهان PR ڏسي سگهو ٿا هتي.

حادثو

جمعه، 19 جولاء تي، انجنيئرن مان هڪ هڪ وڏي ڪلائنٽ لاء هڪ نئون وقف ڪيل Cortex ڪلستر شروع ڪيو. هن ڪلستر جي ترتيب ۾ نئين پوڊ ترجيحات شامل نه هئي، تنهنڪري سڀني نون پوڊز کي ڊفالٽ ترجيح ڏني وئي - سراسري طور.

ڪبرنيٽس ڪلستر وٽ نئين Cortex ڪلستر لاءِ ڪافي وسيلا نه هئا، ۽ موجوده پيداوار Cortex ڪلستر کي اپڊيٽ نه ڪيو ويو (Ingesters کان سواءِ رهجي ويا اعليٰ ترجيح). جيئن ته نئين ڪلستر جي Ingesters ڊفالٽ طور تي هئي سراسري طور priority، ۽ پيداوار ۾ موجود پوڊس بغير ڪنهن ترجيح جي ڪم ڪيو، نئين ڪلستر جي Ingesters موجوده Cortex پيداوار ڪلستر مان Ingesters کي تبديل ڪيو.

پروڊڪشن ڪلسٽر ۾ بي دخل ٿيل انجيسٽر لاءِ ReplicaSet بي دخل ٿيل پوڊ کي ڳولي ورتو ۽ نقل جي مخصوص تعداد کي برقرار رکڻ لاءِ نئون ٺاھيو. نئون پوڊ ڊفالٽ طور مقرر ڪيو ويو سراسري طور ترجيح، ۽ ٻيو "پراڻو" انجيسٽر پيداوار ۾ ان جي وسيلن کي وڃائي ڇڏيو. نتيجو اهو نڪتو برفاني طوفان جو عمل، جنهن جي نتيجي ۾ Cortex پيداوار جي ڪلستر لاء Ingester مان سڀني پوڊ جي بي گھرڻ جو سبب بڻيو.

Ingesters رياستي آهن ۽ گذريل 12 ڪلاڪن لاء ڊيٽا ذخيرو. هي اسان کي اجازت ڏئي ٿو ته انهن کي وڌيڪ موثر طريقي سان دٻائڻ کان پهريان انهن کي ڊگھي مدت واري اسٽوريج تي لکڻ. هن کي حاصل ڪرڻ لاءِ، Cortex ڊيٽا کي شارڊ ڪري ٿو سيريز ۾ ڊسٽريبيوٽيڊ هيش ٽيبل (DHT) استعمال ڪندي ۽ هر سيريز کي نقل ڪري ٿو ٽن انجيسٽرن جي وچ ۾ Dynamo طرز جي ڪورم مستقل مزاجي کي استعمال ڪندي. Cortex انگن اکرن کي ڊيٽا نه لکندو آهي جيڪي معذور آهن. اهڙيء طرح، جڏهن Ingesters جو هڪ وڏو تعداد DHT کي ڇڏي، Cortex داخلن جي ڪافي نقل مهيا نه ڪري سگهي ٿي، ۽ اهي حادثا.

تشخيص ۽ علاج

نئين Prometheus اطلاعن جي بنياد تي "غلطي بجيٽ" (غلطي تي ٻڌل بجيٽ - تفصيل مستقبل جي آرٽيڪل ۾ ظاهر ٿيندا) بند ٿيڻ جي شروعات کان 4 منٽن کان پوءِ الارم وڄائڻ شروع ڪيو. ايندڙ پنجن منٽن يا ان کان پوء، اسان ڪجهه تشخيص کي هلائي ڇڏيو ۽ نئين ۽ موجوده پيداوار ڪلستر ٻنهي کي ميزباني ڪرڻ لاء هيٺيون ڪبرنيٽس ڪلستر کي وڌايو.

پنجن منٽن کان پوءِ، پراڻن انجيسٽرن ڪاميابيءَ سان پنهنجو ڊيٽا لکيو، نوان شروع ٿيا، ۽ Cortex ڪلستر ٻيهر دستياب ٿي ويا.

Cortex جي سامهون واقع تصديق واري ريورس پراڪسز مان آئوٽ آف ميموري (OOM) غلطين جي تشخيص ۽ درست ڪرڻ ۾ ٻيا 10 منٽ خرچ ڪيا ويا. OOM غلطيون QPS ۾ ڏهه گنا واڌ جي سبب ٿي ويون (اسان يقين رکون ٿا ته ڪلائنٽ جي پروميٿيوس سرورز کان وڌيڪ جارحتي درخواستن جي ڪري).

نتيجو

مجموعي بند وقت 26 منٽ هو. ڪو به ڊيٽا گم ٿي ويو. Ingesters ڪاميابيءَ سان سڀني ميموري ڊيٽا کي ڊگھي مدت واري اسٽوريج ۾ لوڊ ڪري ڇڏيو آهي. بند ٿيڻ دوران، ڪلائنٽ پروميٿيوس سرورز بفر ٿي ويا (ريموٽ) رڪارڊنگ استعمال ڪندي نئون API remote_write WAL جي بنياد تي (لکيل ڪالم اسٽيان Grafana Labs کان) ۽ حادثي کان پوءِ ناڪام لکڻين کي ورجايو.

ڪبرنيٽس ۾ پوڊ جي ترجيحن جو سبب گرافانا ليبز ۾ وقت ختم ٿي ويو
پيداوار ڪلستر لکڻ جي آپريشن

پهچڻ

ان واقعي مان سبق سکڻ ضروري آهي ۽ ان جي ٻيهر ٿيڻ کان بچڻ لاءِ ضروري قدم کڻڻ گهرجن.

نظر ۾، اسان کي ڊفالٽ مقرر نه ڪرڻ گهرجي سراسري طور ترجيح جيستائين پيداوار ۾ سڀني انجينرز کي حاصل نه ڪيو وڃي اعلي هڪ ترجيح. ان کان سواء، ان کي اڳواٽ ۾ خيال رکڻ ضروري هو اعليٰ ترجيح. هاڻي سڀ ڪجهه ٺيڪ آهي. اسان کي اميد آهي ته اسان جو تجربو ٻين تنظيمن جي مدد ڪندو ڪبرنيٽس ۾ پوڊ ترجيحن کي استعمال ڪرڻ تي غور ڪندي.

اسان ڪنهن به اضافي شين جي ترتيب تي ڪنٽرول جي اضافي سطح شامل ڪنداسين جن جون ترتيبون ڪلستر ۾ عالمي آهن. هاڻي کان، اهڙين تبديلين جو جائزو ورتو ويندو بоوڌيڪ ماڻهو. اضافي طور تي، تبديلي جيڪا حادثي جو سبب بڻيل هئي هڪ الڳ پروجيڪٽ دستاويزن لاء تمام معمولي سمجهي ويندي هئي - اهو صرف GitHub مسئلي ۾ بحث ڪيو ويو هو. ھاڻي کان، configs ۾ اھڙيون سڀ تبديليون مناسب پروجيڪٽ دستاويزن سان گڏ ھونديون.

آخرڪار، اسان اوورلوڊ OOM کي روڪڻ لاءِ تصديق واري ريورس پراڪسي جي ريسائيزنگ کي خودڪار ڪنداسين، ۽ مستقبل ۾ ساڳئي مسئلن کي روڪڻ لاءِ فال بيڪ ۽ اسڪيلنگ سان لاڳاپيل Prometheus ڊفالٽ سيٽنگن جو جائزو وٺنداسين.

ناڪامي جا ڪجهه مثبت نتيجا پڻ هئا: ضروري وسيلا حاصل ڪرڻ بعد، Cortex خود بخود بغير اضافي مداخلت جي بحال ٿيو. اسان سان گڏ ڪم ڪرڻ جو قيمتي تجربو پڻ حاصل ڪيو گرافانا لوڪي - اسان جو نئون لاگ ايگريگيشن سسٽم - جنهن انهي ڳالهه کي يقيني بڻائڻ ۾ مدد ڪئي ته ناڪامي جي دوران ۽ بعد ۾ سڀني انجسٽرن صحيح طريقي سان ڪم ڪيو.

پي ايس مترجم کان

اسان جي بلاگ تي پڻ پڙهو:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو