कुबेरनेट्स के साथ कई वातावरण (मंचन, क्यूए, उत्पादन, आदि)


121

कई वातावरण (क्यूए, स्टेजिंग, प्रोडक्शन, देव, आदि) के प्रबंधन के लिए K8S के साथ एक अच्छा अभ्यास माना जाता है?

एक उदाहरण के रूप में, यह कहें कि एक टीम एक ऐसे उत्पाद पर काम कर रही है जिसमें फ्रंट-एंड एप्लिकेशन के साथ कुछ एपीआई तैनात करने की आवश्यकता होती है। आमतौर पर, इसके लिए कम से कम 2 वातावरण की आवश्यकता होगी:

  • मंचन: ग्राहक को जारी करने से पहले पुनरावृत्तियों / परीक्षण और सत्यापन के लिए
  • उत्पादन: यह ग्राहक के लिए उपयोग किया जाने वाला वातावरण है। स्थिर और अच्छी तरह से जांची जाने वाली विशेषताएं होनी चाहिए।

इसलिए, यह मानते हुए कि टीम कुबेरनेट्स का उपयोग कर रही है, इन वातावरणों की मेजबानी करने के लिए एक अच्छा अभ्यास क्या होगा? अब तक हमने दो विकल्पों पर विचार किया है:

  1. प्रत्येक वातावरण के लिए K8s क्लस्टर का उपयोग करें
  2. केवल एक K8s क्लस्टर का उपयोग करें और उन्हें विभिन्न नामस्थानों में रखें।

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

(2) ऐसा लगता है कि यह बुनियादी ढांचे और परिनियोजन प्रबंधन को आसान बनाता है क्योंकि एक एकल क्लस्टर है लेकिन यह कुछ प्रश्न उठाता है जैसे:

  • यह कैसे सुनिश्चित किया जाता है कि एक मानवीय गलती उत्पादन पर्यावरण को प्रभावित कर सकती है?
  • यह कैसे सुनिश्चित किया जाए कि मंचन के माहौल में एक उच्च भार उत्पादन वातावरण में प्रदर्शन का नुकसान नहीं होगा?

कुछ अन्य चिंताएँ हो सकती हैं, इसलिए मैं St8Overflow पर K8s समुदाय तक पहुँच रहा हूँ ताकि लोग इस तरह की चुनौतियों से कैसे निपटें, इसकी बेहतर समझ हो सके।


2
आपने यह कैसे किया? कृपया आप हमें बता सकते हैं ... मैं भी सीख रहा हूं और सर्वश्रेष्ठ तरीके से काम करने की कोशिश कर रहा हूं। अलग-अलग क्लस्टर स्थापित करने जैसा लगता है कि शायद जाने का सही तरीका है ...
Piotr Kula

3
हमने दो क्लस्टर बनाए, एक स्टेजिंग के लिए और दूसरा प्रोडक्शन के लिए। एक बुनियादी ढांचे के दृष्टिकोण से सिर पर एक अतिरिक्त प्रबंधन है लेकिन हमारे मामले में अलगाव का स्तर इसके लायक था।
योआनीस गिल

1
@ YoanisGil क्या आप स्वीकार किए जाते हैं यहां एक उत्तर है?
tdensmore

3
@tdensmore अधिकांश उत्तर अपने तरीके से अच्छे हैं। बात यह है कि, सिर्फ एक जवाब नहीं है और यह प्रश्न में उपयोग के मामले पर निर्भर करता है। मुझे लगता है कि K8 और इसका समुदाय तब से काफी परिपक्व हो चुका है जब मैंने पहली बार यह सवाल पूछा था (अब लगभग 3 साल) और वहाँ कम से कम कुछ न्यूनतम सर्वोत्तम प्रथाएं लगती हैं जो कोई भी लागू कर सकता है, भले ही कितने क्लस्टर का उपयोग किया जाए और किस उद्देश्य के लिए ( मैं नाम स्थान, नेटवर्क नीतियों, नोड चयनकर्ताओं, seccomp, आदि) के बारे में सोच रहा हूँ।
योआनिस गिल

जवाबों:


33

एकाधिक समूहों के विचार

वादिम ईसेनबर्ग ( आईबीएम / इस्तियो ) के इस ब्लॉग पोस्ट पर एक नज़र डालें : चेकलिस्ट: कई कुबेरनेट समूहों का उपयोग करने के पेशेवरों और विपक्षों और उनके बीच वर्कलोड कैसे वितरित करें

मैं कुछ पेशेवरों / विपक्षों पर प्रकाश डालना चाहता हूं:

