कुबेरनेट्स के लिए स्थानीय विकास का माहौल कैसे बनाया जाए?


115

Kubernetes सभी को गुच्छों के एक बादल में कंटेनर तैनात करने के बारे में लगता है। यह स्पर्श करने के लिए प्रतीत नहीं होता है क्या विकास और मंचन वातावरण (या ऐसा) है।

विकास के दौरान आप कुछ महत्वपूर्ण परिवर्तनों के साथ उत्पादन पर्यावरण के जितना करीब होना चाहते हैं:

  • स्थानीय रूप से तैनात (या कम से कम कहीं और जहां आप और केवल आप ही पहुंच सकते हैं )
  • पेज रिफ्रेश पर नवीनतम सोर्स कोड का उपयोग करें (इसकी वेबसाइट को दबाकर; आदर्श रूप से स्थानीय फ़ाइल पर ऑटो-रिफ्रेश सेव करें जो कि यदि आप सोर्स कोड को माउंट करते हैं और येओमान जैसे कुछ सामान का उपयोग कर सकते हैं )।

इसी तरह कोई भी गैर-सार्वजनिक वातावरण चाहता है कि वह निरंतर एकीकरण कर सके

क्या कुबेरनेट्स इस तरह के विकास के माहौल का समर्थन करता है या यह कुछ ऐसा है जिसका निर्माण करना है, उम्मीद है कि उत्पादन के दौरान यह अभी भी काम करेगा?


Openshift Origin पर एक नज़र डालें। यह Openshift का अगला संस्करण है और कुबेरनेट्स के शीर्ष पर बनाया गया है। डॉकटर कंटेनर में स्टैंडअलोन चलाता है।
मार्क ओ'कॉनर

@ MarkO'Connor मैं Google मेघ पर भी तैनात करना चाहता था, लेकिन वे अधिक तैनाती समाधान हैं। यदि आपके पास OpenShift उत्पत्ति के साथ एक समाधान है जो स्थानीय विकास (ज्यादातर नवीनतम स्थानीय फ़ाइल को पुनः लोड करने की अनुमति देता है) तो कृपया उत्तर के रूप में साझा करें, मुझे दिलचस्पी होगी।
वर्नट

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

2
@ F21 यह पोस्ट किए जाने के एक साल बाद यह अधिक हो गया है। क्या कुबेरनेट्स के साथ कोई अच्छा स्थानीय विकास वर्कफ़्लो है?
जतिन

आप देख सकते हैं microk8s, यह आपके स्थानीय मशीन के लिए हल्के k8s स्थापना है। मैंने उसी के लिए उत्तर पोस्ट किया है, इसे कैसे स्थापित करें। यह स्थापना केवल एक मिनट के आसपास है।
प्रफुल्ल लाधा

जवाबों:


67

अपडेट (2016-07-15)

कुबेरनेट्स 1.3 की रिलीज के साथ, मिनिक्यूब अब विकास के लिए अपने स्थानीय मशीन पर कुबेरनेट चलाने की सिफारिश की गई है।


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


3
डॉक्स का कहना है कि यह अब अनुशंसित विधि विधि नहीं है और यह कि "मिनिक्यूब आपकी मोबाइल मशीन पर कुबेरनेट चलाने की अनुशंसित विधि है।"
जतिन

मुझे नहीं लगता कि मिनीब्यूब k8 खुद को विकसित करने के लिए उपयुक्त है, क्या मैं सही हूं?
harryz

यह इस बात पर निर्भर करता है कि आप क्या विकसित कर रहे हैं। K8 के कई हिस्से हैं जहां विकास के लिए मिनीक्यूब का उपयोग करना उचित है। यदि आप पॉड नेटवर्किंग सुरक्षा नीतियों या CNI प्लगइन्स पर काम कर रहे हैं, हालांकि यह बहुत मायने नहीं रखेगा।
रॉबर्ट बेली

1
"डबनेर के माध्यम से स्थानीय रूप से कुबेरनेट्स" लिंक टूट गया है। किसी को भी एक अद्यतन है?
पावनोसोरस

