আমার পূর্ববর্তী প্রবন্ধে, আমি মাইক্রোসার্ভিসের আকর্ষণীয় জগতের সন্ধান করেছি - মাইক্রোসার্ভিস আর্কিটেকচার প্যাটার্নস পার্ট 1: ডিকম্পোজিশন প্যাটার্নস । এটি ছিল মাইক্রোসার্ভিসেস এবং তাদের নিদর্শনগুলির উপর আমার ব্যাপক নিবন্ধ সিরিজের শুরু।
এই নিবন্ধে, আমরা ব্যবহারিক প্রয়োগের মাধ্যমে সিআই/সিডি প্রক্রিয়াটিকে রহস্যময় করার লক্ষ্য রাখি। আমরা আপনাকে একটি ধাপে ধাপে টিউটোরিয়ালের মাধ্যমে নিয়ে যাব, এটিকে মডিউল দ্বারা মডিউল ভেঙ্গে, যেখানে আপনি ম্যানুয়ালি একটি CI/CD পাইপলাইন তৈরি করবেন। এটি করার জন্য, আমরা AWS, Docker, Kubernetes, Ansible, Git, Apache Maven এবং Jenkins এর মত সমসাময়িক DevOps টুলের শক্তি ব্যবহার করব। সুতরাং, আসুন এই যাত্রা শুরু করা যাক!
একটি AWS অ্যাকাউন্ট তৈরি করুন বোতামে ক্লিক করুন।
//console.aws.amazon.com/console/home-এ যান। সাইন ইন বোতামে ক্লিক করুন।
EC2 সার্ভিসে ক্লিক করে EC2 ভার্চুয়াল সার্ভার বেছে নিন।
লঞ্চ ইনস্ট্যান্স বোতামে ক্লিক করুন।
"নাম এবং ট্যাগ" বিভাগে যান।
"নাম" বিভাগে একটি নতুন AWS EC2 ভার্চুয়াল সার্ভার উদাহরণের জন্য একটি নাম প্রদান করুন৷
আপনি "অতিরিক্ত ট্যাগ যোগ করুন" এ ক্লিক করে আপনার ভার্চুয়াল সার্ভারের জন্য অতিরিক্ত ট্যাগ যোগ করতে পারেন।
"Application and OS Images (Amazon Machine Image)" বিভাগে যান।
ভার্চুয়াল সার্ভারের সাথে বিনামূল্যে খেলতে:
"ইনস্ট্যান্স টাইপ" বিভাগে যান।
ভার্চুয়াল সার্ভারের সাথে বিনামূল্যে খেলতে:
ইন্সট্যান্স টাইপ বিভাগে মুক্ত স্তরের যোগ্য ট্যাগ সহ একটি প্রকার নির্বাচন করুন।
আমার জন্য এটি t2.micro (পরিবার: t2 1cCPU 1 GiB মেমরি বর্তমান প্রজন্ম:সত্য)।
"সঞ্চয়স্থান কনফিগার করুন" বিভাগে যান।
ভার্চুয়াল সার্ভারের সাথে বিনামূল্যে খেলতে:
ডিফল্ট সেটিংস পরিবর্তন করবেন না। বিনামূল্যের স্তরের যোগ্য গ্রাহকরা 30 GB EBS জেনারেল পারপাস (SSD) বা ম্যাগনেটিক স্টোরেজ পেতে পারেন।
"নেটওয়ার্ক সেটিংস" বিভাগে যান।
ডিফল্টরূপে, আপনার ভার্চুয়াল সার্ভারটি ( প্রকার - SSH, প্রোটোকল - TCP, পোর্ট - 22 ) এর মাধ্যমে অ্যাক্সেসযোগ্য। আপনার যদি অতিরিক্ত সংযোগ প্রকারের প্রয়োজন হয়, অতিরিক্ত অন্তর্মুখী নিরাপত্তা গোষ্ঠীর নিয়মগুলি যোগ করে সেগুলি যোগ করুন৷
"কী জোড়া (লগইন)" বিভাগে যান।
আপনি যদি এখনও "কী-পেয়ার" তৈরি না করে থাকেন:
"লঞ্চ ইনস্ট্যান্স" বোতামে ক্লিক করে EC2 ভার্চুয়াল সার্ভার ইনস্ট্যান্স চালু করুন।
তারপরে আপনাকে " সব দৃষ্টান্ত দেখুন" বোতামে ক্লিক করে "ইনস্ট্যান্স" বিভাগে যেতে হবে।
এখন আপনি দেখতে পাচ্ছেন যে আপনার AWS EC2 ভার্চুয়াল সার্ভার ইনস্ট্যান্স চলছে৷
[মডিউল 1] থেকে নির্দেশাবলী অনুসরণ করুন: এই ধাপটি শেষ করার জন্য এই টিউটোরিয়ালের AWS EC2 ভার্চুয়াল সার্ভার বিভাগে এবং JenkinsServer নামের একটি EC2 ভার্চুয়াল সার্ভারের উদাহরণ তৈরি করুন।
একটি নিরাপত্তা গ্রুপ সেটআপ যোগ করতে ভুলবেন না. এটি জেনকিন্স এবং এসএসএইচকে যথাক্রমে 8080 এবং 22 পোর্টে কাজ করার অনুমতি দেয়।
আপনার EC2 ভার্চুয়াল সার্ভারের উদাহরণকে আলাদা করতে "জেনকিন্স সার্ভার" নামটি ব্যবহার করুন।
একটি নতুন "জেনকিন্স সার্ভার" 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
এইভাবে "rpm" প্যাকেজ ম্যানেজার যাচাই করতে পারে যে আপনি যে জেনকিন্স প্যাকেজগুলি ইনস্টল করেছেন তা ঠিক জেনকিন্স প্রকল্প দ্বারা প্রকাশিত, এবং সেগুলিকে টেম্পার করা বা দূষিত করা হয়নি৷
জেনকিন্স চালানোর জন্য, আমাদের EC2 ভার্চুয়াল সার্ভার ইনস্ট্যান্সে জাভা ইনস্টল করতে হবে।
Java ইনস্টল করতে, এই কমান্ডটি ব্যবহার করুন।
sudo amazon-linux-extras install java-openjdk11 -y
এই কমান্ডটি ব্যবহার করে জাভা সঠিকভাবে ইনস্টল করা হয়েছে কিনা তা যাচাই করুন:
java -version
জেনকিন্স চালানোর জন্য, আপনাকে আমাদের EC2 ভার্চুয়াল সার্ভার ইনস্ট্যান্সে fontconfig ইনস্টল করতে হবে।
এই কমান্ড ব্যবহার করুন. 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
এখন, যেহেতু জেনকিন্স ঠিকঠাক কাজ করছে, আপনি জেনকিন্স পাইপলাইন তৈরি করা শুরু করতে পারেন। জেনকিন্স পাইপলাইন তৈরি করতে আপনাকে একটি নতুন "ফ্রিস্টাইল প্রকল্প" তৈরি করতে হবে। একটি নতুন "ফ্রিস্টাইল প্রকল্প" তৈরি করতে আপনাকে জেনকিন্স ড্যাশবোর্ডে যেতে হবে এবং "নতুন আইটেম" বোতামে ক্লিক করতে হবে।
Github "ফ্রিস্টাইল প্রজেক্ট" এর নাম লিখুন ("পাইপলাইন" নামটি আরও ব্যবহার করা হবে) এবং তারপরে "ঠিক আছে" বোতামটি ক্লিক করুন।
তারপর পাইপলাইনের বিবরণ প্রদান করুন।
Git হল একটি ডিস্ট্রিবিউটেড ভার্সন কন্ট্রোল সিস্টেম (VCS) যা সফ্টওয়্যার দলগুলিকে একটি বিশেষ ধরনের ডাটাবেসে কোডের প্রতিটি পরিবর্তনের ট্র্যাক রাখতে সাহায্য করার জন্য ডিজাইন করা হয়েছে৷ যদি একটি ভুল করা হয়, বিকাশকারীরা ঘড়িটি ফিরিয়ে দিতে পারে এবং সমস্ত দলের সদস্যদের বাধা কমিয়ে ভুল সংশোধন করতে সহায়তা করতে কোডের আগের সংস্করণগুলির তুলনা করতে পারে। VCS এর জন্য বিশেষভাবে উপযোগী
sudo yum install git -y
git --version
এখন গিট EC2 ভার্চুয়াল সার্ভার উদাহরণে ভাল কাজ করছে।
"জেনকিন্স পরিচালনা করুন" বোতামটি ক্লিক করুন এবং তারপরে "প্লাগইনগুলি পরিচালনা করুন" বোতামটি ক্লিক করুন।
"উপলভ্য প্লাগইন" বোতামে ক্লিক করুন।
Github প্লাগইন অনুসন্ধান বাক্স খুঁজুন.
Github প্লাগইন নির্বাচন করুন।
Github প্লাগইন নির্বাচন করুন। এবং তারপর "রিস্টার্ট ছাড়াই ইনস্টল করুন" বোতামটি ক্লিক করুন।
তারপরে মূল পৃষ্ঠায়, আপনাকে "জেনকিন্স পরিচালনা করুন" বোতামটি ক্লিক করতে হবে এবং তারপরে "গ্লোবাল টুল কনফিগারেশন" বোতামটি ক্লিক করতে হবে।
তারপরে "প্রয়োগ করুন" এবং "সংরক্ষণ করুন" বোতামে ক্লিক করুন**।**
শুধু কপি করুন এবং এটিকে " রিপোজিটরি URL" ইনপুটে পেস্ট করুন। তারপর পাইপলাইনের সাথে ইন্টিগ্রেশন গিট শেষ করতে "প্রয়োগ করুন" এবং "সংরক্ষণ করুন" বোতামে ক্লিক করুন।
cd /var/lib/jenkins/workspace/{your pipeline name}
Apache Maven একটি বহুল ব্যবহৃত বিল্ড অটোমেশন এবং প্রজেক্ট ম্যানেজমেন্ট টুল সফটওয়্যার ডেভেলপমেন্টে। এটি প্রকল্প নির্ভরতাগুলি পরিচালনা করে এবং একটি সামঞ্জস্যপূর্ণ বিল্ড লাইফসাইকেল প্রদান করে কম্পাইলিং, টেস্টিং এবং প্যাকেজিং কোডের প্রক্রিয়াটিকে প্রবাহিত করে। Maven XML-ভিত্তিক কনফিগারেশন ফাইল (POM ফাইল) নিয়োগ করে প্রকল্পের কাঠামো, নির্ভরতা এবং কাজগুলিকে সংজ্ঞায়িত করতে, যা ডেভেলপারদের দক্ষতার সাথে জটিল সফ্টওয়্যার প্রকল্পগুলি পরিচালনা এবং স্থাপন করতে সক্ষম করে।
Apache Maven ডাউনলোড করতে "/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 ভেরিয়েবলের জন্য maven ডিরেক্টরির পাথ বরাদ্দ করুন।
sudo find / -name java
কিভাবে ভিআইএম ব্যবহার করবেন
source .bash_profile
$PATH যাচাই করতে, এই কমান্ডটি ব্যবহার করুন।
echo $PATH
Apache Maven যাচাই করতে, এই কমান্ডটি ব্যবহার করুন।
mvn -v
এটি অর্জন করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
এবং তারপর "শীর্ষ পৃষ্ঠায় ফিরে যান" বোতামটি ক্লিক করুন।
এটি করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
তারপর "Maven" বিভাগে যান। "Maven যোগ করুন" বোতামে ক্লিক করুন। "স্বয়ংক্রিয়ভাবে ইনস্টল করুন" আনচেক করুন।
তারপর নাম এবং MAVEN_HOME পাথ যোগ করুন।
"প্রয়োগ করুন" এবং "সংরক্ষণ করুন" বোতামে ক্লিক করুন।
এখানে, আপনি Apache Maven Jenkins প্লাগইন কনফিগার করা শেষ করেছেন।
পাইপলাইনে Apache Maven সংহত করতে আপনাকে এই পদক্ষেপগুলি অনুসরণ করতে হবে:
অবশেষে, পাইপলাইনের সাথে Apache Maven-এর ইন্টিগ্রেশন শেষ করতে আপনার “Apply” এবং “Save” বোতামে ক্লিক করা উচিত।
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
ডকারকে অ্যাডমিন সুবিধা দেওয়ার জন্য আপনাকে "অ্যানসিবল সার্ভার" EC2 ভার্চুয়াল সার্ভারে ডকার গ্রুপে বর্তমান ব্যবহারকারী "অ্যান্সিবল-অ্যাডমিন" যোগ করতে হবে।
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
ডকারফাইল ব্যবহারের জন্য প্রস্তুত।
এখন আপনার ডকারফাইল ব্যবহারের জন্য প্রস্তুত করা হয়েছে, **"জেনকিন্স সার্ভার"**EC2 উদাহরণ থেকে আপনার প্রকল্পের JAR আর্টিফ্যাক্ট অনুলিপি করে এবং "AnsibleServer" EC2 উদাহরণে পেস্ট করে এগিয়ে যান। এটি লক্ষ্য করা গুরুত্বপূর্ণ যে এই স্থানান্তরটি আরও পাইপলাইনের মাধ্যমে স্বয়ংক্রিয় হবে।
এই ধাপটি সম্পূর্ণ করার মাধ্যমে, আপনি আপনার সেট আপ করা ডকার পরিবেশের সাথে আপনার ডকারফাইল পরীক্ষা করার জন্য প্রস্তুত হবেন।
docker login
এটির সাথে, আপনি ডকারে লগ ইন করার প্রক্রিয়াটি সম্পন্ন করেছেন এবং এখন পরীক্ষার সাথে এগিয়ে যাওয়ার জন্য প্রস্তুত।
docker build -t hello:latest .
docker tag hello:latest zufarexplainedit/hello:latest
docker push zufarexplainedit/hello:latest
[মডিউল 1] থেকে নির্দেশাবলী অনুসরণ করুন: এই ধাপটি শেষ করতে এবং Ansible-এর জন্য একটি EC2 ভার্চুয়াল সার্ভার উদাহরণ তৈরি করতে এই টিউটোরিয়ালের AWS EC2 ভার্চুয়াল সার্ভার বিভাগ।
একটি নিরাপত্তা গ্রুপ সেটআপ যোগ করতে ভুলবেন না. এটি Ansible এবং SSH কে যথাক্রমে পোর্ট 8080 এবং 22 এ কাজ করার অনুমতি দেয়।
আপনার EC2 ভার্চুয়াল সার্ভারের উদাহরণকে আলাদা করতে "AnsibleServer" নামটি ব্যবহার করুন।
আপনি একটি নতুন "AnsibleServer" EC2 উদাহরণের জন্য "CI_CD_Pipeline" নিরাপত্তা গ্রুপ এবং "CI_CD_Pipeline_Key_Pair" পুনরায় ব্যবহার করতে পারেন।
তারপর "সংযোগ" বোতামে ক্লিক করুন।
তারপর আপনি এই ওয়েব পেজ দেখতে পাবেন. আপনাকে আবার "সংযোগ" বোতামে ক্লিক করতে হবে।
sudo vi /etc/hostname
এই হোস্টনামটি "অ্যানসিবল-সার্ভার" দিয়ে প্রতিস্থাপন করুন। তারপর, এটি রিবুট করুন।
sudo init 6
এখন AWS EC2 ভার্চুয়াল সার্ভার ইনস্ট্যান্সে একটি নতুন উত্তরযোগ্য-প্রশাসক ব্যবহারকারী যোগ করা যাক।
এটি করতে এই কমান্ডটি ব্যবহার করুন:
sudo useradd 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-এর সাথে সংহত করতে Jenkins কনফিগার করতে পারেন। EC2 ভার্চুয়াল সার্ভার ইনস্ট্যান্স যেখানে Ansible ইন্সটল করা আছে এবং যেখানে Kubernetes ইন্সটল করা আছে সেখানে অন্যান্য EC2 ভার্চুয়াল সার্ভার ইনস্ট্যান্সের সাথে জেনকিন্সকে ইন্টিগ্রেট করতে আপনাকে “SSH এর উপর প্রকাশ করুন” প্লাগইন ইনস্টল করতে হবে।
"ড্যাশবোর্ড" → " জেনকিন্স পরিচালনা করুন" → "সিস্টেম কনফিগার করুন" → "উপলব্ধ প্লাগইনস" এ যান।
তারপরে অনুসন্ধান বাক্সে "SSH উপর প্রকাশ করুন" লিখুন।
"রিস্টার্ট ছাড়াই ইনস্টল করুন" বোতামে ক্লিক করুন। ডাউনলোড প্রক্রিয়া শেষ হওয়ার জন্য অপেক্ষা করুন।
এটি করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
"ড্যাশবোর্ড" → "জেনকিন্স পরিচালনা করুন" → "সিস্টেম কনফিগার করুন" → "এসএসএইচ-এ প্রকাশ করুন" এ যান।
তারপরে "প্রয়োগ করুন" এবং "সংরক্ষণ করুন" বোতামে ক্লিক করুন।
এখানে আপনি “SSH এর উপর প্রকাশ করুন” জেনকিন্স প্লাগইন কনফিগার করা শেষ করেছেন।
AnsibleServer EC2 উদাহরণে "/ opt" ফোল্ডারে যান।
cd /opt
সেখানে একটি নতুন ফোল্ডার "ডকার" তৈরি করুন।
sudo mkdir docker
এই "ডকার" ফোল্ডারে বিশেষাধিকার দিন।
sudo chown ansible-admin:ansible-admin docker
এখন, এই কমান্ডটি কার্যকর করে "ডকার" ফোল্ডারের সুবিধাগুলি পরীক্ষা করুন।
ll
আপনি দেখতে পাচ্ছেন যে "ডকার" ফোল্ডারটি "অ্যানসিবল-অ্যাডমিন" ব্যবহারকারীর সাথে অ্যাক্সেসযোগ্য।
এখন যেহেতু "SSH এর উপর প্রকাশ করুন" Github প্লাগইন ইনস্টল এবং কনফিগার করা হয়েছে, আপনি এখন এটিকে "[মডিউল 2]: জেনকিন্স সার্ভার"-এ " জেনকিন্স সার্ভার" থেকে একটি প্রজেক্ট জার আর্টিফ্যাক্ট স্থানান্তর করতে পাইপলাইনে একীভূত করতে সক্ষম "Ansible সার্ভার" ।
ঠিক আছে, পাইপলাইনে "SSH এর উপর প্রকাশ করুন" Github প্লাগইনকে একীভূত করতে আপনাকে এই পদক্ষেপগুলি অনুসরণ করতে হবে:
অবশেষে, পাইপলাইনের সাথে "Publish over SSH" প্লাগইন ইন্টিগ্রেশন শেষ করতে আপনাকে "প্রয়োগ করুন" এবং "সংরক্ষণ করুন" বোতামে ক্লিক করতে হবে।
এখন আপনি " JenkinsServer" থেকে "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" দেখতে পারেন। এর অর্থ হল পাসওয়ার্ডহীন SSH প্রমাণীকরণ ইনস্টলেশন সফলভাবে সম্পন্ন হয়েছে।
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
এখন "SSH এর উপর প্রকাশ করুন" Github প্লাগইন, Ansible এবং Docker ইনস্টল এবং কনফিগার করা হয়েছে, আপনি এখন একটি প্রকল্প জার আর্টিফ্যাক্ট স্থানান্তর করতে "[মডিউল 2]: জেনকিন্স সার্ভার"-এ তৈরি করা পাইপলাইনে সেগুলিকে একীভূত করতে সক্ষম। " জেনকিন্স সার্ভার" থেকে "অ্যান্সিবল সার্ভার" এবং তারপরে আপনার প্রকল্প থেকে একটি নতুন ডকার ইমেজ তৈরি করুন এবং তারপরে এই ডকার ইমেজটিকে ডকারহাবের দিকে ঠেলে দিন।
এটি অর্জন করতে আপনাকে এই পদক্ষেপগুলি অনুসরণ করতে হবে:
অবশেষে, পাইপলাইনের সাথে ইন্টিগ্রেশন অ্যান্সিবল ডকার কাজগুলি শেষ করতে "প্রয়োগ করুন" এবং "সংরক্ষণ করুন" বোতামে ক্লিক করুন।
এখন আপনি " জেনকিন্স সার্ভার" থেকে "অ্যান্সিবল সার্ভার" -এ একটি প্রজেক্ট জার আর্টিফ্যাক্টকে নির্বিঘ্নে স্থানান্তর করতে আপনার আপগ্রেড করা পাইপলাইন পরীক্ষা করতে পারেন তারপর আপনার প্রকল্প থেকে একটি নতুন ডকার ইমেজ তৈরি করুন এবং তারপরে এই ডকার ইমেজটিকে ডকারহাবে ঠেলে দিন। এটি করতে আপনাকে "এখনই তৈরি করুন" বোতামে ক্লিক করতে হবে। ফলস্বরূপ আপনি বিল্ড ইতিহাসে একটি সফল কাজের ফলাফল দেখতে পাবেন।
এখন EC2 উদাহরণে K8s কনফিগার করা যাক। আপনি একটি নতুন EC2 ইন্সট্যান্স তৈরি করতে যাচ্ছেন এবং একটি Kubernetes ক্লাস্টারের সাথে আরও ইন্টারঅ্যাক্ট করার জন্য তাদের kubectl কমান্ড-লাইন টুল ইনস্টল করতে যাচ্ছেন।
এই ধাপটি শেষ করতে এই টিউটোরিয়ালের " AWS EC2 ভার্চুয়াল সার্ভার ইনস্ট্যান্স চালু করুন" বিভাগের নির্দেশাবলী ব্যবহার করুন।
একটি নিরাপত্তা গ্রুপ সেটআপ যোগ করতে ভুলবেন না. এটি সমস্ত সরঞ্জাম এবং SSH পোর্ট 8080 এবং 22 যথাক্রমে কাজ করার অনুমতি দেয়।
আপনার EC2 ভার্চুয়াল সার্ভারের উদাহরণকে আলাদা করতে "K8sServer" নামটি ব্যবহার করুন৷
আপনি একটি নতুন "K8sServer" EC2 উদাহরণের জন্য "CI_CD_Pipeline" নিরাপত্তা গ্রুপ এবং "CI_CD_Pipeline_Key_Pair" পুনরায় ব্যবহার করতে পারেন।
sudo vi /etc/hostname
এই হোস্টনামটিকে "kubernetes-server" দিয়ে প্রতিস্থাপন করুন এবং তারপরে এটি পুনরায় বুট করুন।
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 হল একটি মৌলিক কমান্ড-লাইন টুল। এটি আপনাকে সম্পদগুলি পরিচালনা করতে, অ্যাপ্লিকেশন স্থাপন করতে, নেটওয়ার্কিং কনফিগার করতে, লগগুলি অ্যাক্সেস করতে এবং কুবারনেটস ক্লাস্টারের মধ্যে অন্যান্য বিভিন্ন কাজ সম্পাদন করতে দেয়।
এখন আপনাকে কুবারনেটস ক্লাস্টারের সাথে আরও ইন্টারঅ্যাক্ট করার জন্য kubectl কমান্ড-লাইন টুল ইনস্টল করতে হবে। এর জন্য আপনাকে AWS → ডকুমেন্টেশন → Amazon EKS → User Guide → 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
Eksctl হল আরেকটি কমান্ড-লাইন টুল যা বিশেষভাবে Amazon EKS পরিষেবার জন্য তৈরি। Eksctl AWS EKS ক্লাস্টার তৈরি করতে, নোড গোষ্ঠীগুলি পরিচালনা করতে এবং EKS-এর জন্য নির্দিষ্ট কাজগুলি সম্পাদন করতে ব্যবহার করা যেতে পারে, যেমন AWS পরিকাঠামো সেটআপ এবং পরিচালনার বেশিরভাগ অংশকে বিমূর্ত করে IAM ভূমিকা এবং অন্যান্য AWS পরিষেবাগুলির সাথে একীভূত করা।
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 ইনস্ট্যান্স ওয়েব পেজে যান। "KuberbetesServer" নির্বাচন করুন। তারপরে "ক্রিয়া" → "নিরাপত্তা" → "আইএএম ভূমিকা সংশোধন করুন" এ ক্লিক করুন।
"Eksctl_Role" নির্বাচন করুন এবং তারপর "আপডেট IAM ভূমিকা" বোতামে ক্লিক করুন।
এখন আপনার IAM ভূমিকা আপনার “EKS_Server” এবং eksctl টুলের সাথে সংযুক্ত।
একটি Amazon EKS (Elastic Kubernetes Service) ক্লাস্টার হল AWS-এ একটি পরিচালিত Kubernetes পরিবেশ, সেটআপ, স্কেলিং এবং রক্ষণাবেক্ষণের মতো জটিল পরিকাঠামোর কাজগুলিকে স্বয়ংক্রিয় করে। এটি অপরিহার্য কারণ এটি একটি দক্ষ, সুরক্ষিত, এবং AWS-অপ্টিমাইজ করা প্ল্যাটফর্ম প্রদান করে কনটেইনারাইজড অ্যাপ্লিকেশন স্থাপন, পরিচালনা এবং স্কেল করার জন্য, ক্রিয়াকলাপগুলিকে স্ট্রিমলাইন করা এবং বিকাশকারীদেরকে অন্তর্নিহিত অবকাঠামো পরিচালনার পরিবর্তে কোডিংয়ে ফোকাস করার জন্য মুক্ত করে৷
এটি অর্জন করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
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
পরিবর্তিত কমান্ডটি চালান এবং ধৈর্য সহকারে ক্লাস্টার তৈরির প্রক্রিয়া সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন। আপনি লক্ষ্য করবেন যে EKS ক্লাস্টার স্থিতি AWS CloudFormation ওয়েব পৃষ্ঠায় "তৈরি করা" হিসাবে নির্দেশিত হয়েছে৷
উপরন্তু, আপনি AWS CloudFormation ওয়েব পৃষ্ঠায় সফল EKS ক্লাস্টার তৈরির স্থিতি যাচাই করতে পারেন।
একটি Kubernetes Deployment YAML ফাইল হল YAML ফর্ম্যাটে লেখা একটি কনফিগারেশন স্ক্রিপ্ট যা একটি Kubernetes ক্লাস্টারের মধ্যে একটি নির্দিষ্ট অ্যাপ্লিকেশন বা পরিষেবা কীভাবে পরিচালনা এবং বজায় রাখতে হয় তা সংজ্ঞায়িত করে। এটি অ্যাপ্লিকেশান চলমান কন্টেইনারগুলির স্থাপনা, স্কেলিং, আপডেট এবং নিরীক্ষণের জন্য নির্দেশাবলী অন্তর্ভুক্ত করে। এই ফাইলটিতে কন্টেইনার ইমেজ, প্রতিলিপির কাঙ্খিত সংখ্যা, রিসোর্স লিমিট, এনভায়রনমেন্ট ভেরিয়েবল, নেটওয়ার্কিং সেটিংস এবং আরও অনেক কিছুর মতো বিবরণ রয়েছে। যখন একটি 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 পরিষেবা YAML ফাইল হল YAML ফর্ম্যাটে লেখা একটি কনফিগারেশন স্ক্রিপ্ট যা পডগুলির একটি সেটের জন্য একটি নেটওয়ার্ক বিমূর্ততাকে সংজ্ঞায়িত করে, যা তাদের একটি Kubernetes ক্লাস্টারের মধ্যে ধারাবাহিকভাবে অ্যাক্সেস করার অনুমতি দেয়। অন্যান্য পরিষেবা বা বহিরাগত ক্লায়েন্টদের দ্বারা কীভাবে পরিষেবাটি আবিষ্কার করা, অ্যাক্সেস করা এবং লোড-ভারসাম্য করা উচিত এই ফাইলটি রূপরেখা দেয়৷ এতে পরিষেবার ধরন (ClusterIP, NodePort, LoadBalancer), পোর্ট নম্বর, পড শনাক্ত করার জন্য নির্বাচক এবং আরও অনেক কিছুর মতো স্পেসিফিকেশন রয়েছে। যখন একটি 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
এটি একটি লোডব্যালেন্সার টাইপ পরিষেবা সেট আপ করবে, আপনার অ্যাপ্লিকেশনটি ইন্টারনেটে প্রকাশ করবে। মনে রাখবেন যে লোডব্যালেন্সার প্রভিশন করা এবং একটি বাহ্যিক IP ঠিকানা অর্জন করতে অল্প সময় লাগতে পারে।
লোডব্যালেন্সার স্থিতি পরীক্ষা করুন।
ব্যবহার করে আপনার পরিষেবার অবস্থা নিরীক্ষণ করুন। kubectl get service zufarexplainedit-hello-app-service
যখন একটি বাহ্যিক আইপি বরাদ্দ করা হয়, আপনি আপনার অ্যাপ্লিকেশন অ্যাক্সেস করার জন্য প্রায় প্রস্তুত।
আপনার আবেদন অ্যাক্সেস.
একটি ওয়েব ব্রাউজার ব্যবহার করে, বরাদ্দকৃত বাহ্যিক আইপি ঠিকানা লিখুন যার পরে :8080। একটি সংক্ষিপ্ত মুহূর্ত পরে, পৃষ্ঠাটি "হ্যালোওয়ার্ল্ড" বার্তা প্রদর্শন করে লোড হবে। মনে রাখবেন প্রাথমিক লোড হতে কয়েক সেকেন্ড সময় লাগতে পারে।
1. সমস্ত স্থাপনা মুছুন ।
সমস্ত স্থাপনা মুছে ফেলতে, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন। kubectl delete deployments --all
এই ক্রিয়াটি নিশ্চিত করে যে আপনার ক্লাস্টারে কোনো সক্রিয় স্থাপনার দৃষ্টান্ত অবশিষ্ট নেই।
2. সমস্ত পড মুছুন ।
আপনি যদি সমস্ত পড মুছে ফেলতে চান, সেগুলি একটি স্থাপনার দ্বারা পরিচালিত হোক বা না হোক, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন। kubectl delete pods --all
ক্লিয়ারিং পড আপনার ক্লাস্টার স্টেট রিসেট করতে বা নতুন স্থাপনার জন্য প্রস্তুত করতে সাহায্য করতে পারে।
3. সমস্ত পরিষেবা মুছুন ৷
নেটওয়ার্কে আপনার অ্যাপ্লিকেশনগুলিকে প্রকাশ করে এমন পরিষেবাগুলি পরিষ্কার করতে, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন। kubectl delete services --all
পরিষেবাগুলি সরানোর সময় ডাউনটাইম জড়িত হতে পারে, তাই এগিয়ে যাওয়ার আগে প্রভাবগুলি বিবেচনা করুন৷ ওয়ার্কার নোড, নেটওয়ার্কিং উপাদান এবং অন্যান্য সংস্থান সহ eksctl
এর সাথে তৈরি করা নির্দিষ্ট Amazon EKS ক্লাস্টারের সাথে সম্পর্কিত সমস্ত সংস্থানগুলি সরাতে, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন।
eksctl delete cluster --name {your cluster name} --region {your region name}
এটা আমার জন্য. eksctl delete cluster --name zufarexplainedit --region eu-north-1
নিশ্চিত করুন যে আপনি ক্লাস্টার বন্ধ করার বিষয়ে নিশ্চিত, কারণ এই ক্রিয়াটি অপরিবর্তনীয় এবং এর ফলে ডেটা ক্ষতি হবে৷
এখন আসুন “KubernetesServer” AWS EC2 ভার্চুয়াল সার্ভার ইনস্ট্যান্সে একটি নতুন উত্তরযোগ্য-প্রশাসক ব্যবহারকারী যোগ করি।
sudo useradd 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" দেখতে পারেন। এর অর্থ হল পাসওয়ার্ডহীন SSH প্রমাণীকরণ ইনস্টলেশন সফলভাবে সম্পন্ন হয়েছে।
আপনি যখন একটি উত্তরযোগ্য প্লেবুক চালান, তখন আপনি যে হোস্টগুলি চালান তা নির্দিষ্ট করুন৷ এই ধাপে আপনাকে 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 কার্যগুলির জন্য উত্তরযোগ্য প্লেবুক ব্যবহারের জন্য প্রস্তুত।
sudo -u ansible-admin ansible-playbook /opt/docker/kubernetes-hello-app.yml
জুফার সুনাগাতোভ একজন অভিজ্ঞ সিনিয়র সফ্টওয়্যার প্রকৌশলী যিনি আধুনিক সফ্টওয়্যার সিস্টেম ডিজাইন করতে আগ্রহী।