कुबेरनेट्स की समीक्षा और पूरक करें (समीक्षा और वीडियो रिपोर्ट)



8 अप्रैल को, सेंट हाईलाड ++ 2019 सम्मेलन में, DevOps और संचालन अनुभाग के ढांचे के भीतर, "एक्सटेंडिंग एंड कॉम्प्लिमेंटिंग कुबेरनेट्स" शीर्षक से एक रिपोर्ट बनाई गई थी, जिसे फ्लैंट के तीन कर्मचारियों द्वारा बनाया गया था। इसमें, हम कई स्थितियों के बारे में बात करते हैं जिसमें हम कुबेरनेट की क्षमताओं का विस्तार और पूरक करना चाहते थे, लेकिन जिसके लिए हमें एक तैयार-निर्मित और सरल समाधान नहीं मिला। ओपन सोर्स प्रोजेक्ट्स के रूप में आवश्यक समाधान दिखाई दिए, और यह प्रस्तुति भी उन्हें समर्पित है।

परंपरा से, हम एक रिपोर्ट (50 मिनट, लेख से बहुत अधिक जानकारीपूर्ण) और पाठ के रूप में मुख्य निचोड़ के साथ एक वीडियो प्रस्तुत करने की कृपा कर रहे हैं। चलो चलते हैं!

K8s कर्नेल और ऐड-ऑन


कुबेरनेट्स एक लंबे समय से स्थापित उद्योग और प्रशासन के दृष्टिकोण को बदल रहा है:

  • उसके अमूर्त के लिए धन्यवाद, हम अब कॉन्सेप्ट के साथ काम नहीं करते हैं जैसे कि एक कॉन्फिगर को कॉन्फ़िगर करना या एक कमांड चलाना (शेफ, अन्सिबल ...), लेकिन कंटेनरों, सेवाओं आदि के समूह का उपयोग करें।
  • हम उस विशिष्ट प्लेटफ़ॉर्म की बारीकियों के बारे में सोचे बिना आवेदन तैयार कर सकते हैं जिस पर इसे लॉन्च किया जाएगा: नंगे धातु, प्रदाताओं में से एक का बादल, आदि।
  • K8s के साथ, बुनियादी ढाँचे के आयोजन के लिए सर्वोत्तम प्रथाएं पहले से कहीं अधिक सुलभ हो गई हैं: स्केलिंग, आत्म-चिकित्सा, दोष सहिष्णुता, आदि।

हालांकि, ज़ाहिर है, सब कुछ इतना आसान नहीं है: कुबेरनेट्स के साथ अपनी खुद की - नई - चुनौतियां थीं।

कुबेरनेट्स एक संयोजन नहीं है जो सभी उपयोगकर्ताओं की सभी समस्याओं को हल करता है। कुबेरनेट्स कोर केवल न्यूनतम आवश्यक कार्यों के सेट के लिए जिम्मेदार है जो प्रत्येक क्लस्टर में मौजूद हैं:



कुबेरनेट्स के मूल में, आदिम का एक मूल सेट परिभाषित किया गया है - कंटेनरों को समूहीकृत करने, यातायात का प्रबंधन करने, और इसी तरह। हमने 2 साल पहले एक रिपोर्ट में उनके बारे में अधिक विस्तार से बात की थी



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

परिवर्धन के उदाहरण हैं


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



एक करीबी उदाहरण डेटा भंडारण समाधान (स्थानीय डिस्क, नेटवर्क ब्लॉक डिवाइस, सेफ ...) है। प्रारंभ में, वे कर्नेल में थे, लेकिन सीएसआई के आगमन के साथ , स्थिति पहले से वर्णित एक समान में बदल जाती है: कुबेरनेट्स में, इंटरफ़ेस, और इसके कार्यान्वयन, तीसरे पक्ष के मॉड्यूल में।