कई समूहों के कारण

  • उत्पादन / विकास / परीक्षण का पृथक्करण: विशेष रूप से कुबेरनेट्स के नए संस्करण का परीक्षण करने के लिए, सर्विस क्लस्टर का, अन्य क्लस्टर सॉफ़्टवेयर का
  • अनुपालन: कुछ नियमों के अनुसार कुछ अनुप्रयोगों को अलग-अलग समूहों / अलग वीपीएन में चलना चाहिए
  • सुरक्षा के लिए बेहतर अलगाव
  • क्लाउड / ऑन-प्रीमियर: ऑन-प्रिमाइसेस सेवाओं के बीच लोड को विभाजित करने के लिए

एकल क्लस्टर के कारण

  • सेटअप, रखरखाव और प्रशासन को कम करें
  • उपयोग में सुधार
  • लागत में कमी

औसत रखरखाव के साथ और अभी भी अभी भी उत्पादन अनुप्रयोगों के लिए सुरक्षा अलगाव सुनिश्चित करने के लिए एक बहुत महंगा वातावरण को ध्यान में रखते हुए, मैं सिफारिश करूंगा:

  • DEV और STAGING के लिए 1 क्लस्टर (नामस्थान द्वारा अलग किया गया, शायद अलग-अलग, नेटवर्क नीतियों का उपयोग करके, जैसे कि कैलिको में )
  • PROD के लिए 1 क्लस्टर

पर्यावरण समता

यह विकास, मंचन, और उत्पादन को यथासंभव रखने के लिए एक अच्छा विकल्प है:

बैकिंग सेवाओं के बीच अंतर का मतलब है कि छोटी असंगतताएँ फसल पैदा करती हैं, जिससे कोड होता है जो विकास में परीक्षण और काम करता है और उत्पादन में विफल होने के लिए पारित होता है। इस प्रकार की त्रुटियां घर्षण पैदा करती हैं जो निरंतर तैनाती को विघटित करती हैं।

एक शक्तिशाली CI / CD टूल को पतवार के साथ मिलाएं । आप हेल्म मूल्यों के लचीलेपन का उपयोग कर सकते हैं डिफ़ॉल्ट कॉन्फ़िगरेशन सेट करने के लिए , बस उन कॉन्फ़िगरेशन को ओवरराइड कर सकते हैं जो एक वातावरण से दूसरे में भिन्न होते हैं।

ऑटोलेवॉप्स के साथ गिटलैब सीआई / सीडी में कुबेरनेट्स के साथ एक शक्तिशाली एकीकरण है, जो आपको हेल्म समर्थन के साथ पहले से ही कई कुबेरनेट समूहों का प्रबंधन करने की अनुमति देता है।

कई समूहों ( इंटरैक्शन) का प्रबंधन करनाkubectl

जब आप कई कुबेरनेट क्लस्टर के साथ काम कर रहे हैं, तो संदर्भों के साथ गड़बड़ करना और kubectlगलत क्लस्टर में चलाना आसान है । इसके अलावा, कुबेरनेट्स के पास क्लाइंट ( ) और सर्वर (कुबेरनेट्स मास्टर) के बीच बेमेल संस्करण के लिए प्रतिबंध हैkubectl , इसलिए सही संदर्भ में कमांड चलाने का मतलब सही क्लाइंट संस्करण चलाना नहीं है।

इसे दूर करने के लिए:

  • asdfकई kubectlसंस्करणों का प्रबंधन करने के लिए उपयोग करें
  • KUBECONFIGकई kubeconfigफ़ाइलों के बीच बदलने के लिए env var सेट करें
  • kube-ps1अपने वर्तमान संदर्भ / नाम स्थान का ट्रैक रखने के लिए उपयोग करें
  • का प्रयोग करें kubectxऔरkubens के समूहों को / नामस्थान तेजी से बदलने के लिए
  • उन सभी को एक साथ संयोजित करने के लिए उपनाम का उपयोग करें

मेरे पास एक लेख है जो इसे पूरा करने के लिए उदाहरण देता है: कई कुबेरनेट समूहों के साथ अलग-अलग कुबेटल संस्करणों का उपयोग करना

मैं निम्नलिखित पठन की भी सिफारिश करता हूं:


26

निश्चित रूप से विकास के लिए एक अलग क्लस्टर का उपयोग करें और डॉक इमेज बनाएं ताकि आपके स्टेजिंग / प्रोडक्शन क्लस्टर्स को सुरक्षा के लिहाज से लॉक किया जा सके। चाहे आप staging + productionजोखिम / लागत के आधार पर निर्णय लेने के लिए आपके लिए अलग से क्लस्टर का उपयोग करें - निश्चित रूप से उन्हें अलग रखने से stagingप्रभावित होने से बचने में मदद मिलेगी production

