चीजें गर्म हो रही हैं। समय स्लाइडर पर कुछ दिनों पहले, मैंने Vagrant का प्रदर्शन किया, एक वर्चुअलाइजेशन समाधान जो VirtualBox, KVM और दोस्तों जैसे माना जाने वाले अधिक जटिल सॉफ्टवेयर के लिए एक अच्छा, साफ-सुथरा रैपर बनकर बड़ा लक्ष्य रखता है। इसके अलावा, यह Docker कंटेनर सपोर्ट और क्लाउड सर्वर वातावरण की पेशकश करके सीनियर लीग में खेलता है।
इस मॉडल पर विस्तार करते हुए, हम थोड़ा अलग उपयोग के मामले पर चर्चा करेंगे, बहुत क्लाउडी। CoreOS, जिसका हमने पिछले अभ्यास में उपयोग किया था, एक और खिलाड़ी है जो क्लाउड उन्माद को भुनाने की कोशिश करता है, और यह कुछ बहुत अच्छी क्लस्टर सुविधाएं और स्वचालन प्रदान करता है। आज, हम सीखेंगे कि क्लस्टर कैसे लाया जाए और नेटवर्किंग पहलू पर चर्चा करेंगे, जिसे कुछ हद तक नजरअंदाज किया गया है, और मूल दस्तावेज़ में भी बहुत अच्छी तरह से नहीं समझाया गया है। तो कृपया मेरा अनुसरण करें।
डिस्कवरी टोकन सेटअप
पिछली बार के विपरीत, जब मैंने जानबूझकर Vagrant को Powershell के माध्यम से Windows पर आज़माया था, बस यह नमूना देने के लिए कि इसे कई अलग-अलग तरीकों से किया जा सकता है, हमारा वर्तमान अभ्यास Linux में होगा, सटीक होने के लिए Xubuntu Vivid।
आधिकारिक गाइड का पालन करते हुए, Vagrant के लिए CoreOS सेटअप करना बहुत मुश्किल नहीं है, लेकिन यह उतना तुच्छ भी नहीं है जितना ऑनलाइन संदर्भ आपको विश्वास दिलाएगा। शुरू करने के लिए एक स्पष्ट अधीरता है, और यह झलकती है।
रेपो को क्लोन करने के बाद, आपके पास कई फाइलें होंगी जिन्हें आपको Vagrant को इनिशियलाइज़ और शुरू करने में सक्षम होने के लिए थोड़ा संपादित करने की आवश्यकता होगी। पहली चीज जो आपको करने की आवश्यकता है वह है user-data.sample फाइल को संपादित करना और उसका नाम user-data रखना। सबसे विशेष रूप से, टोकन वाला भाग:
#cloud-config
coreos:
etcd:
# generate a new token for each unique cluster from
https://discovery.etcd.io/new?size=3
# specify the intial size of your cluster with ?size=X
# WARNING: replace each time you 'vagrant destroy'
discovery: https://discovery.etcd.io/<token>
मूल रूप से, CoreOS चल रहे इंस्टेंस को एक-दूसरे की पहचान करने में मदद करने के लिए अद्वितीय पहचानकर्ताओं - जिन्हें टोकन कहा जाता है - का उपयोग करता है। एक ही टोकन वाले सभी होस्ट एक ही झुंड से संबंधित होते हैं, ताकि उन्हें etcd साझा कॉन्फ़िगरेशन और डिस्कवरी सेवा का उपयोग करके केंद्रीकृत तरीके से नियंत्रित किया जा सके।
https://discovery.etcd.io/new?size=<size>
आप अपने खुद के उपयोग कर सकते हैं, या उपरोक्त URL पर जाकर और वांछित क्लस्टर आकार निर्दिष्ट करके एक नया जनरेट कर सकते हैं। डिफ़ॉल्ट कॉन्फ़िगरेशन तीन होस्ट का है। जनरेट किए गए टोकन को लिख लें और इसे कॉन्फ़िगरेशन फाइल में जोड़ें, उदाहरण के लिए:
https://discovery.etcd.io/21e4099c23b52a8403640c2d48cdca6f
हम बाद में देखेंगे कि यह क्यों महत्वपूर्ण है।
क्लस्टर सेटअप
दूसरा भाग यह परिभाषित करना है कि जब Vagrant शुरू होता है तो हम CoreOS के कितने इंस्टेंस चलाना चाहते हैं। यह कुल मिलाकर एक सरल कॉन्फ़िगरेशन है। परिवर्तन को क्लोन किए गए Git डायरेक्टरी के अंदर config.rb.sample फाइल में जोड़ने की आवश्यकता है, और इसका नाम config.rb रखें। हम चार इंस्टेंस के साथ प्रयास करेंगे, बस अद्वितीय और विशेष होने के लिए।
# Size of the CoreOS cluster created by Vagrant
$num_instances=X
क्लस्टर शुरू करें
अब, आप Vagrant चला सकते हैं। यदि आपने ऑनलाइन रिपॉजिटरी क्लोन की है, तो आपके पास पहले से ही वर्तमान डायरेक्टरी में एक डिफ़ॉल्ट Vagrant कॉन्फ़िगरेशन फाइल होगी, इसलिए यदि आप vagrant init आज़माते हैं, तो आपको विफल होना चाहिए:
vagrant init
`Vagrantfile` already exists in this directory. Remove it before
running `vagrant init`.
यदि आपके पास VirtualBox या कोई अन्य प्रासंगिक वर्चुअलाइजेशन सॉफ्टवेयर इंस्टॉल नहीं है, तो जब आप प्रोग्राम शुरू करने का प्रयास करेंगे तो आपको एक और त्रुटि मिलेगी। सुनिश्चित करें कि आप इन छोटी-मोटी परेशानियों को पहले ही हल कर लें।
vagrant up
The provider 'virtualbox' that was requested to back the machine
'core-01' is reporting that it isn't usable on this system. The
reason is shown below:
Vagrant could not detect VirtualBox! Make sure VirtualBox is properly installed. Vagrant uses the `VBoxManage` binary that ships with VirtualBox, and requires this to be available on the PATH. If VirtualBox is installed, please find the `VBoxManage` binary and add it to the PATH environmental variable.
यदि आपने यह भाग सफलतापूर्वक किया है, तो Vagrant शुरू होना चाहिए और CoreOS इंस्टेंस को एक-एक करके बनाना चाहिए। इसमें कुछ समय लग सकता है, और बड़े क्लस्टर को समायोजित करने के लिए आपको अच्छे नेटवर्क बैंडविड्थ और भरपूर मेमोरी की आवश्यकता होगी।
vagrant up
Bringing machine 'core-01' up with 'virtualbox' provider...
Bringing machine 'core-02' up with 'virtualbox' provider...
Bringing machine 'core-03' up with 'virtualbox' provider...
Bringing machine 'core-04' up with 'virtualbox' provider...
==> core-01: Box 'coreos-alpha' could not be found. Attempting to find and install...
core-01: Box Provider: virtualbox
core-01: Box Version: >= 308.0.1
==> core-04: Importing base box 'coreos-alpha'...
==> core-04: Matching MAC address for NAT networking...
==> core-04: Checking if box 'coreos-alpha' is up to date...
==> core-04: Setting the name of the VM: coreos-vagrant_core-04_1431799934824_55775
==> core-04: Fixed port collision for 22 => 2222. Now on port 2202.
==> core-04: Clearing any previously set network interfaces...
==> core-04: Preparing network interfaces based on configuration...
core-04: Adapter 1: nat
core-04: Adapter 2: hostonly
==> core-04: Forwarding ports...
core-04: 22 => 2202 (adapter 1)
==> core-04: Running 'pre-boot' VM customizations...
==> core-04: Booting VM...
==> core-04: Waiting for machine to boot. This may take a few minutes...
core-04: SSH address: 127.0.0.1:2202
core-04: SSH username: core
core-04: SSH auth method: private key
core-04: Warning: Connection timeout. Retrying...
==> core-04: Machine booted and ready!
==> core-04: Setting hostname...
==> core-04: Configuring and enabling network interfaces...
==> core-04: Running provisioner: file...
==> core-04: Running provisioner: shell...
core-04: Running: inline script
एक बार सभी सिस्टम बन जाने के बाद, आप मौजूदा मशीनों और उनकी वर्तमान स्थितियों के बारे में आवश्यक सभी जानकारी प्राप्त करने के लिए vagrant status चला सकते हैं।
नेटवर्किंग
अब वास्तव में दिलचस्प भाग आता है। हमारे पास चार वर्चुअल मशीनें हैं। लेकिन हम उनसे कैसे जुड़ते हैं? हमें एक समान दुविधा का सामना करना पड़ा था जब हम Docker का परीक्षण कर रहे थे, लेकिन फिर हमने अपना रास्ता ढूंढ लिया, और यहां, वही तर्क लागू होता है।
पहला, vagrant ssh कमांड का उपयोग करके चल रही प्रत्येक मशीन से जुड़ना संभव है, जो सभी कुंजियों और बाकी चीजों का ख्याल रखेगा। आपको इसे क्लोन की गई डायरेक्टरी से निष्पादित करना होगा, अन्यथा आपको एक त्रुटि मिलेगी:
vagrant ssh core-02 -- -A
A Vagrant environment or target machine is required to run this
command. Run `vagrant init` to create a new Vagrant environment. Or, get an ID of a target machine from `vagrant global-status` to run this command on. A final option is to change to a directory with a Vagrantfile and to try again.
लेकिन फिर, सही डायरेक्टरी में, यह ठीक काम करना चाहिए:
यदि आप ifconfig चलाते हैं, तो आप देखेंगे कि आपकी सभी मशीनों में कथित तौर पर एक ही IP पता है, और आप उनके बीच रूट नहीं कर सकते। इसके अलावा, VirtualBox इंटरफेस 172.0.0.1 सेगमेंट पर चलता है, इसलिए यह चीजों को थोड़ा और मुश्किल बना देता है। फिर से, वैसा ही जैसा हमने Docker के साथ किया था।
आप हमेशा VirtualBox आंतरिक नेटवर्किंग रेंज का उपयोग कर सकते हैं और फ़ायरवॉल नियमों और रूटिंग को तदनुसार समायोजित कर सकते हैं। हालांकि, यह विधि वास्तव में आपको यह नहीं बताती कि आपकी किस वर्चुअल मशीन का कौन सा विशेष IP पता उपयोग करती है, और इसे तुरंत निर्धारित करना आसान नहीं है। दूसरे शब्दों में, आप इन नंबरों को कहीं से पार्स नहीं कर सकते, और सही जानकारी प्राप्त करने के कुछ अधिक सुंदर तरीके हैं।
लोकलहोस्ट के माध्यम से कनेक्ट करें
यदि आपको याद है, स्टार्टअप के दौरान, Vagrant ने प्रत्येक वर्चुअल मशीन के लिए SSH को लोकलहोस्ट पर चलाने के लिए सेटअप किया, विभिन्न पोर्ट्स का उपयोग करके, 2200 (या इसी तरह) से शुरू होकर। इसलिए यदि आपको अपने क्लाइंट में SSH करने की आवश्यकता है, तो आप इस विकल्प का उपयोग कर सकते हैं:
ssh 127.0.0.1 -p 2202
The authenticity of host '[127.0.0.1]:2202 ([127.0.0.1]:2202)' can't be established.
ED25519 key fingerprint is 32:a0:57:58:b3:55:fc:03:c8:89:7d:7c:cc:6f:85:9d.
Are you sure you want to continue connecting (yes/no)?
कहीं भी IP पते के माध्यम से कनेक्ट करें
हालांकि, उपरोक्त विधि VM से VM संचार के लिए काम नहीं करती, और हमें कुछ और चाहिए। यह वह जगह है जहां डिस्कवरी भाग वास्तव में काम आता है। एक बार आपका क्लस्टर चलने के बाद, आप फिर से उस URL पर नेविगेट कर सकते हैं, और अब यह कुछ बदसूरत लेकिन उपयोगी JSON सामग्री से भरा होगा:
कुंजियों और मानों पर ध्यान दें। प्रत्येक प्रविष्टि का अपना IP पता होता है, उदा. 172.17.8.103, और आप इसे इस आउटपुट से पार्स कर सकते हैं। उत्कृष्ट। अब हम आंतरिक पतों को जानते हैं, और हम उनका उपयोग सीधे अपने क्लाइंट से जुड़ने के लिए कर सकते हैं, और अधिक महत्वपूर्ण बात, उन्हें अपने साथियों के साथ संवाद करने की अनुमति दे सकते हैं।
एक छोटा सा लापता टुकड़ा यह है कि हमें कोर यूजर का पासवर्ड नहीं पता, इसलिए हम प्रदान की गई कुंजी का उपयोग करेंगे, जो vagrant.d सब-डायरेक्टरी के अंदर स्थित है। कुंजी जोड़ें, और फिर आप निर्बाध रूप से कनेक्ट कर सकते हैं। हमने इसे अपने पहले गाइड में देखा है।
पोर्ट फॉरवर्डिंग
हमने वास्तव में अपने बॉक्स के लिए कॉन्फ़िगरेशन भाग में ज्यादा छेड़छाड़ नहीं की है, लेकिन इस बिंदु पर, अब जब हम अपने चल रहे इंस्टेंस के IP पते जानते हैं, तो हम वास्तव में रचनात्मक होना शुरू कर सकते हैं। उदाहरण के लिए, पोर्ट फॉरवर्डिंग, जो सेवाएं चलाने वाली वर्चुअल मशीनों के लिए बहुत मूल्यवान है।
आवश्यक परिवर्तनों को Vagrantfile के अंदर निर्देशों के रूप में प्रदान करने की आवश्यकता है। आप कई सेटअप के लिए कई कॉन्फ़िगरेशन रख सकते हैं - बिल्कुल Dockerfiles की तरह। उदाहरण के लिए, HTTPS पोर्ट को फॉरवर्ड करना होगा:
config.vm.forward_port 443, <host port>
यदि आपने मेरे Docker लेखों का पालन किया है, तो सब कुछ बहुत आसान है। होस्ट पोर्ट, क्लाइंट पोर्ट, और बॉब्स योर अंकल। आपके पास प्रत्येक बॉक्स के लिए कई घोषणाएं हो सकती हैं। फिर, आप मैन्युअल रूप से फ़ायरवॉल नियमों को भी कॉन्फ़िगर कर सकते हैं, यदि आपको अपने सिस्टम का पूर्ण औरutter नियंत्रण चाहिए। फिर से, यह सिर्फ एक टीज़र है, और हम भविष्य में इसके साथ छेड़छाड़ करने में अधिक समय व्यतीत करेंगे।
अब, निश्चित रूप से, अगला कदम Docker को प्लग इन करना है, और समान डिफ़ॉल्ट रेंज के साथ, जो शायद संयोग से नहीं है, आप क्लस्टर, कंटेनर, समानांतर निष्पादन, और अन्य फैंसी अवधारणाओं के साथ खेलना शुरू कर सकते हैं। यही कारण है कि Vagrant प्लगइन्स के साथ आता है, जिन पर हम एक अलग लेख में चर्चा करेंगे। वैसे भी, एक बार जब आप अपना काम पूरा कर लें, तो बस इंस्टेंस को नष्ट कर दें।
अधिक पठन
Dedoimedo के फोर्ज से कुछ अतिरिक्त अच्छी चीजें:
यहां CoreOS क्विकस्टार्ट गाइड है; थोड़ा भारी हो सकता है
एक सुपरवाइज़र ट्यूटोरियल, जो etcd के समान कुछ क्षमताएं प्रदान करता है
KVM और VirtualBox साइड-बाय-साइड कॉन्फ़िगरेशन ट्वीक
निष्कर्ष
Vagrant, साथ ही CoreOS, दिलचस्प, जंगली, विद्रोही विचारों की तरह लगते हैं। मैं अभी तक आश्वस्त नहीं हूँ कि व्यावसायिक वातावरण में उनका कितना मूल्य है, हालांकि रैपर तकनीकें जो वास्तविक काम के गंदे विवरण को छिपाती हैं, फल-फूल रही हैं और हर समय अधिक लोकप्रिय होती जा रही हैं। हर कोई फ्रंटएंड और ऑर्केस्ट्रेशन टूल चाहता है, एकमात्र समस्या यह है कि बाजार इतना चंचल, अस्थिर है, कोई मानक नहीं हैं, और लोग Python, Ruby, और JSON जैसी बदसूरत चीजों का उपयोग करते हैं। लेकिन कोई बात नहीं।
हमने अज्ञात आतंक के एक और छोटे टुकड़े को जीत लिया है, और आप Vagrant और CoreOS दोनों से कुछ अधिक परिचित हैं। अच्छा है, क्योंकि हमारा अगला भाग इनमें से कुछ क्लस्टर सेवाओं और क्या-क्या के साथ खेलना शुरू करना होगा। और यह तो बस शुरुआत है।
याद रखें, मुझे यह सब करना है, इसलिए आने वाले महीनों में, हम बहुत अधिक सब कुछ का पता लगाएंगे, जिसमें Fleet, Kubernetes, Mesos, Etcd, और कई अन्य शानदार प्रोजेक्ट शामिल हैं, लेकिन इन्हीं तक सीमित नहीं। हम CoreOS और अन्य को क्लाउड प्रदाताओं से भी जोड़ेंगे, वितरित और समानांतर फाइल सिस्टम, Jenkins, Ansible जैसे ऑटोमेशन टूल्स के साथ छेड़छाड़ करेंगे, अभी और नेम-ड्रॉपिंग और बज़ ताकि आप उल्टी करना चाहें, और फिर कुछ। बने रहें।
चीयर्स।