अन्य उदाहरणों में:

  • प्रवेश नियंत्रक (एक समीक्षा के लिए, हमारे हाल के लेख देखें )
  • प्रमाण-प्रबंधक :

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

  • मेट्रिक्स इस बात का एक और उदाहरण है कि कुबेरनेट्स ने इसके कार्यान्वयन से इंटरफ़ेस (मेट्रिक्स एपीआई) को कैसे अलग किया (तीसरे पक्ष के ऐड-ऑन जैसे प्रोमेथियस एडेप्टर, डेटाडॉग क्लस्टर एजेंट ...)।
  • निगरानी और आंकड़ों के लिए , जहां व्यवहार में न केवल प्रोमेथियस और ग्राफाना की जरूरत है , बल्कि क्यूब-स्टेट-मेट्रिक्स, नोड-निर्यातक, आदि भी हैं।

और यह ऐड-ऑन की पूरी सूची नहीं है ... उदाहरण के लिए, हम फ्लेंट कंपनी में आज हर कुबेरनेट्स क्लस्टर के लिए 29 ऐड-ऑन स्थापित करते हैं (सभी कुल मिलाकर 249 कुबेरनेट ऑब्जेक्ट बनाते हैं)। सीधे शब्दों में कहें, तो हम बिना जोड़ के एक क्लस्टर का जीवन नहीं देखते हैं।

स्वचालन


ऑपरेटरों को नियमित संचालन को स्वचालित करने के लिए डिज़ाइन किया गया है जिसका हम दैनिक सामना करते हैं। यहां ऐसे जीवन उदाहरण दिए गए हैं जो एक ऑपरेटर को लिखने के लिए महान होंगे:

  1. आवेदन के लिए छवियों के साथ एक निजी (यानी लॉगिन की आवश्यकता है) रजिस्ट्री है। यह माना जाता है कि प्रत्येक पॉड एक विशेष रहस्य से बंधा है जो रजिस्ट्री में प्रमाणीकरण की अनुमति देता है। हमारा कार्य यह सुनिश्चित करना है कि यह रहस्य नेमस्पेस में पाया जाता है, ताकि पॉड्स छवियों को डाउनलोड कर सकें। बहुत सारे अनुप्रयोग हो सकते हैं (जिनमें से प्रत्येक को एक रहस्य की आवश्यकता होती है), और यह नियमित रूप से रहस्यों को स्वयं अपडेट करने के लिए उपयोगी है, ताकि आपके हाथों से रहस्यों को उजागर करने का विकल्प गायब हो जाए। यहां ऑपरेटर बचाव के लिए आता है: हम एक नियंत्रक बनाते हैं जो नाम स्थान के लिए प्रतीक्षा करेगा और इस घटना में नामस्थान के लिए एक रहस्य जोड़ देगा।
  2. मान लीजिए कि फली से इंटरनेट तक डिफ़ॉल्ट रूप से प्रवेश निषिद्ध है। लेकिन कभी-कभी इसकी आवश्यकता हो सकती है: पहुंच कौशल तंत्र के लिए यह तर्कसंगत है कि वह विशिष्ट कौशल की आवश्यकता के बिना काम करे, उदाहरण के लिए, नामस्थान में एक निश्चित लेबल की उपस्थिति के द्वारा। ऑपरेटर यहां हमारी मदद कैसे करेगा? एक नियंत्रक बनाया जाता है जो नाम स्थान में प्रकट होने के लिए लेबल की अपेक्षा करता है और इंटरनेट तक पहुँचने के लिए उपयुक्त नीति जोड़ता है।
  3. इसी तरह की स्थिति: अगर यह एक समान लेबल (कुछ प्रकार के उपसर्ग के साथ) है, तो हमें नोड में एक निश्चित दाग जोड़ने की आवश्यकता है। ऑपरेटर के साथ कार्य स्पष्ट हैं ...

किसी भी क्लस्टर में, नियमित कार्यों को हल करना आवश्यक है, और ऐसा करने के लिए सही ढंग से - ऑपरेटरों का उपयोग करना।

वर्णित सभी कहानियों को सारांशित करते हुए , हम इस निष्कर्ष पर पहुंचे कि कुबेरनेट्स में आरामदायक काम के लिए यह आवश्यक है : ए) स्थापित करने के लिए एड-ऑन , बी) विकसित करने के लिए ऑपरेटरों (रोजमर्रा के व्यवस्थापक कार्यों को हल करने के लिए)।

