Kubernetes Deployments बनाम StatefulSets


110

मैं कुबेरनेट्स पर बहुत खुदाई कर रहा हूं, और मुझे वह पसंद आ रहा है जिसे मैं बहुत कुछ देखता हूं! एक बात मैं इस बारे में स्पष्ट विचार नहीं कर पा रहा हूं कि तैनाती और स्टेटफुलसेट संसाधनों के बीच सटीक अंतर क्या हैं और आप किस परिदृश्य में प्रत्येक का उपयोग करेंगे (या आम तौर पर एक दूसरे पर पसंद किया जाता है)।

कोई भी अनुभव जो लोग साझा कर सकते हैं वह भयानक होगा !!

जवाबों:


113

तैनाती और प्रतिकृतिकंट्रोलर स्टेटलेस उपयोग के लिए होते हैं और हल्के होते हैं। स्टेटफुलसेट्स का उपयोग तब किया जाता है जब राज्य को जारी रखना पड़ता है। इसलिए उत्तरार्द्ध उपयोग volumeClaimTemplates/ लगातार संस्करणों पर दावा करता है कि वे राज्य को घटक पुनरारंभ के रूप में रख सकते हैं।

तो अगर आपका आवेदन स्टेटफुल है या आप कुबेरनेट्स के शीर्ष पर स्टेटफुल स्टोरेज को तैनात करना चाहते हैं तो स्टेटफुलसेट का उपयोग करें।

यदि आपका एप्लिकेशन स्टेटलेस है या यदि स्टेट स्टार्ट के दौरान बैकएंड-सिस्टम से बनाया जा सकता है तो डिप्लॉयमेंट का उपयोग करें।

स्टेटफुल एप्लिकेशन को चलाने के बारे में और अधिक विवरण 2016 के स्टेटर्न एप्लिकेशन के बारे में कुबेरनेट्स ब्लॉग प्रविष्टि में पाए जा सकते हैं


16
मैं एक तैनाती की पॉड्स को लगातार वॉल्यूम दावों के साथ जोड़ सकता हूं और सुरक्षित रह सकता हूं।
टॉर्स्टन ब्रॉन्जर

9
@TorstenBronger मैं सहमत हूँ - किस बिंदु पर हम मूल प्रश्न पर वापस आते हैं कि स्टेटफुलसेट्स का बिंदु क्या है?
२०:०२ पर एचडीवे

6
@ एचडीव गतिशील गतिशील संस्करणों और तेजी से विकासशील भंडारण प्रदाताओं (जैसे पोर्टवर्क्स, ओपेन ईबीएस) के साथ, डेटा दृढ़ता मुद्दा हल किया जा सकता है, लेकिन नामकरण और स्टार्टअप / अपग्रेड ऑर्डर स्टेटफुलसेट के साथ अभी भी अलग है, उन ऐप्स के लिए अनुमति देता है जिन्हें मास्टर या स्लेव या अन्य सेटअप की आवश्यकता होती है ठीक से एक क्लस्टर बनाएं। हालांकि मैं मानता हूं कि शायद यह सब deployment1-नोड (डेमोंसेट), प्रतिकृतियां, या स्टेटफुल ऑर्डरिंग को सेट करने के लिए एक साधारण कल्पना के साथ एक ही कॉन्फ़िगरेशन में तह किया जा सकता है ।
मणि गंधम

4
"स्टार्टअप / अपग्रेड ऑर्डर" को महसूस करना महत्वपूर्ण है, पॉड प्रतिकृतियां (यानी 1, 2, 3 ...) के बारे में - अलग-अलग पॉड्स (यानी वेब, एसआरवी, डीबी, आदि) नहीं। एक और तरीका रखो, यह docker- रचना निर्भरता के लिए एक प्रतिस्थापन नहीं है।
एचडीवेट

72
  • परिनियोजन - आप एक निरंतर स्थिरांक निर्दिष्ट करते हैं जो सभी पॉड प्रतिकृतियों द्वारा साझा किया जाता है। दूसरे शब्दों में, साझा मात्रा।

    यदि आपके पास एक से अधिक प्रतिकृति पॉड हैं, तो बैकिंग स्टोरेज में ReadWriteMany या ReadOnlyMany का उपयोग करना आवश्यक है ।

  • स्टेटफुलसेट - आप एक वॉल्यूम-वर्णक निर्दिष्ट करते हैं, ताकि प्रत्येक प्रतिकृति पॉड को इससे संबंधित एक अद्वितीय PersistentVolumeClaim मिल सके । दूसरे शब्दों में, कोई साझा मात्रा नहीं।

    इधर, समर्थन भंडारण हो सकता है ReadWriteOnce accessMode।

    स्टेटफुलसेट क्लस्टर जैसे चीज़ों को चलाने के लिए उपयोगी है जैसे कि हडोप क्लस्टर, MySQL क्लस्टर, जहाँ प्रत्येक नोड का अपना भंडारण होता है।


23

टी एल; डॉ

तैनाती एक सांविधिक अनुप्रयोग को तैनात करने के लिए एक संसाधन है, अगर एक पीवीसी का उपयोग करते हुए, सभी प्रतिकृतियां एक ही वॉल्यूम का उपयोग कर रही होंगी और इसमें से किसी का भी अपना राज्य नहीं होगा।

स्टेटफुलसेट का उपयोग स्टेटफुल एप्लिकेशन के लिए किया जाता है, पॉड की प्रत्येक प्रतिकृति का अपना राज्य होगा, और अपने स्वयं के वॉल्यूम का उपयोग किया जाएगा।

