Terraform प्रदाता चयनकर्ता



हमने Selectel के साथ काम करने के लिए आधिकारिक Terraform प्रदाता लॉन्च किया। यह उत्पाद उपयोगकर्ताओं को इन्फ्रास्ट्रक्चर-ए-कोड पद्धति के माध्यम से संसाधन प्रबंधन को पूरी तरह से लागू करने की अनुमति देता है।

वर्तमान में, प्रदाता वर्चुअल प्राइवेट क्लाउड सर्विस के संसाधन प्रबंधन का समर्थन करता है (बाद में इसे VPC के रूप में संदर्भित किया जाता है)। भविष्य में, हम इसे सेलेल द्वारा प्रदान की गई अन्य सेवाओं के संसाधन प्रबंधन को जोड़ने की योजना बनाते हैं।

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

चयनकर्ता टेराफ़ॉर्म प्रदाता अब निम्नलिखित VPC संसाधनों को प्रबंधित करने की क्षमता प्रदान करता है:

  • परियोजनाओं और उनके कोटा;
  • उपयोगकर्ता, उनकी भूमिकाएं और टोकन;
  • सार्वजनिक सबनेट, जिसमें क्रॉस-क्षेत्रीय और वीआरआरपी शामिल हैं;
  • सॉफ्टवेयर लाइसेंस।

प्रदाता वीपीसी एपीआई के साथ काम करने के लिए हमारी सार्वजनिक गो-लाइब्रेरी का उपयोग करता है। लाइब्रेरी और प्रदाता दोनों ही ओपन-सोर्स हैं, इन्हें जीथब पर विकसित किया जा रहा है:


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


शुरुआत हो रही है


आरंभ करने के लिए, आपको टेराफॉर्म स्थापित करने की आवश्यकता है (इंस्टॉलेशन पैकेज के निर्देश और लिंक आधिकारिक वेबसाइट पर पाए जा सकते हैं)।

काम करने के लिए, प्रदाता को Selectel API कुंजी की आवश्यकता होती है, जो खाते के लिए नियंत्रण कक्ष में बनाई गई है।

सेलेक्ट के साथ काम करने के लिए मैनिफ़ेस्ट टेराफ़ॉर्म का उपयोग करके या तैयार किए गए उदाहरणों के एक सेट का उपयोग करके बनाया जाता है जो हमारे गिथूब भंडार में उपलब्ध हैं: टेराफॉर्म-उदाहरण

उदाहरणों के साथ भंडार दो निर्देशिकाओं में विभाजित है:

  • मॉड्यूल , छोटे पुन: प्रयोज्य मॉड्यूल युक्त होते हैं जो इनपुट के रूप में मापदंडों का एक सेट लेते हैं और संसाधनों के एक छोटे सेट का प्रबंधन करते हैं;
  • उदाहरण , आपस में जुड़े मॉड्यूल के एक पूर्ण सेट के उदाहरण।

टेराफॉर्म को स्थापित करने के बाद, एक सेलेबल एपीआई कुंजी बनाने और उदाहरणों से खुद को परिचित करने के बाद, हम व्यावहारिक उदाहरणों की ओर बढ़ते हैं।

एक स्थानीय डिस्क के साथ एक सर्वर बनाने का उदाहरण


एक परियोजना बनाने के उदाहरण पर विचार करें, एक भूमिका वाला एक उपयोगकर्ता और एक स्थानीय डिस्क के साथ एक वर्चुअल मशीन: टेराफॉर्म-उदाहरण / उदाहरण / vpc / server_local_root_disk

Vars.tf फ़ाइल उन सभी मापदंडों का वर्णन करती है जो मॉड्यूल को कॉल करते समय उपयोग किए जाएंगे। उनमें से कुछ में डिफ़ॉल्ट मान हैं, उदाहरण के लिए, सर्वर निम्न कॉन्फ़िगरेशन के साथ ru-3a ज़ोन में बनाया जाएगा:

variable "server_vcpus" { default = 4 } variable "server_ram_mb" { default = 8192 } variable "server_root_disk_gb" { default = 8 } variable "server_image_name" { default = "Ubuntu 18.04 LTS 64-bit" } 

Main.tf फ़ाइल में, Selectel प्रदाता को प्रारंभ किया गया है:

 provider "selectel" { token = "${var.sel_token}" } 

इस फ़ाइल में SSH कुंजी के लिए डिफ़ॉल्ट मान भी है जो सर्वर पर स्थापित किया जाएगा:

 module "server_local_root_disk" { ... server_ssh_key = "${file("~/.ssh/id_rsa.pub")}" } 

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