1
मिनिक्यूब ने थोड़ी देर पहले स्थानीय डॉकटर सेटअप को बदल दिया और स्थानीय डॉक संस्करण के लिए प्रलेखन बाद में हटा दिया गया। क्या मिनिक्यूब आपकी आवश्यकताओं के लिए काम करता है? आप एक स्थानीय एकल नोड क्लस्टर को तुरंत करने के लिए VM के अंदर kubeadm का उपयोग कर सकते हैं।
रॉबर्ट बेली

9

हम ऐसा करने के लिए एक टूल पर काम कर रहे हैं। मूल विचार यह है कि आपके पास दूरस्थ कुबेरनेट क्लस्टर है, प्रभावी रूप से एक मंचन वातावरण, और फिर आप स्थानीय रूप से कोड चलाते हैं और यह दूरस्थ क्लस्टर के लिए अनुमानित है। आप पारदर्शी नेटवर्क का उपयोग, पर्यावरण की नकल की नकल, संस्करणों तक पहुँच ... दूरदराज के वातावरण के लिए संभव के रूप में करीब है, लेकिन अपने कोड के साथ स्थानीय रूप से और अपने पूर्ण नियंत्रण में चल रहा है।

तो आप लाइव विकास कर सकते हैं, कहते हैं। Http://telepresence.io पर डॉक्स


5

"हॉट रीलोड" का प्रकार कुछ ऐसा है जिसे हम जोड़ने की योजना बना रहे हैं, लेकिन यह उतना आसान नहीं है जितना आज हो सकता है। हालाँकि, अगर आप रोमांच महसूस कर रहे हैं तो आप rsync का उपयोग docker exec, kubectl exec, या osc exec (सभी एक ही काम मोटे तौर पर) के साथ कर सकते हैं, जब भी यह बदलता है तो एक स्थानीय डायरेक्टरी को कंटेनर में सिंक करने के लिए। आप kubectl या ऑस्क निष्पादन के साथ rsync का उपयोग कर सकते हैं:

# rsync using osc as netcat
$ rsync -av -e 'osc exec -ip test -- /bin/bash' mylocalfolder/ /tmp/remote/folder

अपने आप में हॉट रीलोड है और आपके द्वारा उपयोग किए जाने वाले वेब फ्रेमवर्क को संभाला जाना चाहिए, यहाँ पर आमतौर पर सेट अप होता है। क्या गायब है, इसे कैसे सक्षम किया जाए। इसके लिए एक स्थानीय वॉल्यूम की आवश्यकता होती है। यदि @ रॉबर्ट का उत्तरदाता काम करता है तो यह एक वैध समाधान होना चाहिए।
वर्नट

4

एक और शानदार शुरुआती बिंदु यह वैग्रंट सेटअप , एस्प है। यदि आपका होस्ट OS विंडोज है। होने के स्पष्ट लाभ

  • त्वरित और दर्द रहित सेटअप
  • मशीन को नष्ट / बहलाना आसान
  • संसाधनों पर निहित सीमा
  • कई नोड्स बनाकर क्षैतिज स्केलिंग का परीक्षण करने की क्षमता

नुकसान - आपको बेहतर या बदतर के लिए RAM की बहुत आवश्यकता है, और VirtualBox VirtualBox ... है।

एक मिश्रित लाभ / हानि एनएफएस के माध्यम से फाइलों को मैप कर रहा है। हमारे सेटअप में, हमने RC परिभाषाओं के दो सेट बनाए हैं - एक जो हमारे एप्लिकेशन सर्वर की एक docker छवि डाउनलोड करता है; अन्य 7 अतिरिक्त पंक्तियों के साथ जो होस्टओएस से फ़ाइल मैपिंग सेट करती हैं -> वैग्रंट -> वर्चुअलबॉक्स -> कोरओएस -> कुबेरनेट्स पॉड; डॉकर छवि से स्रोत कोड को ओवरराइट करना।