DaemonSet एक नियंत्रक है जो यह सुनिश्चित करता है कि फली क्लस्टर के सभी नोड्स पर चलती है। यदि नोड को क्लस्टर से जोड़ा / हटा दिया जाता है, तो डेमनसेट स्वचालित रूप से पॉड को जोड़ता / हटाता है।

मैंने डिप्लॉयमेंट्स, स्टेटफुलसेट्स और डेमोंसेट्स के बीच विस्तृत अंतर के बारे में लिखा है, और इन संसाधन K8s का उपयोग करके एक नमूना एप्लिकेशन को कैसे तैनात किया जाए: स्टेटमेंट्स बनाम स्टेटफुलसेट्स बनाम डेमनसेट्स


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

14

StatefulSet

स्टेटफुल डिस्ट्रिब्यूटेड एप्लीकेशंस के साथ 'स्टेटफुलसेट' का प्रयोग करें, जिसके लिए प्रत्येक नोड को एक स्थिर स्थिति की आवश्यकता होती है । स्टेटफुलसेट एक स्टेटफुल एप्लिकेशन / कंपोनेंट के लिए, एक कॉन्फ़िगरेशन (प्रतिकृतियां = एन) के माध्यम से, नोड्स की एक मनमानी संख्या को कॉन्फ़िगर करने की क्षमता प्रदान करता है।

दो प्रकार के स्टेटफुल डिस्ट्रिब्यूटेड एप्लिकेशन हैं: मास्टर-मास्टर और मास्टर-स्लेव। मास्टर-मास्टर कॉन्फ़िगरेशन में सभी नोड्स और मास्टर-स्लेव कॉन्फ़िगरेशन में दास नोड्स एक स्टेटफुलसेट का उपयोग कर सकते हैं।
उदाहरण:
मास्‍टर-स्‍लेव -> हाडूप क्‍लस्‍टर में डेटानॉड्स (गुलाम)
मास्‍टर-मास्‍टर -> कैसन्‍डा क्‍लस्‍टर में डेटाबेस नोड्स (मास्‍टर-मास्‍टर)

स्टेटफुलसेट में प्रत्येक पॉड (प्रतिकृति / नोड) की एक विशिष्ट और स्थिर नेटवर्क पहचान है। उदाहरण के लिए एक कैसेंड्रा स्टेटफुलसेट में नाम के रूप में 'कैसेंड्रा' और एन के रूप में प्रतिकृति नोड्स की संख्या, प्रत्येक कैसेंड्रा पॉड (नोड) में है:

  • प्रत्येक फली के लिए साधारण सूचकांक: 0,1, .., एन -1
  • स्थिर नेटवर्क आईडी: कैसेंड्रा -०, कैसेंड्रा -1, .., कैसेंड्रा-एन -1
  • प्रत्येक पॉड के लिए एक अलग क्लेमेंट वॉल्यूम वॉल्यूम टेम्प्लेट के विरुद्ध अर्थात प्रत्येक पॉड (नोड) के लिए एक अलग स्टोरेज
  • फली को 0 से N-1 के क्रम में बनाया जाता है और रिवर्स ऑर्डर N-1 से 0 में समाप्त किया जाता है

देखें: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

तैनाती

दूसरी ओर 'परिनियोजन' स्टेटलेस एप्लिकेशन / सेवाओं के लिए उपयुक्त है जहाँ नोड्स को किसी विशेष पहचान की आवश्यकता नहीं है। एक लोड बैलेंसर किसी भी नोड तक पहुंच सकता है जिसे वह चुनता है। सभी नोड समान हैं। एक कॉन्फ़िगरेशन (प्रतिकृतियां = एन) के माध्यम से किसी भी संख्या में मनमाना नोड्स बनाने के लिए परिनियोजन उपयोगी है।


7

स्टेटफुलसेट और तैनाती के बीच का अंतर

स्टेटफुलसेट एक विशेष तैनाती के बराबर है। स्टेटफुलसेट में प्रत्येक पॉड में एक स्थिर, अद्वितीय नेटवर्क पहचानकर्ता होता है जिसका उपयोग क्लस्टर में अन्य सदस्यों को खोजने के लिए किया जा सकता है। यदि स्टेटफुलसेट का नाम काफ्का है, तो पहले पॉड को काफ्का -०, दूसरा काफ्का -1 कहा जाता है; स्टेटफुलसेट द्वारा नियंत्रित पॉड कॉपी की शुरुआत और रोक अनुक्रम को नियंत्रित किया जाता है। जब एनटी पॉड का संचालन किया जाता है, तो पहले एन -1 पॉड पहले से ही चल रहे हैं और अच्छी स्थिति तैयार है; स्टेटफुलसेट में पॉड एक स्थिर लगातार स्टोरेज वॉल्यूम का उपयोग करता है, जिसे पीवी या पीवीसी द्वारा कार्यान्वित किया जाता है। फली को हटाते समय, स्टेटफुलसेट से जुड़े भंडारण की मात्रा डिफ़ॉल्ट रूप से (डेटा सुरक्षा के लिए) नहीं हटाई जाती है; स्टेटफुलसेट पीवी वॉल्यूम के लिए बाध्य है। पॉड स्टेट डेटा को स्टोर करने के लिए उपयोग किया जाता है, और हेडलेस सेवाओं के साथ संयोजन में भी उपयोग किया जाता है, जो उस हेडलेस सेवा से संबंधित है;

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