इस फ़ाइल में आगे Project_with_user और server_local_root_disk मॉड्यूल लॉन्च किए गए हैं, जो आवश्यक संसाधनों का प्रबंधन करते हैं।

हम इन मॉड्यूलों का अधिक विस्तार से विश्लेषण करेंगे।

एक भूमिका के साथ एक परियोजना और उपयोगकर्ता बनाना


पहला मॉड्यूल एक परियोजना और इस परियोजना में एक भूमिका के साथ एक उपयोगकर्ता बनाता है: टेराफॉर्म-उदाहरण / मॉड्यूल / vpc / project_with_user

बनाया गया उपयोगकर्ता ओपनस्टैक में लॉग इन करने और अपने संसाधनों का प्रबंधन करने में सक्षम होगा। मॉड्यूल सरल है और केवल तीन संस्थाओं का प्रबंधन करता है:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2।

एक स्थानीय डिस्क के साथ एक वर्चुअल सर्वर बनाना


दूसरा मॉड्यूल ओपनस्टैक ऑब्जेक्ट्स का प्रबंधन करता है जो एक स्थानीय डिस्क के साथ सर्वर बनाने के लिए आवश्यक है।

आपको कुछ ऐसे तर्कों पर ध्यान देना चाहिए जो इस मॉड्यूल में ओपनस्टैक_कंप्यूट_स्टेंस_टीवी 2 के लिए निर्दिष्ट हैं:

 resource "openstack_compute_instance_v2" "instance_1" { ... lifecycle { ignore_changes = ["image_id"] } vendor_options { ignore_resize_confirmation = true } } 

Ign_changes तर्क आपको वर्चुअल मशीन बनाने के लिए उपयोग की जाने वाली छवि के लिए आईडी विशेषता परिवर्तन को अनदेखा करने की अनुमति देता है। वीपीसी सेवा में, अधिकांश सार्वजनिक छवियां सप्ताह में एक बार स्वचालित रूप से अपडेट की जाती हैं, और उनकी आईडी भी बदल जाती है। यह OpenStack - Glance घटक की विशेषताओं के कारण है, जिसमें छवियों को अपरिवर्तनीय निकाय माना जाता है।

यदि किसी मौजूदा सर्वर या डिस्क को बनाया या संशोधित किया गया है जो सार्वजनिक छवि की आईडी को image_id तर्क के रूप में उपयोग करता है, तो इस छवि के अपडेट होने के बाद, टेराफ़ॉर्म मेनिफ़ेस्ट को पुनः आरंभ करने से सर्वर या डिस्क को फिर से बनाया जाएगा। Ign_changes तर्क का उपयोग करने से इस स्थिति से बचा जाता है।

नोट: ign_changes का तर्क काफी समय पहले टेराफॉर्म में दिखाई दिया था: # 2525 को खींचें

स्थानीय डिस्क, कोर या सर्वर मेमोरी को सफलतापूर्वक आकार देने के लिए ign_resize_confirmation तर्क की आवश्यकता है। इस तरह के बदलाव OpenStack Nova घटक के माध्यम से किए जाते हैं, जो रिसाइज़ अनुरोध का उपयोग करते हैं। डिफ़ॉल्ट रूप से, नोवा एक रिक्वेस्ट रिक्वेस्ट के बाद सर्वर को वेरिफाइ_राइज़ स्टेटस में डाल देता है और यूज़र से अतिरिक्त पुष्टि की प्रतीक्षा करता है। हालांकि, इस व्यवहार को बदला जा सकता है ताकि नोवा उपयोगकर्ता से अतिरिक्त कार्यों की प्रतीक्षा न करें।

निर्दिष्ट तर्क Terraform को सर्वर के लिए Ver_resize स्थिति की प्रतीक्षा नहीं करने देता है और इसके मापदंडों को बदलने के बाद सर्वर को सक्रिय स्थिति में रहने के लिए तैयार किया जाता है। तर्क OpenStack टेराफ़ॉर्म प्रदाता के संस्करण 1.10.0 से उपलब्ध है: # 422 को खींचें

संसाधन निर्माण


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

नोट: यह समस्या अभी तक टेराफ़ॉर्म में हल नहीं की गई है, आप # 2430 के अंक में जीथूब पर इसकी चर्चा का पालन कर सकते हैं और # 4149 जारी कर सकते हैं।