कुबेरनेट्स के लिए एक बयान कैसे लिखें?


सामान्य तौर पर, यह योजना सरल है:



... लेकिन यह पता चला है कि:

  • कुबेरनेट्स एपीआई एक गैर-तुच्छ चीज है जिसे मास्टर करने के लिए बहुत समय की आवश्यकता होती है;
  • प्रोग्रामिंग भी हर किसी के लिए नहीं है (गो को पसंदीदा भाषा के रूप में चुना जाता है क्योंकि इसके लिए एक विशेष रूपरेखा है - ऑपरेटर एसडीके );
  • एक ऐसी ही स्थिति के रूप में रूपरेखा के साथ।

नीचे पंक्ति: नियंत्रक (ऑपरेटर) लिखने के लिए , आपको मैटरियल का अध्ययन करने के लिए महत्वपूर्ण संसाधन खर्च करने होंगे। यह "बड़े" ऑपरेटरों के लिए - MySQL DBMS के लिए उचित होगा। लेकिन अगर हम ऊपर वर्णित उदाहरणों को याद करते हैं (रहस्यों को प्रकट करते हुए, इंटरनेट से पॉड्स की पहुंच ...), जिसे हम सही तरीके से करना भी चाहते हैं, तो हम समझेंगे कि खर्च किए गए परिणाम अब आवश्यक परिणाम से आगे निकल जाएंगे:



सामान्य तौर पर, एक दुविधा पैदा होती है: बहुत सारे संसाधन खर्च करते हैं और बयान लिखने या "पुराने तरीके" (लेकिन जल्दी से) के लिए सही उपकरण ढूंढते हैं। इसे हल करने के लिए - इन चरम सीमाओं के बीच समझौता करने के लिए - हमने अपनी परियोजना बनाई: शेल-ऑपरेटर (हब पर उसकी हालिया घोषणा भी देखें)

शेल ऑपरेटर


वह कैसे काम करता है? क्लस्टर में एक फली होती है जिसमें गो-बाइनरी शेल-ऑपरेटर के साथ होती है। हुक के एक सेट को इसके बगल में संग्रहीत किया जाता है (उनके बारे में अधिक जानकारी के लिए, नीचे देखें) । शेल-ऑपरेटर खुद कुबेरनेट्स एपीआई में कुछ घटनाओं की सदस्यता लेता है, जिस पर वह संबंधित हुक लॉन्च करता है।

शेल-ऑपरेटर कैसे समझता है कि किन घटनाओं के तहत ट्रिगर करने के लिए कौन सा हुक है? यह जानकारी शेल ऑपरेटर को स्वयं हुक द्वारा पारित की जाती है और वे इसे बहुत सरल बनाते हैं।

हुक एक बैश स्क्रिप्ट या कोई अन्य निष्पादन योग्य फ़ाइल है जो एकल तर्क का समर्थन करता है --config और इसके जवाब में JSON देता है। उत्तरार्द्ध यह निर्धारित करता है कि कौन सी वस्तुएं उसे ब्याज देती हैं और कौन सी घटनाओं (इन वस्तुओं के लिए) पर प्रतिक्रिया की जानी चाहिए:



मैं हमारे एक उदाहरण के शेल-ऑपरेटर कार्यान्वयन का वर्णन करूंगा - आवेदन छवियों के साथ एक निजी रजिस्ट्री तक पहुंचने के लिए रहस्य का खुलासा करना। इसमें दो चरण होते हैं।

अभ्यास: 1. एक हुक लेखन


हुक में पहला कदम प्रोसेस करना है --config , यह दर्शाता है कि हम नाम स्थान में रुचि रखते हैं, और विशेष रूप से, जिस क्षण वे बनाए गए थे:

 [[ $1 == "--config" ]] ; then cat << EOF { "onKubernetesEvent": [ { "kind": "namespace", "event": ["add"] } ] } EOF … 

लॉजिक कैसा दिखेगा? बहुत सरल भी:

 else createdNamespace=$(jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH) kubectl create -n ${createdNamespace} -f - << EOF Kind: Secret ... EOF fi 

