Jenkins-X Istio Flagger प्रयोग गरेर क्यानरी डिप्लोइमेन्ट
हामी GitOps मार्फत क्यानरी डिप्लोइमेन्ट म्यानुअल रूपमा गर्नेछौं र मुख्य Kubernetes स्रोतहरू सिर्जना/परिमार्जन गर्नेछौं। यो लेख मुख्य रूपमा परिचयको लागि हो Kubernetes Canary मा डिप्लोइमेन्ट कसरी काम गर्दछ, किनकि त्यहाँ स्वचालनका थप प्रभावकारी विधिहरू छन्, जसलाई हामी निम्न लेखहरूमा विचार गर्नेछौं।
क्यानरी रणनीतिको साथ, अपडेटहरू पहिले प्रयोगकर्ताहरूको एक उपसमूहमा लागू हुन्छन्। निगरानी, लग डेटा, म्यानुअल परीक्षण, वा अन्य प्रतिक्रिया च्यानलहरू मार्फत, रिलीज सबै प्रयोगकर्ताहरूलाई जारी गर्नु अघि परीक्षण गरिन्छ।
Kubernetes तैनाती (रोलिङ अपडेट)
Kubernetes डिप्लोइमेन्टको लागि पूर्वनिर्धारित रणनीति रोलिङ-अपडेट हो, जहाँ छविहरूको नयाँ संस्करणहरूसँग निश्चित संख्यामा पोडहरू सुरू गरिन्छ। यदि तिनीहरू समस्या बिना सिर्जना गरिएको थियो भने, छविहरूको पुरानो संस्करणहरूसँग पोडहरू समाप्त हुन्छन्, र नयाँ पोडहरू समानान्तर रूपमा सिर्जना हुन्छन्।
GitOps
हामी यस उदाहरणमा GitOps प्रयोग गर्दछौं किनभने हामी:
सत्यको एकल स्रोतको रूपमा Git प्रयोग गर्दै
हामी निर्माण र तैनातीका लागि Git अपरेशनहरू प्रयोग गर्छौं (गिट ट्याग/मर्ज बाहेक अरू कुनै आदेशहरू आवश्यक पर्दैन)
उदाहरण:
एउटा राम्रो अभ्यास गरौं - एप्लिकेसन कोडको लागि एउटा भण्डार र एक पूर्वाधारको लागि।
आवेदन भण्डार
यो एक धेरै सरल पाइथन + फ्लास्क API हो जसले JSON को रूपमा प्रतिक्रिया फर्काउँछ। हामी GitlabCI मार्फत प्याकेज निर्माण गर्नेछौं र परिणामलाई Gitlab रजिस्ट्रीमा पुश गर्नेछौं। रजिस्ट्रीमा हामीसँग दुई फरक रिलीज संस्करणहरू छन्:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
तिनीहरू बीचको मात्र फरक फर्काइएको JSON फाइलमा परिवर्तन हो। हामीले यो एपलाई सकेसम्म सजिलैसँग भिजुअलाइज गर्न प्रयोग गर्छौं जुन संस्करण हामीले सञ्चार गरिरहेका छौं।
पूर्वाधार भण्डार
यस शलजममा हामी GitlabCI मार्फत Kubernetes मा तैनात गर्नेछौं, .gitlab-ci.yml यस्तो देखिन्छ:
हामी यी परिवर्तनहरूलाई भण्डारमा पुश गर्छौं जहाँबाट डिप्लोइमेन्ट सुरु हुनेछ (GitlabCI मार्फत) र परिणामको रूपमा हेर्नुहोस्:
हाम्रो सेवाले दुबै डिप्लोइमेन्टलाई औंल्याउछ, किनकि दुबैमा एप चयनकर्ता छ। Kubernetes को पूर्वनिर्धारित अनियमितताको कारणले, हामीले अनुरोधहरूको ~ 10% को लागि फरक प्रतिक्रियाहरू हेर्नुपर्दछ:
हाम्रो एप्लिकेसनको हालको अवस्था (GitOps, सत्यको एकल स्रोतको रूपमा Git बाट लिइएको) प्रत्येक संस्करणको लागि सक्रिय प्रतिकृतिहरू सहित दुई डिप्लोइमेन्टहरूको उपस्थिति हो।
~ 10% प्रयोगकर्ताहरू नयाँ संस्करणसँग परिचित हुन्छन् र अनजानमा यसलाई परीक्षण गर्छन्। अब समस्याहरू फेला पार्न लगहरू र निगरानी डेटामा त्रुटिहरूको लागि जाँच गर्ने समय हो।
चरण 2: सबै प्रयोगकर्ताहरूलाई नयाँ संस्करण जारी गर्नुहोस्
हामीले निर्णय गर्यौं कि सबै कुरा राम्ररी गयो र अब हामीले सबै प्रयोगकर्ताहरूलाई नयाँ संस्करण रोल आउट गर्न आवश्यक छ। यो गर्नको लागि हामी केवल अपडेट गर्छौं deploy.yaml छविको नयाँ संस्करण स्थापना गर्दै र 10 बराबर प्रतिकृतिहरूको संख्या deploy-canary.yaml हामीले प्रतिकृतिहरूको संख्यालाई ० मा सेट गर्छौं। डिप्लोइमेन्ट पछि, नतिजा निम्नानुसार हुनेछ:
संक्षेप गर्न
मेरो लागि, यस तरिकाले म्यानुअल रूपमा डिप्लोइमेन्ट चलाउँदा k8s प्रयोग गरेर कन्फिगर गर्न सकिन्छ भनेर बुझ्न मद्दत गर्दछ। चूंकि Kubernetes ले तपाइँलाई API मार्फत सबै कुरा अद्यावधिक गर्न अनुमति दिन्छ, यी चरणहरू स्क्रिप्टहरू मार्फत स्वचालित गर्न सकिन्छ।
कार्यान्वयन गर्न आवश्यक अर्को कुरा एक परीक्षक प्रविष्टि बिन्दु हो (लोडब्यालेन्सर वा इन्ग्रेस मार्फत) जसको माध्यमबाट मात्र नयाँ संस्करण पहुँच गर्न सकिन्छ। यसलाई म्यानुअल ब्राउजिङको लागि प्रयोग गर्न सकिन्छ।
भविष्यका लेखहरूमा, हामी अन्य स्वचालित समाधानहरू जाँच गर्नेछौं जसले हामीले गरेका अधिकांश कार्यहरू लागू गर्दछ।