संसाधन बनाने के लिए, हम टेराफ़ॉर्म-उदाहरणों / उदाहरणों / vpc / server_local_root_disk डायरेक्टरी में जाएंगे , इसकी सामग्री इस प्रकार होनी चाहिए:

 $ ls README.md main.tf vars.tf 

हम कमांड का उपयोग करके मॉड्यूल को इनिशियलाइज़ करते हैं:

 $ terraform init 

आउटपुट दिखाता है कि टेराफॉर्म उपयोग किए गए प्रदाताओं के नवीनतम संस्करणों को डाउनलोड करता है और उदाहरण में वर्णित सभी मॉड्यूल की जांच करता है।

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

  • sel_account अपने सेलेक्ट अकाउंट नंबर के साथ;
  • सेलेल एपीआई के लिए आपकी कुंजी के साथ sel_token ;
  • ओपनस्टैक उपयोगकर्ता के लिए user_password पासवर्ड के साथ।

पहले दो चर के लिए मान नियंत्रण कक्ष से लिया जाना चाहिए।

अंतिम चर के लिए, आप किसी भी पासवर्ड के बारे में सोच सकते हैं।

मॉड्यूल का उपयोग करने के लिए, कमांड चलाने से SEL_ACCOUNT , SEL_TOKEN और USER_PASSWORD मानों को बदलना आवश्यक है:

 $ env \ TF_VAR_sel_account=SEL_ACCOUNT \ TF_VAR_sel_token=SEL_TOKEN \ TF_VAR_user_password=USER_PASSWORD \ terraform apply -target=module.project_with_user 

टेराफॉर्म कमांड को चलाने के बाद, यह दिखाएगा कि वह कौन से संसाधन बनाना चाहता है और पुष्टि की आवश्यकता होगी:

 Plan: 3 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes 

प्रोजेक्ट, उपयोगकर्ता और भूमिका तैयार हो जाने के बाद, आप शेष संसाधन बनाना शुरू कर सकते हैं:

 $ env \ TF_VAR_sel_account=SEL_ACCOUNT \ TF_VAR_sel_token=SEL_TOKEN \ TF_VAR_user_password=USER_PASSWORD \ terraform apply 

संसाधन बनाते समय, एक बाहरी आईपी पते के साथ टेराफॉर्म आउटपुट पर ध्यान दें, जिस पर निर्मित सर्वर सुलभ होगा:

 module.server_local_root_disk.openstack_networking_floatingip_associate_v2.association_1: Creating... floating_ip: "" => "xxxx" 

आप निर्दिष्ट IP पर SSH के माध्यम से बनाई गई वर्चुअल मशीन के साथ काम कर सकते हैं।

संसाधन संपादन


टेराफॉर्म के माध्यम से संसाधन बनाने के अलावा, उन्हें संशोधित भी किया जा सकता है।

उदाहरण के लिए, उदाहरणों / vpc / server_local_root_disk / main.tf फ़ाइल में server_vcpus और server_ram_mb के मानों को बदलकर हमारे सर्वर के लिए कोर और मेमोरी की संख्या बढ़ाएँ :

 - server_vcpus = "${var.server_vcpus}" - server_ram_mb = "${var.server_ram_mb}" + server_vcpus = 8 + server_ram_mb = 10240 

उसके बाद, हम जाँचते हैं कि यह निम्नलिखित कमांड का उपयोग करने के लिए क्या बदलाव लाएगा:

 $ env \ TF_VAR_sel_account=SEL_ACCOUNT \ TF_VAR_sel_token=SEL_TOKEN \ TF_VAR_user_password=USER_PASSWORD \ terraform plan 

नतीजतन, टेराफॉर्म ने संसाधनों को ओपनस्टैक_कंप्यूट_स्टांस_वी 2 और ओपनस्टैक_कंप्यूट_फ्लेवर_वी 2 में बदलाव किया

कृपया ध्यान दें कि इससे निर्मित वर्चुअल मशीन का रिबूट होगा।

नए वर्चुअल मशीन कॉन्फ़िगरेशन को लागू करने के लिए, टेराफॉर्म अप्लाई कमांड का उपयोग करें, जिसे हम पहले ही चला चुके हैं।

सभी निर्मित वस्तुओं को VPC कंट्रोल पैनल में प्रदर्शित किया जाएगा:



हमारे उदाहरण के भंडार में, आप नेटवर्क ड्राइव के साथ वर्चुअल मशीन बनाने के लिए मैनिफ़ेस्ट भी देख सकते हैं।