इसका नकारात्मक पक्ष NFS फ़ाइल कैश है - इसके साथ, यह समस्याग्रस्त है, इसके बिना, यह समस्यात्मक रूप से धीमा है। यहां तक ​​कि सेटिंग mount_options: 'nolock,vers=3,udp,noac'से कैशिंग समस्याओं से पूरी तरह छुटकारा नहीं मिलता है, लेकिन यह ज्यादातर समय काम करता है। जब वे होस्ट OS पर 8 सेकंड लेते हैं, तो कंटेनर में कुछ गुल कार्यों को 5 मिनट लग सकते हैं। एक अच्छा समझौता लगता है mount_options: 'nolock,vers=3,udp,ac,hard,noatime,nodiratime,acregmin=2,acdirmin=5,acregmax=15,acdirmax=15'

स्वचालित कोड पुनः लोड करने के लिए, यह भाषा विशिष्ट है, लेकिन हम Django के प्रेक्षक के लिए पायथन के लिए खुश हैं, और Node.js. के लिए Nodemon। फ्रंटएंड प्रोजेक्ट्स के लिए, आप निश्चित रूप से gulp + BrowserSync + वॉच जैसी किसी चीज़ के साथ बहुत कुछ कर सकते हैं, लेकिन कई डेवलपर्स के लिए यह अपाचे से सेवा करना मुश्किल नहीं है और बस पारंपरिक हार्ड रिफ्रेश करते हैं।

हम कुबेरनेट्स के लिए यमल फ़ाइलों के 4 सेट रखते हैं। देव, "भक्तिमान", मंच, ठेस। उन दोनों के बीच अंतर हैं

  • env चर स्पष्ट रूप से वातावरण की स्थापना (देव / मंच / ठेस)
  • प्रतिकृतियों की संख्या
  • भक्तिपूर्ण, रंगमंचीय, ठेस का उपयोग करते हैं
  • देव डॉक छवियों का उपयोग करता है, और उन पर स्रोत कोड के साथ एनएफएस फ़ोल्डर मैप करता है।

यह बहुत सारे बैश उपनाम और स्वत: पूर्ण बनाने के लिए उपयोगी है - मैं बस टाइप कर सकता हूं rec usersऔर यह करेगा kubectl delete -f ... ; kubectl create -f ...। यदि मैं चाहता हूं कि पूरा सेट अप शुरू हो जाए, तो मैं टाइप करता हूं recfo, और यह एक दर्जन सेवाओं को फिर से बनाता है, नवीनतम डॉकटर चित्रों को खींचता है, स्टेजिंग एनवी से नवीनतम डीबी डंप आयात करता है और अंतरिक्ष को बचाने के लिए पुरानी डॉकर फ़ाइलों को साफ करता है।


4

मैंने अभी स्केफोल्ड से शुरुआत की है

कोड में परिवर्तनों को स्थानीय क्लस्टर में स्वचालित रूप से लागू करना वास्तव में उपयोगी है।

एक स्थानीय क्लस्टर को तैनात करने के लिए, मैक और विंडोज के लिए सबसे अच्छा तरीका मिनिक्यूब या सिर्फ डोकर है, दोनों में एक कुबेरनेट इंटरफ़ेस शामिल है।



2

एक अच्छा स्थानीय विकास फीडबैक लूप होना कुबेरनेट्स पारिस्थितिकी तंत्र में तेजी से विकास का विषय है।

इस प्रश्न को तोड़ते हुए, कुछ उपकरण हैं जो मेरा मानना ​​है कि इस लक्ष्य का अच्छी तरह से समर्थन करते हैं।

मैक कुबेरनेट्स के लिए डॉकर

मैक कुबेरनेट्स के लिए डॉकर ( डॉकर डेस्कटॉप जेनेरिक क्रॉस प्लेटफॉर्म का नाम है) स्थानीय विकास के लिए एक उत्कृष्ट विकल्प प्रदान करता है। वर्चुअलाइजेशन के लिए, यह हाइपरकिट का उपयोग करता है जो कि वर्चुअलबॉक्स के बजाय मैकओएस में देशी हाइपरवाइजर फ्रेमवर्क पर बनाया गया है।

कुबेरनेट्स सुविधा को पहली बार जनवरी 2018 में एज चैनल पर बीटा के रूप में जारी किया गया था और अप्रैल 2018 में प्रमाणित कुबेरनेट्स बनने और जुलाई 2018 में स्थिर चैनल में स्नातक होने के बाद से एक लंबा सफर तय किया है ।

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