मैं आपके वातावरण के बीच अपने ऐप्स के संस्करणों को बढ़ावा देने के लिए GitOps का उपयोग करने की अत्यधिक अनुशंसा करता हूं।

मानवीय त्रुटि को कम करने के लिए, मैं आपको अपने CI / CD और प्रचार के लिए जितना संभव हो सके स्वचालित रूप से देखने की सलाह देता हूं।

यहाँ GubOps का उपयोग करके Pub अनुरोधों के बीच वातावरण और पूर्वावलोकन वातावरण के लिए GitOps का उपयोग करके Kubernetes पर कई वातावरणों के साथ CI / CD को स्वचालित करने का एक डेमो दिया गया है जो GKE पर लाइव किया गया था हालांकि जेनकिंस X अधिकांश कुबेरनेट समूहों का समर्थन करता है


1
लिंक टूटा हुआ लगता है
टिबिं

19

यह इस बात पर निर्भर करता है कि आप प्रत्येक परिदृश्य में क्या परीक्षण करना चाहते हैं। सामान्य तौर पर मैं अनावश्यक दुष्प्रभावों (प्रदर्शन प्रभाव, आदि) से बचने के लिए उत्पादन क्लस्टर पर परीक्षण परिदृश्यों को चलाने से बचने की कोशिश करूंगा।

यदि आपका इरादा एक स्टेजिंग सिस्टम के साथ परीक्षण कर रहा है जो उत्पादन प्रणाली की नकल करता है, तो मैं पूर्ण क्लस्टर की सटीक प्रतिकृति को फायरिंग करने की सलाह दूंगा और परीक्षण करने के बाद आपको उत्पादन पर ले जाने के बाद इसे बंद कर दूंगा।

यदि आपका उद्देश्य एक स्टेजिंग सिस्टम का परीक्षण कर रहा है, जो कि एप्लिकेशन को परिनियोजित करने के लिए परीक्षण की अनुमति देता है, तो मैं एक छोटे स्टेजिंग क्लस्टर को स्थायी रूप से चलाऊंगा और निरंतर परीक्षण के लिए आवश्यक रूप से तैनाती (अपडेट के साथ एक छोटा संस्करण के साथ तैनाती) को अपडेट करूंगा।

विभिन्न समूहों को नियंत्रित करने के लिए, मैं एक अलग ci / cd मशीन रखना पसंद करता हूं जो क्लस्टर का हिस्सा नहीं है, लेकिन क्लस्टर को बंद करने और बंद करने के साथ-साथ परिनियोजन कार्य करने, परीक्षण आरंभ करने आदि के लिए उपयोग किया जाता है। यह सेट अप और शट डाउन करने की अनुमति देता है। स्वचालित परीक्षण परिदृश्यों के हिस्से के रूप में क्लस्टर।


3
यह अभी भी ऊपर है बहस के लिए, लेकिन मैं इस चर्चा उपयोगी पाया: groups.google.com/forum/#!topic/kubernetes-users/GPaGOGxCDD8
इंद्रधनुष गुप्ता

1
मैंने दो प्रकार के मंचन परिवेशों का उल्लेख करने के लिए उत्थान किया।
जॉन डेविड

8

यह स्पष्ट है कि स्टेजिंग से प्रोडक्शन क्लस्टर को रखने से, उत्पादन सेवाओं को प्रभावित करने वाली संभावित त्रुटियों का जोखिम कम हो जाता है। हालाँकि यह अधिक बुनियादी ढांचे / विन्यास प्रबंधन की लागत पर आता है, क्योंकि इसके लिए कम से कम आवश्यकता होती है:

  • उत्पादन क्लस्टर के लिए कम से कम 3 मास्टर्स और स्टेजिंग के लिए कम से कम एक मास्टर
  • 2 Kubectl config फाइल को CI / CD सिस्टम में जोड़ा जाना है

आइए यह भी न भूलें कि एक से अधिक वातावरण हो सकते हैं। उदाहरण के लिए मैंने उन कंपनियों में काम किया है जहाँ कम से कम 3 वातावरण हैं:

  • क्यूए: यह वह जगह है जहाँ हमने दैनिक डिप्लॉय किया था और क्लाइंट को जारी करने से पहले हमने अपना आंतरिक क्यूए किया था)
  • ग्राहक QA: यह वह जगह है जहां हमने उत्पादन को लागू करने से पहले तैनात किया है ताकि ग्राहक उत्पादन जारी करने से पहले पर्यावरण को मान्य कर सके)
  • उत्पादन: यह जहां उत्पादन सेवाओं को तैनात किया जाता है।