कुबेरनेट्स क्लस्टर उदाहरण


अगले उदाहरण के लिए आगे बढ़ने से पहले, हम पहले से बनाए गए संसाधनों को साफ कर देंगे। ऐसा करने के लिए, प्रोजेक्ट रूट टेराफ़ॉर्म-उदाहरण / उदाहरण / vpc / server_local_root_disk में, ओपनस्टैक ऑब्जेक्ट्स को हटाने के लिए कमांड चलाएँ:

 $ env \ TF_VAR_sel_account=SEL_ACCOUNT \ TF_VAR_sel_token=SEL_TOKEN \ TF_VAR_user_password=USER_PASSWORD \ terraform destroy -target=module.server_local_root_disk 

इसके बाद, Selectel VPC API ऑब्जेक्ट क्लीनअप कमांड चलाएँ:

 $ env \ TF_VAR_sel_account=SEL_ACCOUNT \ TF_VAR_sel_token=SEL_TOKEN \ TF_VAR_user_password=USER_PASSWORD \ terraform destroy -target=module.project_with_user 

दोनों ही मामलों में, आपको सभी वस्तुओं को हटाने की पुष्टि करनी होगी:

 Do you really want to destroy all resources? Terraform will destroy all your managed infrastructure, as shown above. There is no undo. Only 'yes' will be accepted to confirm. Enter a value: yes 

निम्न उदाहरण टेराफॉर्म-उदाहरण / उदाहरण / vpc / kubernetes_cluster निर्देशिका में है

यह उदाहरण एक परियोजना बनाता है, एक परियोजना में एक भूमिका के साथ एक उपयोगकर्ता, और एक कुबेरनेट क्लस्टर उठाता है। Vars.tf फ़ाइल में, आप डिफ़ॉल्ट मान देख सकते हैं, जैसे नोड्स की संख्या, उनकी विशेषताएँ, कुबेरनेट्स का संस्करण, और बहुत कुछ।

संसाधन बनाने के लिए, पहले उदाहरण के समान, सबसे पहले, हम मॉड्यूल को इनिशियलाइज़ करेंगे और project_with_user मॉड्यूल संसाधन बनाएंगे , और फिर बाकी बनाएँ:

 $ terraform init $ env \ TF_VAR_sel_account=SEL_ACCOUNT \ TF_VAR_sel_token=SEL_TOKEN \ TF_VAR_user_password=USER_PASSWORD \ terraform apply -target=module.project_with_user $ env \ TF_VAR_sel_account=SEL_ACCOUNT \ TF_VAR_sel_token=SEL_TOKEN \ TF_VAR_user_password=USER_PASSWORD \ terraform apply 

हम ओपनस्टैक मैग्नम घटक के माध्यम से कुबेरनेट समूहों के निर्माण और प्रबंधन से गुजरते हैं। आप हमारे पिछले लेखों में , साथ ही साथ ज्ञानकोष में क्लस्टर के साथ कैसे काम करें, इसके बारे में अधिक जान सकते हैं।

क्लस्टर तैयार करने के दौरान, डिस्क, वर्चुअल मशीन बनाई जाएगी और सभी आवश्यक घटक स्थापित किए जाएंगे। तैयारी में लगभग 4 मिनट लगते हैं, जिस समय टेराफ़ॉर्म फॉर्म के संदेश प्रदर्शित करेगा:

 module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed) 

इंस्टॉलेशन पूरा होने के बाद, Terraform आपको सूचित करेगा कि क्लस्टर तैयार है और इसकी पहचानकर्ता को प्रदर्शित करता है:

 module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Creation complete after 4m20s (ID: 3c8...) Apply complete! Resources: 6 added, 0 changed, 0 destroyed. 

कुब्लेट उपयोगिता के माध्यम से निर्मित कुबेरनेट क्लस्टर का प्रबंधन करने के लिए, आपको क्लस्टर एक्सेस फ़ाइल प्राप्त करनी होगी। ऐसा करने के लिए, अपने खाते की परियोजनाओं की सूची में टेराफॉर्म के माध्यम से बनाई गई परियोजना पर जाएं:



अगला, xxxxxx.selvpc.ru फॉर्म के लिंक का पालन करें, जो परियोजना के नाम के नीचे प्रदर्शित किया गया है:



