अपने पिछले लेख में, मैंने माइक्रोसर्विसेज की आकर्षक दुनिया - माइक्रोसर्विस आर्किटेक्चर पैटर्न भाग 1: डीकंपोजिशन पैटर्न के बारे में विस्तार से बताया। यह माइक्रोसर्विसेज और उनके पैटर्न पर मेरी व्यापक लेख श्रृंखला की शुरुआत थी।
इस लेख में, हमारा लक्ष्य व्यावहारिक अनुप्रयोग के माध्यम से सीआई/सीडी प्रक्रिया के रहस्य को उजागर करना है। हम आपको चरण-दर-चरण ट्यूटोरियल के माध्यम से ले जाएंगे, इसे मॉड्यूल द्वारा मॉड्यूल में विभाजित करेंगे, जहां आप मैन्युअल रूप से सीआई/सीडी पाइपलाइन का निर्माण करेंगे। ऐसा करने के लिए, हम AWS, Docker, Kubernetes, Ansible, Git, Apache Maven और Zenkins जैसे समकालीन DevOps टूल की शक्ति का उपयोग करेंगे। तो चलिए शुरू करते हैं यह यात्रा!
AWS खाता बनाएं बटन पर क्लिक करें।
//console.aws.amazon.com/console/home पर जाएं। साइन इन बटन पर क्लिक करें.
EC2 सेवा पर क्लिक करके EC2 वर्चुअल सर्वर चुनें।
बटन लॉन्च इंस्टेंस पर क्लिक करें।
"नाम और टैग" अनुभाग पर जाएँ।
"नाम" अनुभाग में नए AWS EC2 वर्चुअल सर्वर इंस्टेंस के लिए एक नाम प्रदान करें।
आप ''अतिरिक्त टैग जोड़ें'' पर क्लिक करके अपने वर्चुअल सर्वर के लिए अतिरिक्त टैग भी जोड़ सकते हैं।
"एप्लिकेशन और ओएस इमेज (अमेज़ॅन मशीन इमेज)" अनुभाग पर जाएं।
वर्चुअल सर्वर के साथ मुफ़्त में खेलने के लिए:
''इंस्टेंस प्रकार'' अनुभाग पर जाएँ।
वर्चुअल सर्वर के साथ मुफ़्त में खेलने के लिए:
इंस्टेंस प्रकार अनुभाग में फ्री टियर पात्र टैग के साथ एक प्रकार का चयन करें।
मेरे लिए यह t2.micro (परिवार: t2 1cCPU 1 GiB मेमोरी वर्तमान पीढ़ी: सत्य) है।
''भंडारण कॉन्फ़िगर करें'' अनुभाग पर जाएँ।
वर्चुअल सर्वर के साथ मुफ़्त में खेलने के लिए:
डिफ़ॉल्ट सेटिंग्स न बदलें. फ्री टियर पात्र ग्राहक 30 जीबी ईबीएस सामान्य प्रयोजन (एसएसडी) या मैग्नेटिक स्टोरेज प्राप्त कर सकते हैं।
"नेटवर्क सेटिंग" अनुभाग पर जाएँ।
डिफ़ॉल्ट रूप से, आपका वर्चुअल सर्वर ( टाइप - एसएसएच, प्रोटोकॉल - टीसीपी, पोर्ट - 22 ) के माध्यम से पहुंच योग्य है। यदि आपको अतिरिक्त कनेक्शन प्रकारों की आवश्यकता है, तो अतिरिक्त इनबाउंड सुरक्षा समूह नियम जोड़कर उन्हें जोड़ें।
''कुंजी जोड़ी (लॉगिन)'' अनुभाग पर जाएँ।
यदि आपने अभी तक "कुंजी-जोड़ी" नहीं बनाई है:
"लॉन्च इंस्टेंस" बटन पर क्लिक करके EC2 वर्चुअल सर्वर इंस्टेंस लॉन्च करें।
फिर आपको " सभी उदाहरण देखें" बटन पर क्लिक करके "उदाहरण" अनुभाग पर जाना चाहिए।
अब आप देख सकते हैं कि आपका AWS EC2 वर्चुअल सर्वर इंस्टेंस चल रहा है।
इस चरण को पूरा करने के लिए इस ट्यूटोरियल के [मॉड्यूल 1]: एडब्ल्यूएस ईसी2 वर्चुअल सर्वर अनुभाग के निर्देशों का पालन करें और जेनकिंससर्वर नाम से एक ईसी2 वर्चुअल सर्वर इंस्टेंस बनाएं।
सुरक्षा समूह सेटअप जोड़ना न भूलें. यह जेनकींस और एसएसएच को क्रमशः पोर्ट 8080 और 22 पर काम करने की अनुमति देता है।
अपने EC2 वर्चुअल सर्वर इंस्टेंस को अलग करने के लिए "JenkinsServer" नाम का उपयोग करें।
नए "जेनकिंससर्वर" AWS EC2 उदाहरण के लिए "CI_CD_Pipeline" सुरक्षा समूह और "CI_CD_Pipeline_Key_Pair" बनाएं। आप लेख में आगे उनका पुन: उपयोग कर सकते हैं।
AWS कंसोल होम पेज → EC2 मैनेजमेंट कंसोल डैशबोर्ड → इंस्टेंसेस पर जाएँ।
फिर आपको जेनकिंस सर्वर चुनना चाहिए और फिर "कनेक्ट" बटन पर क्लिक करना चाहिए।
फिर आपको यह वेब पेज दिखाई देगा। आपको फिर से "कनेक्ट" बटन पर क्लिक करना चाहिए।
sudo wget -O /etc/yum.repos.d/jenkins.repo //pkg.jenkins.io/redhat-stable/jenkins.repo
अब जेनकींस डाउनलोड हो गया है।
जेनकिंस कुंजी को आयात करने के लिए हमें "sudo rpm.." कमांड को कॉपी करना होगा और इसे निष्पादित करना होगा।
sudo rpm --import //pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
इस तरह "आरपीएम" पैकेज प्रबंधक यह सत्यापित कर सकता है कि आपके द्वारा इंस्टॉल किए गए जेनकींस पैकेज बिल्कुल जेनकींस प्रोजेक्ट द्वारा प्रकाशित हैं, और उनके साथ छेड़छाड़ या दूषित नहीं किया गया है।
जेनकींस को चलाने के लिए, हमें अपने EC2 वर्चुअल सर्वर इंस्टेंस पर जावा इंस्टॉल करना होगा।
जावा स्थापित करने के लिए, इस कमांड का उपयोग करें।
sudo amazon-linux-extras install java-openjdk11 -y
सत्यापित करें कि इस कमांड का उपयोग करके जावा सही ढंग से स्थापित किया गया था:
java -version
जेनकींस को चलाने के लिए, आपको हमारे EC2 वर्चुअल सर्वर इंस्टेंस पर फॉन्टकॉन्फिग इंस्टॉल करना होगा।
इस आदेश का प्रयोग करें. sudo yum install fontconfig java-11-openjdk -y
sudo yum install jenkins -y
sudo systemctl start jenkins
sudo systemctl status jenkins
//<your-ec2-ip>:8080
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
अब, चूंकि जेनकींस ठीक काम कर रहा है, आप जेनकींस पाइपलाइन बनाना शुरू कर सकते हैं। जेनकींस पाइपलाइन बनाने के लिए आपको एक नया "फ्रीस्टाइल प्रोजेक्ट" बनाना होगा। एक नया "फ्रीस्टाइल प्रोजेक्ट" बनाने के लिए आपको जेनकिंस डैशबोर्ड पर जाना होगा और "नया आइटम" बटन पर क्लिक करना होगा।
जीथब "फ्रीस्टाइल प्रोजेक्ट" का नाम दर्ज करें ("पाइपलाइन" नाम आगे उपयोग किया जाएगा) और फिर "ओके" बटन पर क्लिक करें।
फिर पाइपलाइन का विवरण प्रदान करें।
Git एक वितरित संस्करण नियंत्रण प्रणाली (VCS) है जिसे सॉफ्टवेयर टीमों को एक विशेष प्रकार के डेटाबेस में कोड में हर संशोधन पर नज़र रखने में मदद करने के लिए डिज़ाइन किया गया है। यदि कोई गलती हो जाती है, तो डेवलपर्स घड़ी को पीछे कर सकते हैं और टीम के सभी सदस्यों के लिए व्यवधान को कम करते हुए गलती को ठीक करने में मदद के लिए कोड के पुराने संस्करणों की तुलना कर सकते हैं। वीसीएस विशेष रूप से उपयोगी है
sudo yum install git -y
git --version
अब Git EC2 वर्चुअल सर्वर इंस्टेंस पर ठीक काम कर रहा है।
"जेनकींस प्रबंधित करें" बटन पर क्लिक करें और फिर "प्लगइन्स प्रबंधित करें" बटन पर क्लिक करें।
"उपलब्ध प्लगइन्स" बटन पर क्लिक करें।
Github प्लगइन खोज बॉक्स ढूंढें।
जीथब प्लगइन चुनें.
जीथब प्लगइन चुनें. और फिर "रीस्टार्ट किए बिना इंस्टॉल करें" बटन पर क्लिक करें।
फिर मुख्य पृष्ठ पर, आपको "जेनकींस प्रबंधित करें" बटन पर क्लिक करना होगा और फिर "ग्लोबल टूल कॉन्फ़िगरेशन" बटन पर क्लिक करना होगा।
फिर "लागू करें" और "सहेजें" बटन** पर क्लिक करें।**
बस इसे कॉपी करें और " रिपोजिटरी यूआरएल" इनपुट पर पेस्ट करें। फिर पाइपलाइन के साथ एकीकरण Git को समाप्त करने के लिए "लागू करें" और "सहेजें" बटन पर क्लिक करें।
cd /var/lib/jenkins/workspace/{your pipeline name}
अपाचे मावेन सॉफ्टवेयर विकास में व्यापक रूप से उपयोग किया जाने वाला बिल्ड ऑटोमेशन और प्रोजेक्ट प्रबंधन उपकरण है। यह प्रोजेक्ट निर्भरता को प्रबंधित करके और एक सुसंगत निर्माण जीवनचक्र प्रदान करके कोड के संकलन, परीक्षण और पैकेजिंग की प्रक्रिया को सुव्यवस्थित करता है। मेवेन परियोजना संरचना, निर्भरता और कार्यों को परिभाषित करने के लिए XML-आधारित कॉन्फ़िगरेशन फ़ाइलों (POM फ़ाइलों) का उपयोग करता है, जिससे डेवलपर्स जटिल सॉफ़्टवेयर परियोजनाओं को कुशलतापूर्वक प्रबंधित और तैनात कर सकते हैं।
अपाचे मावेन को डाउनलोड करने के लिए “/opt” निर्देशिका पर जाएं।
cd /opt
sudo wget //dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz
sudo tar -xvzf apache-maven-*.tar.gz
cd ~
इस आदेश का उपयोग करके .bash_profile फ़ाइल संपादित करें।
vi .bash_profile
JAVA_HOME और M2_HOME वेरिएबल जोड़ें।
JAVA_HOME के लिए JDK11 को पथ और M2_HOME वेरिएबल के लिए मावेन निर्देशिका को पथ निर्दिष्ट करें।
sudo find / -name java
वीआईएम का उपयोग कैसे करें
source .bash_profile
$PATH को सत्यापित करने के लिए, इस कमांड का उपयोग करें।
echo $PATH
अपाचे मावेन को सत्यापित करने के लिए, इस कमांड का उपयोग करें।
mvn -v
इसे प्राप्त करने के लिए, इन चरणों का पालन करें:
और फिर "शीर्ष पृष्ठ पर वापस जाएं" बटन पर क्लिक करें।
ऐसा करने के लिए, इन चरणों का पालन करें:
फिर "मावेन" अनुभाग पर जाएँ। "मावेन जोड़ें" बटन पर क्लिक करें। "स्वचालित रूप से इंस्टॉल करें" को अनचेक करें।
फिर नाम और MAVEN_HOME पथ जोड़ें।
"लागू करें" और "सहेजें" बटन पर क्लिक करें।
यहां, आपने अपाचे मावेन जेनकिंस प्लगइन को कॉन्फ़िगर करना समाप्त कर लिया है।
अपाचे मावेन को पाइपलाइन में एकीकृत करने के लिए आपको इन चरणों का पालन करना होगा:
अंत में, आपको पाइपलाइन के साथ अपाचे मावेन के एकीकरण को पूरा करने के लिए "लागू करें" और "सहेजें" बटन पर क्लिक करना चाहिए।
cd /var/lib/jenkins/workspace/{your pipeline name}/target
इस चरण को पूरा करने के लिए इस ट्यूटोरियल के " AWS EC2 वर्चुअल सर्वर इंस्टेंस लॉन्च करें" अनुभाग के निर्देशों का उपयोग करें। सुरक्षा समूह सेटअप जोड़ना न भूलें. यह डॉकर और एसएसएच को क्रमशः पोर्ट 8080 और 22 पर काम करने की अनुमति देता है।
sudo chown ansible-admin:ansible-admin /opt/docker
sudo mkdir /opt/docker
sudo yum install docker -y
आपको Docker को व्यवस्थापकीय विशेषाधिकार देने के लिए वर्तमान उपयोगकर्ता "ansible-admin" को "AnsibleServer" EC2 वर्चुअल सर्वर पर Docker समूह में जोड़ना होगा।
sudo usermod -a -G docker ansible-admin
id ansible-admin
sudo systemctl start docker
sudo systemctl status docker
यदि आपने प्रोजेक्ट "हैलो" का उपयोग किया है जो " [मॉड्यूल 3]: गिट और जीथब" मॉड्यूल में पेश किया गया था, तो आपको एक नया डॉकरफाइल बनाने की आवश्यकता नहीं है क्योंकि इस प्रोजेक्ट रिपॉजिटरी में पहले से ही डॉकरफाइल शामिल है।
FROM eclipse-temurin:17-jre-jammy ENV HOME=/opt/app WORKDIR $HOME ADD hello-0.0.1-SNAPSHOT.jar $HOME ENTRYPOINT ["java", "-jar", "/opt/app/hello-0.0.1-SNAPSHOT.jar" ]
sudo touch Dockerfile
vim Dockerfile
Dockerfile उपयोग के लिए तैयार है।
अब जब आपकी Dockerfile उपयोग के लिए तैयार है, तो अपने प्रोजेक्ट के JAR आर्टिफैक्ट को **"JenkinsServer"**EC2 इंस्टेंस से कॉपी करके और इसे "AnsibleServer" EC2 इंस्टेंस पर पेस्ट करके आगे बढ़ें। यह ध्यान रखना महत्वपूर्ण है कि यह स्थानांतरण आगे पाइपलाइन के माध्यम से स्वचालित हो जाएगा।
इस चरण को पूरा करके, आप अपने द्वारा सेट किए गए डॉकर वातावरण के साथ अपनी डॉकरफ़ाइल का परीक्षण करने के लिए तैयार होंगे।
docker login
इसके साथ, आपने डॉकर में लॉग इन करने की प्रक्रिया पूरी कर ली है और अब परीक्षण के लिए आगे बढ़ने के लिए तैयार हैं।
docker build -t hello:latest .
docker tag hello:latest zufarexplainedit/hello:latest
docker push zufarexplainedit/hello:latest
इस चरण को पूरा करने और Ansible के लिए EC2 वर्चुअल सर्वर इंस्टेंस बनाने के लिए इस ट्यूटोरियल के [मॉड्यूल 1]: AWS EC2 वर्चुअल सर्वर अनुभाग के निर्देशों का पालन करें।
सुरक्षा समूह सेटअप जोड़ना न भूलें. यह Ansible और SSH को क्रमशः पोर्ट 8080 और 22 पर काम करने की अनुमति देता है।
अपने EC2 वर्चुअल सर्वर इंस्टेंस को अलग करने के लिए "AnsibleServer" नाम का उपयोग करें।
आप नए "AnsibleServer" EC2 उदाहरण के लिए "CI_CD_Pipeline" सुरक्षा समूह और "CI_CD_Pipeline_Key_Pair" का पुन: उपयोग कर सकते हैं।
फिर "कनेक्ट" बटन पर क्लिक करें।
फिर आपको यह वेब पेज दिखाई देगा. आपको फिर से "कनेक्ट" बटन पर क्लिक करना चाहिए।
sudo vi /etc/hostname
इस होस्टनाम को "ansible-server" से बदलें। फिर, इसे रीबूट करें।
sudo init 6
अब AWS EC2 वर्चुअल सर्वर इंस्टेंस में एक नया ansible-admin उपयोगकर्ता जोड़ें।
ऐसा करने के लिए इस आदेश का उपयोग करें:
sudo useradd ansible-admin
फिर, ansible-admin उपयोगकर्ता के लिए पासवर्ड सेट करें।
sudo passwd ansible-admin
साथ ही, आपको sudoers फ़ाइल को संपादित करके उपयोगकर्ता विशेषाधिकारों को कॉन्फ़िगर करने की आवश्यकता है।
sudo visudo
इस sudoers फ़ाइल में "ansible-admin ALL=(ALL) ALL" जोड़ें।
साथ ही, आपको पासवर्ड प्रमाणीकरण सक्षम करने के लिए /etc/ssh/sshd_config फ़ाइल को संपादित करना होगा।
sudo vi /etc/ssh/sshd_config
sudo service sshd reload
sudo su - ansible-admin
ssh-keygen
अब आप अपने "AnsibleServer" EC2 वर्चुअल सर्वर इंस्टेंस पर Ansible इंस्टॉल कर सकते हैं।
चलो यह करते हैं।
sudo amazon-linux-extras install ansible2
ansible --version
चूँकि Ansible आपके "AnsibleServer" EC2 वर्चुअल सर्वर इंस्टेंस पर स्थापित है, आप इसे Ansible के साथ एकीकृत करने के लिए जेनकींस को कॉन्फ़िगर कर सकते हैं। जेनकींस को EC2 वर्चुअल सर्वर इंस्टेंस जहां Ansible स्थापित है और अन्य EC2 वर्चुअल सर्वर इंस्टेंस जहां Kubernetes स्थापित है, के साथ एकीकृत करने के लिए आपको "SSH पर प्रकाशित करें" प्लगइन स्थापित करने की आवश्यकता है।
"डैशबोर्ड" → " जेनकींस प्रबंधित करें" → "सिस्टम कॉन्फ़िगर करें" → "उपलब्ध प्लगइन्स" पर जाएं।
फिर खोज बॉक्स में "एसएसएच पर प्रकाशित करें" दर्ज करें।
"रीस्टार्ट किए बिना इंस्टॉल करें" बटन पर क्लिक करें। डाउनलोडिंग प्रक्रिया समाप्त होने तक प्रतीक्षा करें।
ऐसा करने के लिए, इन चरणों का पालन करें:
"डैशबोर्ड" → "जेनकींस प्रबंधित करें" → "सिस्टम कॉन्फ़िगर करें" → "एसएसएच पर प्रकाशित करें" पर जाएं।
फिर "लागू करें" और "सहेजें" बटन पर क्लिक करें।
यहां आपने "SSH पर प्रकाशित करें" जेनकींस प्लगइन को कॉन्फ़िगर करना समाप्त कर लिया है।
AnsibleServer EC2 उदाहरण में "/opt" फ़ोल्डर पर जाएँ।
cd /opt
वहां एक नया फ़ोल्डर "डॉकर" बनाएं।
sudo mkdir docker
इस "डॉकर" फ़ोल्डर को विशेषाधिकार दें।
sudo chown ansible-admin:ansible-admin docker
अब, इस आदेश को निष्पादित करके "डॉकर" फ़ोल्डर विशेषाधिकारों की जांच करें।
ll
आप देख सकते हैं कि "docker" फ़ोल्डर "ansible-admin" उपयोगकर्ता के साथ पहुंच योग्य है।
अब "एसएसएच पर प्रकाशित करें" जीथब प्लगइन स्थापित और कॉन्फ़िगर किया गया है, अब आप इसे उस पाइपलाइन में एकीकृत करने में सक्षम हैं जिसे आपने "[मॉड्यूल 2]: जेनकिंस सर्वर" में प्रोजेक्ट जार आर्टिफैक्ट को " जेनकिंस सर्वर" से स्थानांतरित करने के लिए बनाया था। "AnsibleServer" ।
खैर, पाइपलाइन में "एसएसएच पर प्रकाशित करें" जीथब प्लगइन को एकीकृत करने के लिए आपको इन चरणों का पालन करना होगा:
अंत में, आपको पाइपलाइन के साथ " एसएसएच पर प्रकाशित करें" प्लगइन का एकीकरण पूरा करने के लिए "लागू करें" और "सहेजें" बटन पर क्लिक करना चाहिए।
अब आप प्रोजेक्ट जार आर्टिफैक्ट को " जेनकिंससर्वर" से "एन्सिबलसर्वर" में स्थानांतरित करने के लिए अपनी अद्यतन पाइपलाइन का उपयोग कर सकते हैं। ऐसा करने के लिए आपको "बिल्ड नाउ" बटन पर क्लिक करना होगा। परिणामस्वरूप आप निर्माण इतिहास में एक सफल कार्य परिणाम देखेंगे।
यदि आप अपना "AnsibleServer" AWS EC2 टर्मिनल खोलते हैं। आप जांच सकते हैं कि पाइपलाइन अच्छी तरह से काम करती है।
बस इस आदेश का प्रयोग करें.
cd /opt/docker
hosts
पैरामीटर को आईपी पते या होस्टनाम की सूची में सेट कर सकते हैं।/etc/ansible/hosts
है।
/etc/ansible/hosts
संपादित करके, आप हर बार प्लेबुक चलाने पर उनके आईपी पते लिखे बिना आसानी से होस्ट के समूहों को प्रबंधित कर सकते हैं।
sudo ifconfig
sudo vi /etc/ansible/hosts
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected]
अब आप "जोड़ी गई कुंजी(कुंजियों) की संख्या: 1" देख सकते हैं। इसका मतलब है कि पासवर्ड रहित एसएसएच प्रमाणीकरण इंस्टॉलेशन सफलतापूर्वक पूरा हो गया था।
touch hello-app.yml
hello-app.yml
फ़ाइल को संपादित करें। इस आदेश के साथ संपादन के लिए इसे खोलें। vi hello-app.yml
--- - hosts: ansible user: root tasks: - name: create docker image command: docker build -t hello:latest . args: chdir: /opt/docker - name: create tag to push image onto dockerhub command: docker tag hello:latest zufarexplainedit/hello:latest - name: push docker image onto dockerhub command: docker push zufarexplainedit/hello:latest
डॉकर कार्यों के लिए अन्सिबल प्लेबुक उपयोग के लिए तैयार है।
cd /opt/docker
sudo -u ansible-admin ansible-playbook /opt/docker/hello-app.yml
अब "एसएसएच पर प्रकाशित करें" जीथब प्लगइन, एन्सिबल और डॉकर स्थापित और कॉन्फ़िगर किए गए हैं, अब आप प्रोजेक्ट जार आर्टिफैक्ट को स्थानांतरित करने के लिए "[मॉड्यूल 2]: जेनकिंस सर्वर" में बनाई गई पाइपलाइन में उन सभी को एकीकृत करने में सक्षम हैं। " जेनकिंससर्वर" से "एन्सिबलसर्वर" तक और फिर अपने प्रोजेक्ट से एक नई डॉकर छवि बनाएं और फिर इस डॉकर छवि को डॉकरहब पर धकेलें।
इसे प्राप्त करने के लिए आपको इन चरणों का पालन करना होगा:
अंत में, पाइपलाइन के साथ एकीकरण Ansible Docker कार्यों को पूरा करने के लिए "लागू करें" और "सहेजें" बटन पर क्लिक करें।
अब आप प्रोजेक्ट जार आर्टिफैक्ट को " जेनकिंससर्वर" से "एन्सिबलसर्वर" में स्थानांतरित करने के लिए अपनी उन्नत पाइपलाइन का परीक्षण कर सकते हैं, फिर अपने प्रोजेक्ट से एक नई डॉकर छवि बना सकते हैं और फिर इस डॉकर छवि को डॉकरहब पर धकेल सकते हैं। ऐसा करने के लिए आपको "बिल्ड नाउ" बटन पर क्लिक करना होगा। परिणामस्वरूप आप निर्माण इतिहास में एक सफल कार्य परिणाम देखेंगे।
आइए अब K8s को EC2 इंस्टेंस पर कॉन्फ़िगर करें। आप एक नया EC2 इंस्टेंस बनाने जा रहे हैं और Kubernetes क्लस्टर के साथ आगे इंटरैक्ट करने के लिए उनके kubectl कमांड-लाइन टूल को इंस्टॉल करेंगे।
इस चरण को पूरा करने के लिए इस ट्यूटोरियल के " AWS EC2 वर्चुअल सर्वर इंस्टेंस लॉन्च करें" अनुभाग के निर्देशों का उपयोग करें।
सुरक्षा समूह सेटअप जोड़ना न भूलें. यह सभी टूल्स और एसएसएच को क्रमशः पोर्ट 8080 और 22 पर काम करने की अनुमति देता है।
अपने EC2 वर्चुअल सर्वर इंस्टेंस को अलग करने के लिए "K8sServer" नाम का उपयोग करें।
आप नए "K8sServer" EC2 उदाहरण के लिए "CI_CD_Pipeline" सुरक्षा समूह और "CI_CD_Pipeline_Key_Pair" का पुन: उपयोग कर सकते हैं।
sudo vi /etc/hostname
इस होस्टनाम को "कुबेरनेट्स-सर्वर" से बदलें और फिर इसे रीबूट करें।
sudo init 6
AWS संस्करण की जाँच करने के लिए इस कमांड का उपयोग करें।
aws --version
यदि आप संस्करण aws-cli/1.18 देख सकते हैं, तो आपको नवीनतम संस्करण डाउनलोड करना चाहिए।
कर्ल कमांड को कॉपी-पेस्ट करें।
curl "//awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
डाउनलोडिंग प्रक्रिया शुरू होने तक प्रतीक्षा करें।
unzip awscliv2.zip
sudo ./aws/install
aws --version
Kubectl अंतर्निहित बुनियादी ढांचे की परवाह किए बिना, किसी भी Kubernetes क्लस्टर के साथ बातचीत करने के लिए एक मौलिक कमांड-लाइन उपकरण है। यह आपको कुबेरनेट्स क्लस्टर के भीतर संसाधनों को प्रबंधित करने, एप्लिकेशन तैनात करने, नेटवर्किंग कॉन्फ़िगर करने, लॉग तक पहुंचने और कई अन्य कार्य करने की अनुमति देता है।
अब आपको Kubernetes क्लस्टर के साथ आगे इंटरैक्ट करने के लिए kubectl कमांड-लाइन टूल इंस्टॉल करना होगा। इसके लिए आपको AWS → दस्तावेज़ीकरण → Amazon EKS → उपयोगकर्ता गाइड → kubectl इंस्टॉल या अपडेट करना → Linux पर जाना होगा।
curl -O //s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2024-04-19/bin/linux/amd64/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin
kubectl version --output=yaml
एक्ससीटीएल एक अन्य कमांड-लाइन टूल है जो विशेष रूप से अमेज़ॅन ईकेएस सेवा के लिए तैयार किया गया है। एक्ससीटीएल का उपयोग एडब्ल्यूएस ईकेएस क्लस्टर बनाने, नोड समूहों को प्रबंधित करने और ईकेएस के लिए विशिष्ट कार्यों को करने के लिए किया जा सकता है, जैसे कि एडब्ल्यूएस इंफ्रास्ट्रक्चर सेटअप और प्रबंधन के अधिकांश हिस्से को हटाकर आईएएम भूमिकाओं और अन्य एडब्ल्यूएस सेवाओं के साथ एकीकृत करना।
curl --silent --location "//github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version
आपको एक IAM भूमिका बनानी होगी और इसे अपने "KubernetesServer" EC2 इंस्टेंस से जोड़ना होगा।
ऐसा करने के लिए आपको खोज बॉक्स में EC2 ढूंढना होगा।
IAM डैशबोर्ड → भूमिकाएँ पर जाएँ।
IAM भूमिकाएँ वेब पेज पर "भूमिका बनाएँ" बटन पर क्लिक करें।
फिर "AWS सेवा", "EC2" चुनें। और "अगला" बटन पर क्लिक करें।
फिर, खोज बॉक्स में "AmazonEC2FullAccess" , "AmazonEC2FullAccess" , "IAMFullAccess" , "AWSCloudFormationFullAccess" ढूंढें और फिर "अनुमतियां जोड़ें" बटन पर क्लिक करें।
और फिर "अगला" बटन पर क्लिक करें।
फिर "भूमिका नाम" इनपुट में "Eksctl_Role" टाइप करें।
और "भूमिका बनाएं" बटन पर क्लिक करें।
AWS EC2 इंस्टेंस वेब पेज पर जाएँ। "कुबेरबेट्ससर्वर" चुनें। फिर "क्रियाएँ" → "सुरक्षा" → "IAM भूमिका संशोधित करें" पर क्लिक करें।
"Eksctl_Role" चुनें और फिर "अपडेट IAM रोल" बटन पर क्लिक करें।
अब आपकी IAM भूमिका आपके "EKS_Server" और eksctl टूल से जुड़ गई है।
अमेज़ॅन ईकेएस (इलास्टिक कुबेरनेट्स सर्विस) क्लस्टर एडब्ल्यूएस पर एक प्रबंधित कुबेरनेट्स वातावरण है, जो सेटअप, स्केलिंग और रखरखाव जैसे जटिल बुनियादी ढांचे के कार्यों को स्वचालित करता है। यह आवश्यक है क्योंकि यह कंटेनरीकृत अनुप्रयोगों को तैनात करने, प्रबंधित करने और स्केल करने, संचालन को सुव्यवस्थित करने और डेवलपर्स को अंतर्निहित बुनियादी ढांचे के प्रबंधन के बजाय कोडिंग पर ध्यान केंद्रित करने के लिए एक कुशल, सुरक्षित और एडब्ल्यूएस-अनुकूलित मंच प्रदान करता है।
इसे प्राप्त करने के लिए, इन चरणों का पालन करें:
eksctl create cluster --name cluster-name \ --region region-name \ --node-type instance-type \ --nodes-min 2 \ --nodes-max 2 \ --zones <AZ-1>,<AZ-2>
eksctl create cluster --name zufarexplainedit \ --region eu-north-1 \ --node-type t3.micro
संशोधित आदेश निष्पादित करें और धैर्यपूर्वक क्लस्टर निर्माण प्रक्रिया के पूरा होने की प्रतीक्षा करें। आप देखेंगे कि ईकेएस क्लस्टर स्थिति को एडब्ल्यूएस क्लाउडफॉर्मेशन वेब पेज पर "बनाना" के रूप में दर्शाया गया है।
इसके अलावा, आप AWS CloudFormation वेब पेज पर सफल EKS क्लस्टर निर्माण स्थिति को सत्यापित कर सकते हैं।
Kubernetes परिनियोजन YAML फ़ाइल YAML प्रारूप में लिखी गई एक कॉन्फ़िगरेशन स्क्रिप्ट है जो परिभाषित करती है कि Kubernetes क्लस्टर के भीतर किसी विशिष्ट एप्लिकेशन या सेवा को कैसे प्रबंधित और बनाए रखा जाए। यह एप्लिकेशन चलाने वाले कंटेनरों की तैनाती, स्केलिंग, अपडेटिंग और निगरानी को व्यवस्थित करने के लिए निर्देशों को समाहित करता है। इस फ़ाइल में कंटेनर छवि, प्रतिकृतियों की वांछित संख्या, संसाधन सीमाएं, पर्यावरण चर, नेटवर्किंग सेटिंग्स और बहुत कुछ जैसे विवरण शामिल हैं। जब कुबेरनेट्स क्लस्टर पर लागू किया जाता है, तो परिनियोजन YAML फ़ाइल एप्लिकेशन की वांछित स्थिति सुनिश्चित करती है, उपलब्धता और विश्वसनीयता के वांछित स्तर को बनाए रखने के लिए कंटेनरों के निर्माण, स्केलिंग और पुनर्प्राप्ति को स्वचालित रूप से प्रबंधित करती है।
touch hello-app-deployment.yaml
vi hello-app-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: zufarexplainedit-hello-app labels: app: hello-app spec: replicas: 2 selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: zufarexplainedit/hello imagePullPolicy: Always ports: - containerPort: 8080 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1
Kubernetes Service YAML फ़ाइल YAML प्रारूप में लिखी गई एक कॉन्फ़िगरेशन स्क्रिप्ट है जो पॉड्स के एक सेट के लिए नेटवर्क एब्स्ट्रैक्शन को परिभाषित करती है, जिससे उन्हें Kubernetes क्लस्टर के भीतर लगातार एक्सेस करने की अनुमति मिलती है। यह फ़ाइल बताती है कि अन्य सेवाओं या बाहरी ग्राहकों द्वारा सेवा को कैसे खोजा, एक्सेस किया जाना चाहिए और लोड-संतुलित किया जाना चाहिए। इसमें सेवा प्रकार (क्लस्टरआईपी, नोडपोर्ट, लोडबैलेंसर), पोर्ट नंबर, पॉड्स की पहचान करने के लिए चयनकर्ता और बहुत कुछ जैसे विनिर्देश शामिल हैं। जब कुबेरनेट्स क्लस्टर पर लागू किया जाता है, तो सेवा YAML फ़ाइल एक वर्चुअल आईपी और पोर्ट बनाती है जो ट्रैफ़िक को उपयुक्त पॉड्स तक रूट करती है, अंतर्निहित पॉड परिवर्तनों को अमूर्त करती है और संचार के लिए एक स्थिर समापन बिंदु प्रदान करती है, जिससे निर्बाध कनेक्टिविटी और गतिशील स्केलिंग सक्षम होती है।
touch hello-app-service.yaml
vi hello-app-service.yaml
apiVersion: v1 kind: Service metadata: name: zufarexplainedit-hello-app-service labels: app: hello-app spec: selector: app: hello-app ports: - port: 8080 targetPort: 8080 type: LoadBalancer
अब hello-app-service.yaml बन गया है और उपयोग के लिए तैयार है।
परिनियोजन लागू करें.
परिनियोजन कॉन्फ़िगरेशन लागू करने के लिए निम्न आदेश का उपयोग करें। kubectl apply -f hello-app-deployment.yaml
यह आपके एप्लिकेशन की उपलब्धता और प्रबंधनीयता सुनिश्चित करते हुए, प्रतिकृतियों की निर्दिष्ट संख्या और एक रोलिंग अपडेट रणनीति के साथ एक तैनाती तैयार करेगा।
2. सेवा लागू करें.
इसके बाद, सेवा कॉन्फ़िगरेशन लागू करें। kubectl apply -f hello-app-service.yaml
यह आपके एप्लिकेशन को इंटरनेट पर उजागर करते हुए एक लोडबैलेंसर प्रकार की सेवा स्थापित करेगा। ध्यान दें कि लोडबैलेंसर को प्रावधानित करने और बाहरी आईपी पता प्राप्त करने में थोड़ा समय लग सकता है।
लोडबैलेंसर स्थिति जांचें।
अपनी सेवा का उपयोग करके उसकी स्थिति की निगरानी करें। kubectl get service zufarexplainedit-hello-app-service
जब एक बाहरी आईपी असाइन किया जाता है, तो आप अपने एप्लिकेशन तक पहुंचने के लिए लगभग तैयार होते हैं।
अपने एप्लिकेशन तक पहुंचें.
वेब ब्राउज़र का उपयोग करते हुए, निर्दिष्ट बाहरी आईपी पता और उसके बाद :8080 दर्ज करें। थोड़ी देर के बाद, पेज लोड हो जाएगा और "हैलोवर्ल्ड" संदेश प्रदर्शित होगा। ध्यान रखें कि प्रारंभिक लोडिंग में कुछ सेकंड लग सकते हैं।
1. सभी परिनियोजन हटाएँ ।
सभी परिनियोजनों को हटाने के लिए, आप निम्न आदेश का उपयोग कर सकते हैं। kubectl delete deployments --all
यह क्रिया सुनिश्चित करती है कि आपके क्लस्टर में कोई सक्रिय परिनियोजन उदाहरण नहीं बचा है।
2. सभी पॉड्स हटाएं ।
यदि आपको सभी पॉड्स को हटाने की आवश्यकता है, चाहे वे परिनियोजन द्वारा प्रबंधित हों या नहीं, तो आप निम्न कमांड का उपयोग कर सकते हैं। kubectl delete pods --all
पॉड्स साफ़ करने से आपके क्लस्टर स्थिति को रीसेट करने या नई तैनाती के लिए तैयार होने में मदद मिल सकती है।
3. सभी सेवाएँ हटाएँ ।
आपके एप्लिकेशन को नेटवर्क पर उजागर करने वाली सेवाओं को साफ़ करने के लिए, आप निम्न कमांड का उपयोग कर सकते हैं। kubectl delete services --all
सेवाओं को हटाने से डाउनटाइम शामिल हो सकता है, इसलिए आगे बढ़ने से पहले निहितार्थों पर विचार करें। वर्कर नोड्स, नेटवर्किंग घटकों और अन्य संसाधनों सहित, eksctl
के साथ बनाए गए निर्दिष्ट अमेज़ॅन ईकेएस क्लस्टर से जुड़े सभी संसाधनों को हटाने के लिए, आप निम्न कमांड का उपयोग कर सकते हैं।
eksctl delete cluster --name {your cluster name} --region {your region name}
मेरे लिए यह। eksctl delete cluster --name zufarexplainedit --region eu-north-1
सुनिश्चित करें कि आप क्लस्टर को रोकने के बारे में निश्चित हैं, क्योंकि यह क्रिया अपरिवर्तनीय है और इसके परिणामस्वरूप डेटा हानि होगी।
अब "KubernetesServer" AWS EC2 वर्चुअल सर्वर इंस्टेंस में एक नया ansible-admin उपयोगकर्ता जोड़ें।
sudo useradd ansible-admin
फिर, ansible-admin उपयोगकर्ता के लिए पासवर्ड सेट करें।
sudo passwd ansible-admin
साथ ही, आपको sudoers फ़ाइल को संपादित करके उपयोगकर्ता विशेषाधिकारों को कॉन्फ़िगर करने की आवश्यकता है।
sudo visudo
इस sudoers फ़ाइल में "ansible-admin ALL=(ALL) ALL" जोड़ें।
साथ ही, आपको पासवर्ड प्रमाणीकरण सक्षम करने के लिए /etc/ssh/sshd_config फ़ाइल को संपादित करना होगा।
sudo vi /etc/ssh/sshd_config
sudo service sshd reload
sudo su - ansible-admin
आप इस आलेख में आगे K8s EC2 वर्चुअल सर्वर इंस्टेंस जैसे दूरस्थ सर्वर को प्रबंधित करने की योजना बना रहे हैं। इसीलिए आपको SSH कुंजियाँ सेट करने की आवश्यकता है।
ssh-keygen
sudo ssh-copy-id -i /home/{your user name}/.ssh/id_rsa.pub {your user name}@{your host address}
sudo ssh-copy-id -i /home/ansible-admin/.ssh/id_rsa.pub [email protected]
अब आप "जोड़ी गई कुंजी(कुंजियों) की संख्या: 1" देख सकते हैं। इसका मतलब है कि पासवर्ड रहित एसएसएच प्रमाणीकरण इंस्टॉलेशन सफलतापूर्वक पूरा हो गया था।
जब आप एक अन्सिबल प्लेबुक चलाते हैं, तो आप उन होस्टों को निर्दिष्ट करते हैं जिन पर इसे चलाना चाहिए। इस चरण में आपको KubernetesServer EC2 इंस्टेंस होस्ट निर्दिष्ट करने की आवश्यकता है। ऐसा करने के लिए आपको वही चरण दोहराने होंगे जो आपने " [मॉड्यूल 6]: एन्सिबल" में पारित किए थे।
sudo ifconfig
sudo vi /etc/ansible/hosts
touch kubernetes-hello-app.yml
hello-app.yml
फ़ाइल को संपादित करें। इस आदेश के साथ संपादन के लिए इसे खोलें। vi kubernetes-hello-app.yml
--- - hosts: kubernetes tasks: - name: deploy regapp on kubernetes command: kubectl apply -f hello-app-deployment.yaml - name: create service for regapp command: kubectl apply -f hello-app-service.yaml - name: update deployment with new pods if image updated in docker hub command: kubectl rollout restart deployment.apps/zufarexplainedit-hello-app
Kubernetes कार्यों के लिए Ansible प्लेबुक उपयोग के लिए तैयार है।
sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml
ज़ुफ़र सनगाटोव एक अनुभवी वरिष्ठ सॉफ़्टवेयर इंजीनियर हैं जिन्हें आधुनिक सॉफ़्टवेयर सिस्टम डिज़ाइन करने का शौक है।