मुझे लगता है कि अल्पकालिक / ऑन-डिमांड क्लस्टर्स समझ में आता है, लेकिन केवल कुछ उपयोग के मामलों के लिए (लोड / प्रदर्शन परीक्षण या बहुत «बड़ा» एकीकरण / एंड-टू-एंड परीक्षण) लेकिन अधिक लगातार / चिपचिपा वातावरण के लिए मुझे एक ओवरहेड दिखाई देता है जो कम हो सकता है उन्हें एक क्लस्टर के भीतर चलाकर।

मुझे लगता है कि मैं k8s समुदाय तक पहुंचना चाहता था कि इस तरह के परिदृश्यों के लिए क्या पैटर्न का उपयोग किया जाता है जैसे कि मैंने वर्णित किया है।


6

जब तक अनुपालन या अन्य आवश्यकताएं तय नहीं होती हैं, तब तक मैं सभी वातावरणों के लिए एक एकल क्लस्टर का पक्ष लेता हूं। इस दृष्टिकोण के साथ, ध्यान देने वाले बिंदु हैं:

  • सुनिश्चित करें कि आप लेबल का उपयोग करके प्रति पर्यावरण नोड्स भी समूहित करते हैं। फिर आप nodeSelectorयह सुनिश्चित करने के लिए संसाधनों पर उपयोग कर सकते हैं कि वे विशिष्ट नोड्स पर चल रहे हैं। यह (अतिरिक्त) संसाधनों की खपत को पर्यावरण के बीच फैलने की संभावना को कम करेगा।

  • अपने नामस्थान को सबनेट के रूप में मानें और डिफ़ॉल्ट रूप से सभी प्रगति / आवागमन को रोकें। Https://kubernetes.io/docs/concepts/services-networking/network-policies/ देखें ।

  • सेवा खातों के प्रबंधन के लिए एक रणनीति रखें। ClusterRoleBindingsअगर एक क्लस्टर एक से अधिक पर्यावरण को होस्ट करता है तो कुछ अलग है।

  • हेल्म जैसे उपकरण का उपयोग करते समय जांच का उपयोग करें। कुछ चार्ट क्लस्टर-वाइड अनुमतियों के साथ सेवा खातों को blatantly स्थापित करते हैं, लेकिन सेवा खातों के लिए अनुमतियाँ उस वातावरण तक सीमित होनी चाहिए जो वे हैं।


आप क्लस्टर अपग्रेडेशन विफलता की योजना कैसे बना सकते हैं?
टिबिन

2

उत्पादन और "गैर-उत्पादन" के बीच एक मजबूत अलगाव को लागू करने के लिए बहुत सूची में कई समूहों का उपयोग करना आदर्श है।

उस भावना में, ध्यान दें कि GitLab 13.2 (जुलाई 2020) में अब शामिल हैं:

कोर में कई कुबेरनेट क्लस्टर की तैनाती

GitLab के साथ कई कुबेरनेट समूहों को तैनात करने के लिए GitLab का उपयोग करना पहले एक प्रीमियम लाइसेंस की आवश्यकता थी।
हमारे समुदाय ने बात की, और हमने सुना: कई समूहों को तैनात करना व्यक्तिगत योगदानकर्ताओं के लिए भी उपयोगी है।
आपकी प्रतिक्रिया के आधार पर, GitLab 13.2 से शुरू होकर, आप कोर में कई समूह और प्रोजेक्ट क्लस्टर्स को तैनात कर सकते हैं।

https://about.gitlab.com/images/13_2/MultipleProjectClusters.png

प्रलेखन और मुद्दा देखें /


1

मुझे लगता है कि एक एकल क्लस्टर चलाने से समझ में आता है क्योंकि यह ओवरहेड, निगरानी को कम करता है। लेकिन, आपको नेटवर्क नीतियां, पहुंच नियंत्रण जगह सुनिश्चित करना होगा।

नेटवर्क नीति - उत्पादों / स्टेजिंग स्टोर के साथ बातचीत करने के लिए देव / क्यूए पर्यावरण कार्यभार को प्रतिबंधित करना।

अभिगम नियंत्रण - जिनके पास विभिन्न पर्यावरण संसाधनों पर क्लस्टर क्लस्टर, रोल्स आदि का उपयोग होता है।

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