लॉगिन जानकारी के रूप में टेराफॉर्म के माध्यम से बनाए गए उपयोगकर्ता नाम और पासवर्ड का उपयोग करें। यदि आपने हमारे उदाहरण के लिए vars.tf या main.tf नहीं बदला है, तो उपयोगकर्ता के पास tf_user नाम होगा । एक पासवर्ड के रूप में, चर TF_VAR_user_password के मान का उपयोग करें, जो कि निर्दिष्ट किया गया था जब टेराफ़ॉर्म लागू पहले चलाया गया था।

परियोजना के अंदर, आपको कुबेरनेट्स टैब पर जाने की आवश्यकता है:



यहां टेराफॉर्म के माध्यम से एक क्लस्टर बनाया गया है। आप "एक्सेस" टैब पर kubectl के लिए फ़ाइल डाउनलोड कर सकते हैं:



उसी टैब में kubectl स्थापित करने और डाउनलोड किए गए config.yaml का उपयोग करने के निर्देश हैं।

Kubectl शुरू करने और पर्यावरण चर KUBECONFIG सेट करने के बाद , आप Kubernetes का उपयोग कर सकते हैं:

 $ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-9578f5c87-g6bjf 1/1 Running 0 8m kube-system coredns-9578f5c87-rvkgd 1/1 Running 0 6m kube-system heapster-866fcbc879-b6998 1/1 Running 0 8m kube-system kube-dns-autoscaler-689688988f-8cxhf 1/1 Running 0 8m kube-system kubernetes-dashboard-7bdb5d4cd7-jcjq9 1/1 Running 0 8m kube-system monitoring-grafana-84c97bb64d-tc64b 1/1 Running 0 8m kube-system monitoring-influxdb-7c8ccc75c6-dzk5f 1/1 Running 0 8m kube-system node-exporter-tf-cluster-rz6nggvs4va7-minion-0 1/1 Running 0 8m kube-system node-exporter-tf-cluster-rz6nggvs4va7-minion-1 1/1 Running 0 8m kube-system openstack-cloud-controller-manager-8vrmp 1/1 Running 3 8m prometeus-monitoring grafana-76bcb7ffb8-4tm7t 1/1 Running 0 8m prometeus-monitoring prometheus-75cdd77c5c-w29gb 1/1 Running 0 8m 

टेराफॉर्म के माध्यम से क्लस्टर नोड्स की संख्या आसानी से बदल जाती है।
मुख्य मान मुख्य फ़ाइल में निर्दिष्ट किया गया है:

 cluster_node_count = "${var.cluster_node_count}" 

यह मान vars.tf से प्रतिस्थापित किया गया है :



 variable "cluster_node_count" { default = 2 } 

आप या तो vars.tf में डिफ़ॉल्ट मान को बदल सकते हैं, या मुख्य मूल्य को सीधे main.tf में निर्दिष्ट कर सकते हैं:

 - cluster_node_count = "${var.cluster_node_count}" + cluster_node_count = 3 

परिवर्तनों को लागू करने के लिए, पहले उदाहरण के मामले में, टेराफ़ॉर्म लागू कमांड का उपयोग करें:

 $ env \ TF_VAR_sel_account=SEL_ACCOUNT \ TF_VAR_sel_token=SEL_TOKEN \ TF_VAR_user_password=USER_PASSWORD \ terraform apply 

जब नोड्स की संख्या में परिवर्तन होता है, तो क्लस्टर उपलब्ध रहेगा। टेराफॉर्म के माध्यम से एक नोड जोड़ने के बाद, आप इसे अतिरिक्त कॉन्फ़िगरेशन के बिना उपयोग कर सकते हैं:

 $ kubectl get nodes NAME STATUS ROLES AGE VERSION tf-cluster-rz6nggvs4va7-master-0 Ready,SchedulingDisabled master 8m v1.12.4 tf-cluster-rz6nggvs4va7-minion-0 Ready <none> 8m v1.12.4 tf-cluster-rz6nggvs4va7-minion-1 Ready <none> 8m v1.12.4 tf-cluster-rz6nggvs4va7-minion-2 Ready <none> 3m v1.12.4 

निष्कर्ष


इस लेख में, हमने टेराफॉर्म के माध्यम से "वर्चुअल प्राइवेट क्लाउड" के साथ काम करने के बुनियादी तरीकों के बारे में सीखा। हमें खुशी होगी अगर आप आधिकारिक टेराफॉर्म प्रदाता सिलेक्टर का उपयोग करें और प्रतिक्रिया दें।

Terraform प्रदाता Selectel के सभी पाए गए बग्स को Github के मुद्दों के माध्यम से रिपोर्ट किया जा सकता है।

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


All Articles