पहला कदम यह पता लगाना है कि कौन सा नाम स्थान बनाया गया था, और दूसरा कदम kubectl माध्यम से इस नाम स्थान के लिए एक रहस्य बनाना है।

अभ्यास: 2. एक छवि को एक साथ रखना


यह शेल-ऑपरेटर को बनाए गए हुक को स्थानांतरित करने के लिए रहता है - यह कैसे करना है? शेल-ऑपरेटर अपने आप में एक डॉकर छवि के रूप में आता है, इसलिए हमारा काम इस छवि में एक विशेष निर्देशिका के लिए एक हुक जोड़ना है:

 FROM flant/shell-operator:v1.0.0-beta.1 ADD my-handler.sh /hooks 

यह इसे इकट्ठा करने और पुश करने के लिए बना हुआ है:

 $ docker build -t registry.example.com/my-operator:v1 . $ docker push registry.example.com/my-operator:v1 

अंतिम स्पर्श छवि को एक क्लस्टर में एम्बेड करना है। ऐसा करने के लिए, परिनियोजन लिखें:

 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-operator spec: template: spec: containers: - name: my-operator image: registry.example.com/my-operator:v1 # 1 serviceAccountName: my-operator # 2 

इसमें, आपको दो बिंदुओं पर ध्यान देने की आवश्यकता है:

  1. सिर्फ बनाई गई छवि का संकेत;
  2. यह एक प्रणाली घटक है जिसे (न्यूनतम पर) कुबेरनेट्स में घटनाओं की सदस्यता के लिए और नेमस्पेस द्वारा रहस्यों को प्रकट करने के लिए अधिकारों की आवश्यकता होती है, इसलिए हम हुक के लिए ServiceAccount (और नियमों का एक सेट) बनाते हैं।

परिणाम - हमने अपनी समस्या को कुबेरनेट्स के मूल निवासी के रूप में हल किया, रहस्यों को प्रकट करने के लिए एक ऑपरेटर बनाया।

अन्य शेल-ऑपरेटर सुविधाएँ


अपनी पसंद के प्रकार की वस्तुओं को सीमित करने के लिए जो हुक के साथ काम करेंगे, आप उन्हें विशिष्ट लेबल द्वारा फ़िल्टर करके (या matchExpressions का उपयोग matchExpressions ) फ़िल्टर कर सकते हैं :

 "onKubernetesEvent": [ { "selector": { "matchLabels": { "foo": "bar", }, "matchExpressions": [ { "key": "allow", "operation": "In", "values": ["wan", "warehouse"], }, ], } … } ] 

एक डिडुप्लीकेशन मैकेनिज्म प्रदान किया जाता है, जो - एक jq फ़िल्टर का उपयोग करके - आपको बड़ी JSONs ऑब्जेक्ट्स को छोटे में बदलने की अनुमति देता है, जहां केवल वे पैरामीटर रहते हैं कि हम बदलाव की निगरानी करना चाहते हैं।

जब हुक कहा जाता है, तो शेल-ऑपरेटर इसे ऑब्जेक्ट के बारे में डेटा पास करता है, जिसका उपयोग किसी भी आवश्यकता के लिए किया जा सकता है।

जिन घटनाओं के कारण हुक चालू होते हैं, वे कुबेरनेट घटनाओं तक सीमित नहीं होते हैं: शेल-ऑपरेटर समय के अनुसार हुक को कॉल करने के लिए समर्थन प्रदान करता है (पारंपरिक अनुसूचक में कॉट्रैब के समान), साथ ही साथ एक विशेष ऑनस्टारअप घटना। इन सभी घटनाओं को एक ही हुक में जोड़ा और सौंपा जा सकता है।

और शेल-ऑपरेटर की दो और विशेषताएं:

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

रिपोर्ट के इस भाग को संक्षेप में प्रस्तुत करने के लिए:



ऐड-ऑन स्थापना


कुबेरनेट्स के साथ आरामदायक काम के लिए, ऐड-ऑन स्थापित करने की आवश्यकता का भी उल्लेख किया गया था। मैं इसके बारे में बात करूंगा कि जिस तरह से हमारी कंपनी है कि हम इसे अभी कैसे कर रहे हैं।