संचालन, पतवार

जहां तक ​​आपके कोड को वितरित करने और स्थानीय रूप से अपडेट खींचने की बात है, हेल्म सबसे लोकप्रिय विकल्पों में से एक है। आप अपने अनुप्रयोगों को CI / CD के माध्यम से Helm चार्ट (और अंतर्निहित डॉकर चित्रों के रूप में प्रकाशित कर सकते हैं, जिसे वे संदर्भित करते हैं)। फिर आप इन चार्ट्स को अपनी हेल्म चार्ट रजिस्ट्री से स्थानीय स्तर पर खींच सकते हैं और अपने स्थानीय क्लस्टर पर अपग्रेड कर सकते हैं।

Azure Draft

आप सरल स्थानीय चित्र को करने के लिए एज़्योर ड्राफ्ट जैसे टूल का उपयोग कर सकते हैं और पहेली के उस टुकड़े को स्वचालित करने के लिए, सामान्य भाषा के टेम्पलेट से बिल्ड हेल्प की तरह, सामान्य हेल्म चार्ट बना सकते हैं।

Skaffold

स्केफोल्ड एज़्योर ड्राफ्ट की तरह है लेकिन अधिक परिपक्व, दायरे में बहुत व्यापक, और Google द्वारा बनाया गया है। यह एक बहुत ही प्लगेबल आर्किटेक्चर है। मुझे लगता है कि भविष्य में अधिक लोग इसका उपयोग कुबेरनेट्स के लिए स्थानीय ऐप विकास के लिए करेंगे।

यदि आपने React का उपयोग किया है, तो मैं Skaffold को " कुबेरनेट्स के लिए क्रिएट रिएक्ट ऐप " के रूप में समझता हूं ।

कुबेरनेट्स पर प्रस्ताव या रचना

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

Kompose एक डॉकटर कंपोज टू कुबेरनेट्स कनवर्टर है। यह किसी के लिए पहले से ही स्थानीय स्तर पर कंटेनरों के संग्रह के रूप में अपने अनुप्रयोगों को चलाने के लिए एक उपयोगी मार्ग हो सकता है।

कुबेरनेट्स पर कम्पोज़ एक हाल ही में खुली (दिसंबर 2018) डॉकटर की पेशकश है जो एक कस्टम नियंत्रक के माध्यम से सीधे कुबेरनेट क्लस्टर में डॉकर कंपोज़ फ़ाइलों को तैनात करने की अनुमति देता है।


1

Kubespary स्थानीय समूहों की स्थापना में सहायक है। अधिकतर, मैंने स्थानीय मशीन पर योनि आधारित क्लस्टर का उपयोग किया।

कुब्स्प्रय विन्यास आप इन चरों को वांछित कुबेरनेट संस्करण में बदल सकते हैं।


1

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

यही कारण है कि मैंने microk8sकुबेरनेट पर विकास के लिए स्विच किया और मुझे यह पसंद है। microk8sDNS, लोकल-स्टोरेज, डैशबोर्ड, istio, ingress और बहुत कुछ का समर्थन करता है, जो कुछ भी आपको अपने माइक्रोसर्विस का परीक्षण करने की आवश्यकता है।

यह आपके स्थानीय वातावरण से पृथक एक तेज और हल्के अपस्ट्रीम कुबेरनेट्स स्थापना के लिए डिज़ाइन किया गया है। यह अलगाव एक एकल स्नैप पैकेज में कुबेरनेट्स, डॉकर.आईओ, आईपीटेबल्स, और सीएनआई के लिए सभी बायनेरिज़ की पैकेजिंग द्वारा प्राप्त किया जाता है।

एक एकल नोड कुबेरनेट क्लस्टर एक मिनट के भीतर एकल कमांड के साथ स्थापित किया जा सकता है:

snap install microk8s --classic

सुनिश्चित करें कि आपके सिस्टम में कोई डॉकटर या क्यूबलेट सेवा नहीं है। Microk8sस्वचालित रूप से सभी आवश्यक सेवाओं को स्थापित करेगा।

अन्य ऐड ऑन को सक्षम करने के लिए कृपया निम्नलिखित लिंक पर एक नज़र डालें microk8s

