1. উদ্দেশ্য
স্ক্যাফোল্ড এমন একটি টুল যা আপনার অ্যাপ্লিকেশন তৈরি, পুশ করা এবং স্থাপন করার জন্য ওয়ার্কফ্লো পরিচালনা করে। আপনি সহজেই একটি স্থানীয় উন্নয়ন কর্মক্ষেত্র কনফিগার করতে, আপনার অভ্যন্তরীণ উন্নয়ন লুপকে স্ট্রীমলাইন করতে এবং আপনার Kubernetes ম্যানিফেস্টগুলি পরিচালনা করতে সহায়তা করার জন্য Kustomize এবং Helm এর মতো অন্যান্য সরঞ্জামগুলির সাথে একীভূত করতে Skaffold ব্যবহার করতে পারেন।
এই টিউটোরিয়ালে আপনি স্ক্যাফোল্ডের কিছু মূল ধারণার মাধ্যমে কাজ করেন, আপনার অভ্যন্তরীণ বিকাশ লুপ স্বয়ংক্রিয় করতে এটি ব্যবহার করুন, তারপর একটি অ্যাপ্লিকেশন স্থাপন করুন।
আপনি করবেন:
- স্থানীয় উন্নয়নের জন্য Skaffold কনফিগার করুন এবং সক্ষম করুন
- একটি সাধারণ গোলং অ্যাপ্লিকেশন তৈরি করুন এবং চালান
- Skaffold এর সাথে স্থানীয় অ্যাপ্লিকেশন স্থাপনা পরিচালনা করুন
- ম্যানিফেস্ট রেন্ডার করুন এবং আপনার অ্যাপ্লিকেশন স্থাপন করুন
2. আপনি শুরু করার আগে
আপনার কর্মক্ষেত্র প্রস্তুত করা হচ্ছে
- নিম্নলিখিত url পরিদর্শন করে ক্লাউড শেল সম্পাদক খুলুন:
https://shell.cloud.google.com
তৃতীয় পক্ষের কুকিজের অনুমতি দিন। "সাইট কাজ করছে না" এবং তারপরে "কুকিজকে অনুমতি দিন" এ ক্লিক করুন।
- যদি আপনি ইতিমধ্যে এটি না করে থাকেন, টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডের সাহায্যে অ্যাপ্লিকেশন উত্সটি ক্লোন করুন:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- ক্লোন করা সংগ্রহস্থল ডিরেক্টরিতে পরিবর্তন করুন:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- নিম্নলিখিত কমান্ডটি চালিয়ে বর্তমান ডিরেক্টরিতে আপনার ক্লাউড শেল ওয়ার্কস্পেস সেট করুন:
cloudshell workspace .
আপনার প্রকল্প প্রস্তুত করা হচ্ছে
- নিম্নলিখিত কমান্ডটি চালিয়ে আপনার Google ক্লাউড প্রকল্প সঠিকভাবে সেট করা হয়েছে তা নিশ্চিত করুন:
gcloud config set project {{project-id}}
3. Skaffold দিয়ে শুরু করা
- শীর্ষ-স্তরের Skaffold কনফিগারেশন ফাইল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান,
skaffold.yaml
:
cat <<EOF > skaffold.yaml
apiVersion: skaffold/v2beta21
kind: Config
metadata:
name: getting-started-kustomize
build:
tagPolicy:
gitCommit:
ignoreChanges: true
artifacts:
- image: skaffold-kustomize
context: app
docker:
dockerfile: Dockerfile
deploy:
kustomize:
paths:
- overlays/dev
profiles:
- name: staging
deploy:
kustomize:
paths:
- overlays/staging
- name: prod
deploy:
kustomize:
paths:
- overlays/prod
EOF
- IDE প্যানে
skaffold.yaml
ফাইলটি খুলুন। এটি শীর্ষ-স্তরের কনফিগারেশন ফাইল যা স্ক্যাফোল্ড পাইপলাইনকে সংজ্ঞায়িত করে।
Kubernetes-এর মতো YAML ফর্ম্যাট এবং YAML-এর নিম্নলিখিত বিভাগগুলি লক্ষ্য করুন:
-
build
-
deploy
-
profiles
এই বিভাগগুলি সংজ্ঞায়িত করে যে কীভাবে অ্যাপ্লিকেশনটি তৈরি এবং স্থাপন করা উচিত, সেইসাথে প্রতিটি স্থাপনার লক্ষ্যের জন্য প্রোফাইলগুলি।
আপনি স্ক্যাফোল্ড পাইপলাইন স্টেজ ডকুমেন্টেশনে স্ক্যাফোল্ড পর্যায়ের সম্পূর্ণ তালিকা সম্পর্কে আরও পড়তে পারেন।
4. নির্মাণ
build
বিভাগে কনফিগারেশন রয়েছে যা সংজ্ঞায়িত করে কিভাবে অ্যাপ্লিকেশনটি তৈরি করা উচিত। এই ক্ষেত্রে আপনি কীভাবে git
ট্যাগগুলি পরিচালনা করা উচিত তার জন্য কনফিগারেশন দেখতে পারেন, সেইসাথে একটি artifacts
বিভাগ যা কন্টেইনার চিত্রগুলিকে সংজ্ঞায়িত করে, যা অ্যাপ্লিকেশনটিকে অন্তর্ভুক্ত করে।
এর পাশাপাশি, এই বিভাগে আপনি চিত্রগুলি তৈরি করতে ব্যবহার করা Dockerfile
রেফারেন্স দেখতে পারেন। স্ক্যাফোল্ড এছাড়াও অন্যান্য বিল্ড টুল যেমন Jib
, Maven
, Gradle
, ক্লাউড-নেটিভ Buildpacks
, Bazel
এবং কাস্টম স্ক্রিপ্ট সমর্থন করে। আপনি স্ক্যাফোল্ড বিল্ড ডকুমেন্টেশনে এই কনফিগারেশন সম্পর্কে আরও পড়তে পারেন।
5. স্থাপন
deploy
সেকশনে কনফিগারেশন রয়েছে যা সংজ্ঞায়িত করে কিভাবে অ্যাপ্লিকেশনটি স্থাপন করা উচিত। এই ক্ষেত্রে আপনি একটি ডিফল্ট স্থাপনার একটি উদাহরণ দেখতে পারেন যা Kustomize
টুল ব্যবহার করার জন্য Skaffold কনফিগার করে।
Kustomize
টুলটি এক বা একাধিক "ওভারলে" এর সাথে সাধারণ উপাদান YAML ফাইলের একটি সেট ( base
ডিরেক্টরির অধীনে) একত্রিত করে কুবারনেটস ম্যানিফেস্ট তৈরি করার কার্যকারিতা প্রদান করে যা সাধারণত এক বা একাধিক স্থাপনার লক্ষ্যের সাথে সামঞ্জস্যপূর্ণ - সাধারণত dev , পরীক্ষা , স্টেজিং এবং উত্পাদন বা অনুরূপ।
এই উদাহরণে আপনি তিনটি লক্ষ্যের জন্য দুটি ওভারলে দেখতে পারেন, dev , staging এবং prod । ডেভ ওভারলে স্থানীয় উন্নয়ন এবং Skaffold ব্যবহার করে স্থাপন করার সময় স্টেজিং এবং প্রোড ওভারলে ব্যবহার করা হবে।
6. প্রোফাইল
profiles
বিভাগে কনফিগারেশন রয়েছে যা বিভিন্ন প্রসঙ্গের জন্য নির্মাণ, পরীক্ষা এবং স্থাপনার কনফিগারেশন সংজ্ঞায়িত করে। এই উদাহরণে staging
বা prod
মতো আপনার অ্যাপ্লিকেশন স্থাপনার পাইপলাইনে বিভিন্ন প্রসঙ্গ সাধারণত ভিন্ন পরিবেশ। এর মানে হল যে আপনি সহজেই ম্যানিফেস্টগুলি পরিচালনা করতে পারেন যার বিষয়বস্তুগুলি বিভিন্ন টার্গেট পরিবেশের জন্য আলাদা হওয়া প্রয়োজন, বয়লারপ্লেট কনফিগারেশনের পুনরাবৃত্তি না করে।
profiles
বিভাগে কনফিগারেশন মূল কনফিগারেশন থেকে যেকোনো আইটেম প্রতিস্থাপন বা প্যাচ করতে পারে (যেমন build
, test
বা deploy
বিভাগ, উদাহরণস্বরূপ)।
এর উদাহরণ হিসেবে, ফাইল overlays > prod > deployment.yaml
খুলুন। লক্ষ্য করুন যে বেস কনফিগারেশনকে ওভাররাইড করে অ্যাপ্লিকেশনটির জন্য প্রতিলিপির সংখ্যা এখানে তিনটিতে কনফিগার করা হয়েছে।
অ্যাপ্লিকেশন সোর্স কোড নেভিগেট.
- নিম্নলিখিত ফাইল
app > main.go
এটি একটি সাধারণ গোলং অ্যাপ্লিকেশন যা প্রতি সেকেন্ডেstdout
এ একটি স্ট্রিং লেখে। - লক্ষ্য করুন যে অ্যাপ্লিকেশনটি কুবারনেটস পডের নামও আউটপুট করে যেখানে এটি চলছে।
ডকারফাইল দেখা হচ্ছে
- IDE প্যানে ফাইল
app > Dockerfile
খুলুন। এই ফাইলটিতেmain.go
ফাইলের জন্য অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করার নির্দেশাবলীর একটি ক্রম রয়েছে এবং শীর্ষ-স্তরেরskaffold.yaml
ফাইলে উল্লেখ করা হয়েছে।
7. Skaffold এর সাথে বিকাশ করা
আপনার Kubernetes পরিবেশ কনফিগার করা হচ্ছে
- আপনার স্থানীয় কুবারনেটস ক্লাস্টার চলছে এবং কনফিগার করা হয়েছে তা নিশ্চিত করতে নিম্নলিখিত কমান্ডটি চালান:
minikube start
কয়েক মিনিট সময় লাগতে পারে। ক্লাস্টার সফলভাবে শুরু হলে আপনাকে নিম্নলিখিত আউটপুট দেখতে হবে:
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
-
dev
,staging
এবংprod
এর জন্য Kubernetes নামস্থান তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
kubectl apply -f namespaces.yaml
আপনি নিম্নলিখিত আউটপুট দেখতে হবে:
namespace/dev created namespace/staging created namespace/prod created
স্থানীয় উন্নয়নের জন্য Skaffold ব্যবহার করা
- অ্যাপ্লিকেশনটি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান এবং এটিকে ক্লাউড শেলে চলমান একটি স্থানীয় কুবারনেটস ক্লাস্টারে স্থাপন করুন:
skaffold dev
আপনি অ্যাপ্লিকেশন কন্টেইনার নির্মাণ প্রক্রিয়া চালানো দেখতে হবে, যা এক মিনিট সময় নিতে পারে, এবং তারপর অ্যাপ্লিকেশন আউটপুট প্রতি সেকেন্ডে পুনরাবৃত্তি হয়:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx
উল্লেখ্য যে সঠিক পড নাম উপরে দেওয়া জেনেরিক আউটপুট থেকে পরিবর্তিত হবে।
অ্যাপ্লিকেশন পরিবর্তন করা
এখন যেহেতু অ্যাপ্লিকেশনটি আপনার স্থানীয় Kubernetes ক্লাস্টারে চলছে, আপনি কোডে পরিবর্তন করতে পারেন এবং Skaffold স্বয়ংক্রিয়ভাবে পুনঃনির্মাণ করবে এবং ক্লাস্টারে অ্যাপ্লিকেশনটিকে পুনরায় স্থাপন করবে।
- IDE ফলকে ফাইল
app > main.go
খুলুন এবং আউটপুট স্ট্রিং পরিবর্তন করুন:
"Hello world from pod %s!\n"
থেকে:
"Hello Skaffold world from pod %s!\n"
আপনি যখন পরিবর্তনটি করেছেন তখন আপনাকে দেখতে হবে স্ক্যাফোল্ড ছবিটি পুনর্নির্মাণ করেছে এবং ক্লাস্টারে এটি পুনরায় স্থাপন করবে, আউটপুট পরিবর্তন টার্মিনাল উইন্ডোতে দৃশ্যমান হবে।
- এখন, IDE প্যানে "app > main.go" ফাইলেও, লাইনটি পরিবর্তন করুন:
time.Sleep(time.Second * 1)
থেকে
time.Sleep(time.Second * 10)
আবার আপনাকে দেখতে হবে যে অ্যাপ্লিকেশনটি পুনর্নির্মিত এবং পুনরায় স্থাপন করা হয়েছে, প্রতি 10 সেকেন্ডে একবার আউটপুট লাইন প্রদর্শিত হবে।
Kubernetes কনফিগারেশনে পরিবর্তন করা হচ্ছে
এরপরে আপনি Kubernetes কনফিগারেশনে একটি পরিবর্তন করবেন এবং আরও একবার Skaffold স্বয়ংক্রিয়ভাবে পুনরায় স্থাপন করবে।
- IDE-তে ফাইল
base > deployment.yaml
খুলুন এবং লাইন পরিবর্তন করুন:
replicas: 1
থেকে
replicas: 2
একবার অ্যাপ্লিকেশনটি পুনরায় স্থাপন করা হলে, আপনি দুটি পড চলমান দেখতে পাবেন – প্রতিটির আলাদা নাম থাকবে।
- এখন, ফাইল
base > deployment.yaml
এ একই লাইন পরিবর্তন করুন:
replicas: 1
আপনার একটি পোড পরিষেবা থেকে সরানো দেখতে হবে যাতে শুধুমাত্র একটি অবশিষ্ট থাকে।
- অবশেষে, স্ক্যাফোল্ড স্থানীয় উন্নয়ন বন্ধ করতে টার্মিনাল উইন্ডোতে
Ctrl-C
টিপুন।
একটি মুক্তি কাটা
এর পরে, আপনি একটি রিলিজ ইমেজ তৈরি করে একটি রিলিজ তৈরি করবেন এবং এটিকে একটি ক্লাস্টারে স্থাপন করবেন।
- রিলিজ তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
skaffold build --file-output artifacts.json
এই কমান্ডটি চূড়ান্ত চিত্র তৈরি করবে (যদি প্রয়োজন হয়) এবং artifacts.json
ফাইলে প্রকাশের বিবরণ আউটপুট করবে।
আপনি যদি আপনার ক্লাস্টারে স্থাপন করতে ক্লাউড ডিপ্লোয়ের মতো একটি টুল ব্যবহার করতে চান তবে এই ফাইলটিতে প্রকাশের তথ্য রয়েছে। এর মানে হল যে আর্টিফ্যাক্ট(গুলি) বেঁচে থাকার পথে অপরিবর্তনীয়।
-
artifacts.json
ফাইলের বিষয়বস্তু দেখতে নিম্নলিখিত কমান্ডটি চালান:
cat artifacts.json | jq
লক্ষ্য করুন যে ফাইলটিতে ছবিটির রেফারেন্স রয়েছে যা চূড়ান্ত স্থাপনায় ব্যবহার করা হবে।
মঞ্চায়নে স্থাপন করা হচ্ছে
-
staging
প্রোফাইল ব্যবহার করে রিলিজ স্থাপন করতে নিম্নলিখিত কমান্ডটি চালান:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail
একবার স্থাপনা সম্পূর্ণ হলে আপনাকে নিম্নলিখিতগুলির মতো দুটি পড থেকে আউটপুট দেখতে হবে:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
- স্ক্যাফোল্ড আউটপুট বন্ধ করতে টার্মিনাল উইন্ডোতে Ctrl-C টিপুন।
- ক্লাস্টারে আপনার অ্যাপ্লিকেশন আপ এবং চলমান পর্যবেক্ষণ করতে নিম্নলিখিত কমান্ডটি চালান:
kubectl get all --namespace staging
আপনার দুটি স্বতন্ত্র পড নাম দেখতে হবে, কারণ অ্যাপ্লিকেশনটির staging
প্রোফাইলটি নির্দিষ্ট করে যে স্থাপনায় দুটি প্রতিলিপি থাকা উচিত।
উৎপাদনে স্থাপন করা হচ্ছে
- এখন
prod
প্রোফাইল ব্যবহার করে রিলিজ স্থাপন করতে নিম্নলিখিত কমান্ডটি চালান:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail
একবার স্থাপনা সম্পূর্ণ হলে আপনাকে নিম্নলিখিতগুলির মতো তিনটি পড থেকে আউটপুট দেখতে হবে:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
- স্ক্যাফোল্ড আউটপুট বন্ধ করতে টার্মিনাল উইন্ডোতে Ctrl-C টিপুন।
আপনার তিনটি স্বতন্ত্র পডের নাম দেখতে হবে, কারণ অ্যাপ্লিকেশনটির prod
প্রোফাইলটি উল্লেখ করে যে স্থাপনায় তিনটি প্রতিলিপি থাকা উচিত।
- ক্লাস্টারে আপনার অ্যাপ্লিকেশন আপ এবং চলমান পর্যবেক্ষণ করতে নিম্নলিখিত কমান্ডটি চালান:
kubectl get all --namespace prod
আপনি আউটপুট দেখতে পাবেন যাতে নিম্নলিখিতগুলির অনুরূপ লাইন রয়েছে যা প্রোড স্থাপনা দেখায়:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/skaffold-kustomize-prod 3/3 3 3 16m
আপনি তিনটি অ্যাপ্লিকেশন পড চলমান দেখতে হবে.
NAME READY STATUS RESTARTS AGE pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m
8. অভিনন্দন!
অভিনন্দন! আপনি Understanding Skaffold
ল্যাব সম্পূর্ণ করেছেন এবং স্থানীয় উন্নয়ন এবং অ্যাপ্লিকেশন স্থাপনার জন্য কীভাবে স্ক্যাফোল্ড কনফিগার এবং ব্যবহার করতে হয় তা শিখেছেন।
এরপর কি:
Skaffold সম্পর্কে আরও শিখতে থাকুন:
ক্লিনআপ
- স্থানীয় ক্লাস্টার বন্ধ করতে নিম্নলিখিত কমান্ডটি চালান:
minikube delete