हमने कई समूहों के साथ कुबेरनेट्स के साथ काम करना शुरू कर दिया, जो एकमात्र अतिरिक्त था। इसे प्रत्येक क्लस्टर में अलग-अलग तरीके से डालना आवश्यक था, और हमने विभिन्न वातावरणों के लिए कई YAML कॉन्फ़िगरेशन किए: नंगे धातु, AWS ...

अधिक क्लस्टर थे - अधिक कॉन्फ़िगरेशन। इसके अलावा, हमने इन विन्यासों में सुधार किया, जिसके परिणामस्वरूप वे काफी विषम हो गए:



सब कुछ क्रम में रखने के लिए, हमने एक स्क्रिप्ट ( install-ingress.sh ) के साथ शुरुआत की, जिसने एक तर्क के रूप में तैनात होने के लिए क्लस्टर के प्रकार को लिया, वांछित YAML कॉन्फ़िगरेशन उत्पन्न किया और इसे कुबेरनेट्स में रोल किया।

संक्षेप में, हमारा आगे का मार्ग और इससे संबंधित तर्क निम्नानुसार थे:

  • YAML कॉन्फ़िगरेशन के साथ काम करने के लिए, एक टेम्पलेट इंजन की आवश्यकता होती है (पहले चरणों में यह एक सरल सेड है);
  • समूहों की संख्या में वृद्धि के साथ, स्वचालित अपडेट के लिए आवश्यकता आई (जल्द से जल्द समाधान एक स्क्रिप्ट को गिट में डालना, इसे क्रॉन द्वारा अपडेट करना, और इसे चलाना) करना है;
  • प्रोमेथियस के लिए एक समान स्क्रिप्ट की आवश्यकता थी ( install-prometheus.sh ), हालांकि यह उल्लेखनीय है कि इसमें बहुत अधिक इनपुट डेटा की आवश्यकता होती है, साथ ही उनके भंडारण (एक अच्छे तरीके से, केंद्रीकृत और क्लस्टर में), और कुछ डेटा (पासवर्ड) स्वचालित रूप से उत्पन्न हो सकते हैं। :

  • क्लस्टर की बढ़ती संख्या में कुछ गलत रोल करने का जोखिम लगातार बढ़ रहा था, इसलिए हमने महसूस किया कि इंस्टॉलर (यानी, दो स्क्रिप्ट: इनग्रेड और प्रोमेथियस के लिए) को स्टेज सेटअप की आवश्यकता थी (गीट में कई शाखाएं, कई क्रोन उन्हें इसी में अपडेट करने के लिए: स्थिर या परीक्षण क्लस्टर);
  • kubectl apply साथ काम करना मुश्किल हो गया, क्योंकि यह घोषणात्मक नहीं है और केवल ऑब्जेक्ट बना सकता है, लेकिन उनकी स्थिति पर निर्णय नहीं कर सकता / उन्हें हटा नहीं सकता;
  • कुछ कार्यों का अभाव है जो हमें उस समय महसूस नहीं हुआ था:
    • क्लस्टर अपडेट के परिणाम पर पूर्ण नियंत्रण,
    • क्लस्टर (खोज) से प्राप्त किए जा सकने वाले डेटा के आधार पर कुछ मापदंडों (इंस्टॉलेशन स्क्रिप्ट के लिए इनपुट) का स्वचालित निर्धारण
    • निरंतर खोज के रूप में इसका तार्किक विकास।

हमने अपने अन्य प्रोजेक्ट - एडऑन-ऑपरेटर के ढांचे में इस सभी संचित अनुभव को महसूस किया।

ऐड-ऑन-ऑपरेटर


यह पहले से उल्लिखित शेल-ऑपरेटर पर आधारित है। पूरी प्रणाली इस प्रकार है:

शेल-ऑपरेटर से हुक जोड़े जाते हैं:

  • मूल्यों का भंडारण
  • पतवार चार्ट
  • एक घटक जो मूल्यों के भंडार पर नज़र रखता है और - किसी भी परिवर्तन के मामले में - हेल्म से चार्ट को फिर से रोल करने के लिए कहता है।



