सीपीयू के उपयोग और डॉकटर कंटेनर मेट्रिबल्ज़िंग को कुबेरनेट्स


9

हमने हाल ही में अपने प्रोडक्शन के माहौल को कुबेरनेट्स में बदल दिया है। मैं कंटेनरों पर सीपीयू सीमा लागू करना चाहता हूं। मुझे परस्पर विरोधी CPU मेट्रिक्स मिल रहे हैं जो एक साथ फिट नहीं होते हैं। यहाँ मेरा सेटअप है:

  • DataDog एजेंट एक के रूप में चल रहे हैं Daemonset
  • सीपीयू सीमा के बिना चल रहे मौजूदा अनुप्रयोग
  • प्रश्न में कंटेनर रूबी अनुप्रयोगों के बहु-थ्रेडेड हैं
  • दो मैट्रिक्स: kubernetes.cpu.usage.{avg,max}औरdocker.cpu.usage
  • c4.xlarge क्लस्टर नोड्स (4 vCPU या Kubernetes शब्दों में 4000 मी)

kubernetes.cpu.usage.maxप्रश्न में कंटेनरों के लिए रिपोर्ट ~ 600 मी। docker.cpu.usageरिपोर्ट ~ 60% यह निम्नानुसार है कि 1000 मीटर सीपीयू सीमा सामान्य ऑपरेशन के तहत पर्याप्त क्षमता से अधिक होगी।

मैंने 1000 मी की सीमा तय की। तब docker.container.throttlesकाफी ऊपर जाता है kubernetes.cpu.usage.maxऔर docker.cpu.usageवही रहता है। सिस्टम इस समय घुटने के बल गिर गया। इससे मुझे कोई मतलब नहीं है।

मैंने डॉकर आँकड़ों पर शोध किया। ऐसा लगता है कि docker stats(और अंतर्निहित एपीआई) सीपीयू कोर के अनुसार लोड को सामान्य करता है। तो मेरे मामले में, docker.cpu.usage60% (4000m * 0.60) से 2400m तक कुबेरनेट की शर्तों में आता है। हालाँकि यह किसी भी कुबेरनेट संख्या के साथ संबंध नहीं रखता है। मैंने अपनी परिकल्पना का परीक्षण करने के लिए एक और प्रयोग किया कि कुबेरनेट्स संख्या गलत हैं। मैंने 2600 मीटर (कुछ अतिरिक्त हेडरूम के लिए) सीमा निर्धारित की है। यह किसी भी गला घोंटना में परिणाम नहीं हुआ। हालांकि कुबेरनेट्स ने देखा कि सीपीयू का उपयोग नहीं बदला। यह मुझे भ्रमित करता है।

तो मेरे सवाल हैं:

  • क्या यह कुबेरनेट्स में एक बग की तरह महसूस करता है (या स्टैक में कुछ?)
  • क्या मेरी समझ सही है?

मेरा अनुवर्ती प्रश्न रूबी अनुप्रयोगों के लिए सीपीयू को ठीक से निर्धारित करने से संबंधित है। एक कंटेनर प्यूमा का उपयोग करता है। यह एक बहु-थ्रेडेड वेब सर्वर है जिसमें थ्रेड्स की विन्यास योग्य मात्रा है। HTTP अनुरोधों को थ्रेड्स में से एक द्वारा नियंत्रित किया जाता है। थ्रेडेड सर्वर का उपयोग करके दूसरा एप्लिकेशन एक थ्रिफ्ट सर्वर है। प्रत्येक आने वाले टीसीपी कनेक्शन को स्वयं थ्रेड द्वारा नियंत्रित किया जाता है। कनेक्शन बंद होने पर थ्रेड बाहर निकल जाता है। रूबी को जीआईएल (ग्लोबल इंटरप्रेटर लॉक) के रूप में देखा जा सकता है, ताकि एक बार में केवल एक धागा रूबी कोड को निष्पादित कर सके। यह IO को निष्पादित करने वाले कई थ्रेड्स और उस जैसी चीजों के लिए अनुमति देता है।

मुझे लगता है कि सबसे अच्छा तरीका प्रत्येक एप्लिकेशन में चलने वाले थ्रेड्स की संख्या को सीमित करना और थ्रेड्स की संख्या के आधार पर कुबेरनेट्स सीपीयू की सीमाएं लगाना है। प्रक्रियाएँ जाली नहीं हैं इसलिए कुल सीपीयू उपयोग की भविष्यवाणी करना कठिन है।

यहां सवाल यह है कि इन अनुप्रयोगों के लिए सीपीयू के उपयोग और सीमाओं का ठीक से अनुमान कैसे लगाया जाए?


क्या आपने 1cpu नोड और 2 cpu नोड पर यह देखने के लिए प्रयास किया कि संख्या सहसंबंधी (या नहीं) कैसे है?
तेंसिबाई

जवाबों:


4

यहाँ कई चीजें:

  1. AWS ec2 पर Youre, इसलिए जो कुछ भी आप CPU को मापने के लिए अपने इंस्टेंस पर कर रहे हैं, वह CPU को हाइपरविजर लेवल पर कैलकुलेट कर रहा है न कि इंस्टेंस लेवल पर। इसे किसी भी लोड टेस्ट को चलाने के लिए और क्लाउडवॉच में iostat -ct 1 और CPU उपयोग की जाँच करें। क्लाउडवॉच में CPU उपयोग हमेशा iostat की रिपोर्ट की तुलना में 10-20% अधिक होता है और ऐसा इसलिए है क्योंकि iostat हाइपरविजर स्तर पर CPU उपयोग देगा।

  2. के रूप में देखने के लिए कि कैसे kubernetes और docker मेट्रिक्स की तुलना करते हैं, मैं सभी कंटेनर को केवल एक vCPU का उपयोग करने की अनुमति देने के लिए --cpuset = 1 या किसी भी संख्या के साथ कंटेनरों को चलाने का सुझाव देता हूं।

  3. AWS 1 CPU = 2vcpu में भी। यह 2. के लिए हाइपरथ्रेडेड है। आप गणना करते समय इसे ध्यान में रख सकते हैं।

  4. अंत में किसी विशेष एप्लिकेशन के लिए CPU उपयोग को देखने के लिए उपयोग करने के लिए सबसे अच्छा मीट्रिक, अपने क्लाउडवॉच मैट्रिक्स के साथ htop और सहसंबंध का उपयोग करना है।

  5. मैंने यह भी देखा है कि कभी-कभी डॉकॉन डेमॉन खुद को वर्चुअल सीपीयू में से एक में पिन करता है और इसलिए जब आप इसे 1000 मीटर तक कम कर रहे हैं, तो शायद पूरा सेटअप धीमा हो रहा है क्योंकि कमी किसी एक vpcus पर हो रही है। इसका विवरण प्राप्त करने के लिए आप mpstat का उपयोग कर सकते हैं।

  6. अंत में मेजबान स्तर पर आप एक ही सीपीयू को डॉकटर पिन कर सकते हैं और अधिक देख सकते हैं।

आशा है कि यह आपको कुछ हद तक करीब लाता है। यदि आपने पहले ही कोई हल ढूंढ लिया है तो मुझे अपडेट करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.