https://github.com/ubuntu/microk8s

आप स्थिति का उपयोग करके देख सकते हैं:

velotio@velotio-ThinkPad-E470:~/PycharmProjects/k8sClient$ microk8s.status
microk8s is running
addons:
ingress: disabled
dns: disabled
metrics-server: disabled
istio: disabled
gpu: disabled
storage: disabled
dashboard: disabled
registry: disabled

> सुनिश्चित करें कि आपके सिस्टम में कोई डॉकटर या क्यूबलेट सेवा नहीं है। लेकिन मेरे पास डॉकटर पहले से ही स्थानीय रूप से स्थापित है, और मैं कुबेरनेट्स के अलावा कंटेनर चला रहा हूं। इसका मतलब है कि मैं स्थानीय स्तर पर माइक्रो -8 स्थापित नहीं कर सकता हूं?
अत्तिला सेसेमी

1

पर एक नज़र डालें https://github.com/okteto/okteto और Okteto बादल । मान प्रस्ताव को स्थानीय विकास का अनुभव करने की तुलना में स्थानीय रूप से काम करने से पहले करना होता है, जहां आप हॉट-रीलोड, वृद्धिशील बिल्ड, डीबगर्स हो सकते हैं ... लेकिन आपके सभी स्थानीय परिवर्तन तुरंत एक दूरस्थ कंटेनर में सिंक्रनाइज़ किए जाते हैं। दूरस्थ कंटेनर आपको क्लाउड की गति तक पहुंच प्रदान करते हैं, नए स्तर के सहयोग की अनुमति देते हैं, और उत्पादन जैसे वातावरण में विकास को एकीकृत करते हैं। साथ ही, यह स्थानीय प्रतिष्ठानों के बोझ को खत्म करता है।


0

जैसा कि रॉबर्ट द्वारा पहले निर्दिष्ट किया गया था, मिनिक्यूब जाने का रास्ता है।

मिनिक्यूब के साथ आरंभ करने के लिए यहां एक त्वरित मार्गदर्शिका है। सामान्य चरण हैं:

  • मिनीब्यूब स्थापित करें

  • मिनीब्यूब क्लस्टर बनाएं (वर्चुअल मशीन में जो विंडोज़ के मामले में मैक या हाइपर वी के लिए वर्चुअलबॉक्स या डॉकर हो सकता है)

  • अपनी एप्लिकेशन फ़ाइल का डॉकर चित्र बनाएं (Dockerfile का उपयोग करके)

  • परिनियोजन बनाकर छवि चलाएँ

  • एक सेवा बनाएं जो आपके आवेदन को उजागर करती है ताकि आप इसे एक्सेस कर सकें।


0

यहाँ पर मैंने विंडोज 10 में कुबेरनेट्स के लिए एक स्थानीय सेट अप किया है: -

  • डॉकर डेस्कटॉप का उपयोग करें

  • डोकर डेस्कटॉप के सेटिंग विकल्प में कुबेरनेट्स को सक्षम करें

  • मेमोरी के लिए आवंटित डिफ़ॉल्ट संसाधन द्वारा डॉकर डेस्कटॉप में 2GB है इसलिए डोकर डेस्कटॉप के साथ कुबेरनेट्स का उपयोग करने से मेमोरी बढ़ जाती है।

  • Kubernetes क्लस्टर से बात करने के लिए क्लाइंट के रूप में kubectl स्थापित करें

  • उपलब्ध क्लस्टर चलाने के लिए कमांड kubectl config get-contexts चलाएं

  • डॉक डेस्कटॉप का उपयोग करने के लिए कमांड kubectl config उपयोग-संदर्भ docker-desktop चलाएँ

  • अपने एप्लिकेशन की डॉक छवि बनाएं

  • उपरोक्त क्लस्टर में बनाई गई छवि की ओर इशारा करते हुए एक यमल फ़ाइल (कुबेरनेट्स में अपनी तैनाती बनाने के लिए वर्णनात्मक विधि) लिखें

  • अपनी प्रत्येक तैनाती के लिए टाइप नोड पोर्ट की एक सेवा को बाहर की दुनिया के लिए उपलब्ध कराने के लिए उजागर करें

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