इस प्रकार, हम कुबेरनेट्स में एक घटना का जवाब दे सकते हैं, एक हुक लॉन्च कर सकते हैं, और इस हुक से रिपॉजिटरी में बदलाव करते हैं, जिसके बाद चार्ट को फिर से पंप किया जाएगा। परिणामी योजना में, हम हुक का एक सेट और एक घटक में एक चार्ट का चयन करते हैं, जिसे हम एक मॉड्यूल कहते हैं:



कई मॉड्यूल हो सकते हैं, और हम उन्हें वैश्विक हुक जोड़ते हैं, एक वैश्विक मान भंडार और एक घटक जो इस वैश्विक भंडार पर नज़र रखता है।

अब जब कुबेरनेट्स में कुछ हो रहा है, तो हम इसका जवाब वैश्विक हुक के साथ दे सकते हैं और वैश्विक भंडार में कुछ बदल सकते हैं। यह परिवर्तन देखा जाएगा और क्लस्टर में सभी मॉड्यूल के रोलबैक का कारण होगा:



यह योजना ऊपर घोषित किए गए ऐड-ऑन को स्थापित करने के लिए सभी आवश्यकताओं को पूरा करती है:

  • हेल्म मानकीकरण और घोषणापत्र के लिए जिम्मेदार है।
  • ऑटो-अपडेट समस्या को एक वैश्विक हुक की मदद से हल किया गया था, जो एक अनुसूची पर रजिस्ट्री में जाता है और, अगर यह वहां सिस्टम की एक नई छवि देखता है, तो इसे फिर से रोल करता है (अर्थात, "स्वयं")।
  • क्लस्टर में सेटिंग्स का संग्रहण कॉन्फिगरेशन का उपयोग करके कार्यान्वित किया जाता है , जिसमें स्टोरेज के लिए प्राथमिक डेटा रिकॉर्ड किया जाता है (स्टार्टअप पर उन्हें स्टोरेज में लोड किया जाता है)।
  • पासवर्ड पीढ़ी, खोज और निरंतर खोज की समस्याओं को हुक का उपयोग करके हल किया जाता है।
  • स्टेजिंग उन टैग्स की बदौलत हासिल होती है, जो डॉकर बॉक्स से बाहर सपोर्ट करते हैं।
  • परिणाम का उपयोग मेट्रिक्स का उपयोग करके किया जाता है जिसके द्वारा हम स्थिति को समझ सकते हैं।

इस पूरे सिस्टम को गो पर सिंगल बाइनरी के रूप में लागू किया गया है, जिसे एडऑन-ऑपरेटर कहा जाता था। इसके लिए धन्यवाद, यह योजना सरल लगती है:



इस आरेख में मुख्य घटक मॉड्यूल का एक सेट है (नीचे से ग्रे) । अब हम वांछित ऐड-ऑन के लिए थोड़े प्रयास के साथ एक मॉड्यूल लिख सकते हैं और सुनिश्चित करें कि यह प्रत्येक क्लस्टर में स्थापित किया जाएगा, अपडेट किया जाएगा और क्लस्टर में होने वाली घटनाओं का जवाब देगा।

फ्लेंट 70+ कुबेरनेट्स-क्लस्टर पर एडऑन-ऑपरेटर का उपयोग करता है। वर्तमान स्थिति अल्फा संस्करण है । अब हम बीटा जारी करने के लिए दस्तावेज़ीकरण तैयार कर रहे हैं, लेकिन अब , उदाहरण रिपॉजिटरी में उपलब्ध हैं , जिसके आधार पर आप अपना एडऑन बना सकते हैं।

एडऑन-ऑपरेटर मॉड्यूल को स्वयं कहाँ से प्राप्त करें? हमारी लाइब्रेरी का प्रकाशन हमारे लिए अगला चरण है, हम इसे गर्मियों में करने की योजना बनाते हैं।

वीडियो और स्लाइड


प्रदर्शन से वीडियो (~ 50 मिनट):



रिपोर्ट की प्रस्तुति:



पुनश्च


हमारे ब्लॉग पर अन्य रिपोर्ट:


आपको निम्नलिखित प्रकाशनों में भी रुचि हो सकती है:

Source: https://habr.com/ru/post/hi449096/


All Articles