স্ক্যাফোল্ড বোঝা

১. উদ্দেশ্যসমূহ

Skaffold হলো এমন একটি টুল যা আপনার অ্যাপ্লিকেশন বিল্ড, পুশ এবং ডিপ্লয় করার ওয়ার্কফ্লো পরিচালনা করে। আপনি Skaffold ব্যবহার করে সহজেই একটি লোকাল ডেভেলপমেন্ট ওয়ার্কস্পেস কনফিগার করতে, আপনার অভ্যন্তরীণ ডেভেলপমেন্ট প্রক্রিয়াকে সুবিন্যস্ত করতে এবং আপনার Kubernetes ম্যানিফেস্টগুলো পরিচালনা করতে KustomizeHelm-এর মতো অন্যান্য টুলের সাথে ইন্টিগ্রেট করতে পারেন।

এই টিউটোরিয়ালে আপনি স্ক্যাফোল্ডের কিছু মূল ধারণা নিয়ে কাজ করবেন, এটি ব্যবহার করে আপনার অভ্যন্তরীণ ডেভেলপমেন্ট প্রক্রিয়াকে স্বয়ংক্রিয় করবেন এবং তারপর একটি অ্যাপ্লিকেশন ডেপ্লয় করবেন।

আপনি করবেন:

  • স্থানীয় উন্নয়নের জন্য স্ক্যাফোল্ড কনফিগার এবং সক্রিয় করুন
  • একটি সাধারণ গোল্যাং অ্যাপ্লিকেশন তৈরি এবং চালান
  • Skaffold-এর মাধ্যমে স্থানীয় অ্যাপ্লিকেশন ডেপ্লয়মেন্ট পরিচালনা করুন
  • ম্যানিফেস্ট রেন্ডার করুন এবং আপনার অ্যাপ্লিকেশনটি ডেপ্লয় করুন।

২. শুরু করার আগে

আপনার কর্মক্ষেত্র প্রস্তুত করা

  1. নিম্নলিখিত ইউআরএল-এ গিয়ে ক্লাউড শেল এডিটরটি খুলুন:
https://shell.cloud.google.com

তৃতীয় পক্ষের কুকিজের অনুমতি দিন। "সাইট কাজ করছে না" বিকল্পে ক্লিক করুন এবং তারপর "কুকিজের অনুমতি দিন" বিকল্পে ক্লিক করুন।

7b702066a2135a3d.png

3394f82132eb4fd4.png

  1. যদি আপনি ইতিমধ্যে তা না করে থাকেন, তাহলে টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডটি ব্যবহার করে অ্যাপ্লিকেশন সোর্সটি ক্লোন করুন:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
  1. ক্লোন করা রিপোজিটরি ডিরেক্টরিতে প্রবেশ করুন:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
  1. নিম্নলিখিত কমান্ডটি চালিয়ে আপনার ক্লাউড শেল ওয়ার্কস্পেসকে বর্তমান ডিরেক্টরিতে সেট করুন:
cloudshell workspace .

আপনার প্রকল্প প্রস্তুত করা

  1. নিম্নলিখিত কমান্ডটি চালিয়ে আপনার গুগল ক্লাউড প্রজেক্টটি সঠিকভাবে সেট করা আছে কিনা তা নিশ্চিত করুন:
gcloud config set project {{project-id}}

৩. স্ক্যাফোল্ড দিয়ে শুরু করা

  1. শীর্ষ-স্তরের 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
  1. IDE প্যানে skaffold.yaml ফাইলটি খুলুন। এটি হলো শীর্ষ-স্তরের কনফিগারেশন ফাইল যা স্ক্যাফোল্ড পাইপলাইনকে সংজ্ঞায়িত করে।

Kubernetes-এর মতো YAML ফরম্যাট এবং YAML-এর নিম্নলিখিত বিভাগগুলি লক্ষ্য করুন:

  • build
  • deploy
  • profiles

এই বিভাগগুলো নির্ধারণ করে যে অ্যাপ্লিকেশনটি কীভাবে বিল্ড ও ডেপ্লয় করা উচিত, সেইসাথে প্রতিটি ডেপ্লয়মেন্ট টার্গেটের জন্য প্রোফাইলও নির্ধারণ করে।

আপনি Skaffold Pipeline Stages ডকুমেন্টেশনে Skaffold-এর পর্যায়গুলোর সম্পূর্ণ তালিকা সম্পর্কে আরও পড়তে পারেন।

৪. নির্মাণ করুন

build সেকশনে এমন কনফিগারেশন থাকে যা নির্ধারণ করে অ্যাপ্লিকেশনটি কীভাবে বিল্ড করা হবে। এক্ষেত্রে, git ট্যাগগুলো কীভাবে পরিচালনা করা হবে তার কনফিগারেশনের পাশাপাশি একটি artifacts সেকশনও দেখতে পাবেন, যা অ্যাপ্লিকেশনটি গঠনকারী কন্টেইনার ইমেজগুলোকে সংজ্ঞায়িত করে।

এর পাশাপাশি, এই অংশে আপনি ইমেজগুলো বিল্ড করার জন্য ব্যবহৃত Dockerfile রেফারেন্স দেখতে পাবেন। স্ক্যাফোল্ড (Skaffold) অতিরিক্তভাবে Jib (Jib), Maven , Gradle , ক্লাউড-নেটিভ Buildpacks , Bazel এবং কাস্টম স্ক্রিপ্টের মতো অন্যান্য বিল্ড টুলও সাপোর্ট করে। আপনি স্ক্যাফোল্ড বিল্ড ডকুমেন্টেশনে (Skaffold Build documentation) এই কনফিগারেশন সম্পর্কে আরও পড়তে পারেন।

৫. স্থাপন করুন

deploy সেকশনে এমন কনফিগারেশন থাকে যা নির্ধারণ করে অ্যাপ্লিকেশনটি কীভাবে ডিপ্লয় করা হবে। এক্ষেত্রে আপনি একটি ডিফল্ট ডিপ্লয়মেন্টের উদাহরণ দেখতে পারেন, যা Skaffold-কে Kustomize টুলটি ব্যবহার করার জন্য কনফিগার করে।

Kustomize টুলটি একগুচ্ছ সাধারণ কম্পোনেন্ট YAML ফাইলকে ( base ডিরেক্টরির অধীনে) এক বা একাধিক "ওভারলে"-এর সাথে একত্রিত করে Kubernetes ম্যানিফেস্ট তৈরি করার কার্যকারিতা প্রদান করে। এই ওভারলেগুলো সাধারণত এক বা একাধিক ডেপ্লয়মেন্ট টার্গেটের (যেমন dev , test , staging , production বা অনুরূপ) সাথে সঙ্গতিপূর্ণ থাকে।

এই উদাহরণে আপনি dev , staging এবং prod— এই তিনটি টার্গেটের জন্য দুটি ওভারলে দেখতে পাচ্ছেন। dev ওভারলেটি লোকাল ডেভেলপমেন্টের সময় ব্যবহৃত হবে এবং stagingprod ওভারলে দুটি Skaffold ব্যবহার করে ডিপ্লয় করার সময় ব্যবহৃত হবে।

৬. প্রোফাইল

profiles বিভাগে এমন কনফিগারেশন থাকে যা বিভিন্ন কনটেক্সটের জন্য বিল্ড, টেস্ট এবং ডিপ্লয়মেন্ট কনফিগারেশন নির্ধারণ করে। বিভিন্ন কনটেক্সট সাধারণত আপনার অ্যাপ্লিকেশন ডিপ্লয়মেন্ট পাইপলাইনের বিভিন্ন এনভায়রনমেন্টকে বোঝায়, যেমন এই উদাহরণে staging বা prod । এর মানে হলো, আপনি গতানুগতিক কনফিগারেশনের পুনরাবৃত্তি না করেই এমন ম্যানিফেস্টগুলো সহজেই পরিচালনা করতে পারেন, যেগুলোর বিষয়বস্তু বিভিন্ন টার্গেট এনভায়রনমেন্টের জন্য আলাদা হওয়া প্রয়োজন।

profiles বিভাগের কনফিগারেশন মূল কনফিগারেশনের (যেমন, build , test বা deploy বিভাগ) যেকোনো আইটেমকে প্রতিস্থাপন বা প্যাচ করতে পারে।

এর একটি উদাহরণ হিসেবে, overlays > prod > deployment.yaml ফাইলটি খুলুন। লক্ষ্য করুন যে, এখানে বেস কনফিগারেশনকে ওভাররাইড করে অ্যাপ্লিকেশনটির রেপ্লিকার সংখ্যা তিন হিসেবে কনফিগার করা হয়েছে।

  1. IDE প্যানে app > main.go ফাইলটি খুলুন। এটি একটি সাধারণ গোল্যাং অ্যাপ্লিকেশন যা প্রতি সেকেন্ডে stdout এ একটি স্ট্রিং লেখে।
  2. লক্ষ্য করুন যে অ্যাপ্লিকেশনটি যে Kubernetes পড-এ চলছে তার নামও আউটপুট করে।

ডকারফাইল দেখা

  1. IDE প্যানে app > Dockerfile ফাইলটি খুলুন। এই ফাইলটিতে main.go ফাইলের জন্য অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করার নির্দেশাবলীর একটি ধারাবাহিকতা রয়েছে এবং এটি শীর্ষ-স্তরের skaffold.yaml ফাইলে উল্লেখিত আছে।

৭. স্ক্যাফোল্ডের সাহায্যে উন্নয়ন

আপনার কুবারনেটিস পরিবেশ কনফিগার করা

  1. আপনার স্থানীয় Kubernetes ক্লাস্টারটি চালু এবং কনফিগার করা আছে কিনা তা নিশ্চিত করতে নিম্নলিখিত কমান্ডটি চালান:
minikube start

এতে কয়েক মিনিট সময় লাগতে পারে। ক্লাস্টারটি সফলভাবে চালু হলে আপনি নিম্নলিখিত আউটপুটটি দেখতে পাবেন:

Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
  1. dev , staging এবং prod জন্য Kubernetes নেমস্পেস তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
kubectl apply -f namespaces.yaml

আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন:

namespace/dev created
namespace/staging created
namespace/prod created

স্থানীয় উন্নয়নের জন্য স্ক্যাফোল্ড ব্যবহার

  1. অ্যাপ্লিকেশনটি বিল্ড করতে এবং ক্লাউড শেলে চলমান একটি স্থানীয় কুবারনেটিস ক্লাস্টারে এটি ডেপ্লয় করতে নিম্নলিখিত কমান্ডটি চালান:
skaffold dev

আপনি অ্যাপ্লিকেশন কন্টেইনার বিল্ড প্রক্রিয়াটি চলতে দেখবেন, যাতে এক মিনিট সময় লাগতে পারে, এবং তারপর প্রতি সেকেন্ডে অ্যাপ্লিকেশনটির আউটপুট পুনরাবৃত্তি হতে থাকবে:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx

মনে রাখবেন যে, সঠিক পড নামটি উপরে দেওয়া সাধারণ আউটপুট থেকে ভিন্ন হবে।

অ্যাপ্লিকেশনটিতে পরিবর্তন করা

এখন যেহেতু অ্যাপ্লিকেশনটি আপনার স্থানীয় কুবারনেটিস ক্লাস্টারে চলছে, আপনি কোডে পরিবর্তন করতে পারেন এবং স্ক্যাফোল্ড স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশনটি রিবিল্ড করে ক্লাস্টারে পুনরায় স্থাপন করবে।

  1. IDE প্যানে app > main.go ফাইলটি খুলুন এবং আউটপুট স্ট্রিংটি পরিবর্তন করুন:
"Hello world from pod %s!\n"

প্রতি:

"Hello Skaffold world from pod %s!\n"

পরিবর্তনটি করার পর আপনি দেখবেন যে Skaffold ইমেজটি পুনর্নির্মাণ করে ক্লাস্টারে পুনরায় স্থাপন করছে এবং টার্মিনাল উইন্ডোতে আউটপুটে পরিবর্তনটি দৃশ্যমান হবে।

  1. এখন, IDE প্যানে থাকা 'app > main.go' ফাইলটিতেও এই লাইনটি পরিবর্তন করুন:
time.Sleep(time.Second * 1)

থেকে

time.Sleep(time.Second * 10)

আপনি আবার দেখবেন অ্যাপ্লিকেশনটি পুনর্নির্মিত ও পুনঃস্থাপন করা হয়েছে এবং আউটপুট লাইনটি প্রতি ১০ সেকেন্ডে একবার প্রদর্শিত হবে।

Kubernetes কনফিগে পরিবর্তন করা

এরপর আপনি Kubernetes কনফিগে একটি পরিবর্তন করবেন, এবং Skaffold আরও একবার স্বয়ংক্রিয়ভাবে রিডিপ্লয় হবে।

  1. IDE-তে base > deployment.yaml ফাইলটি খুলুন এবং এই লাইনটি পরিবর্তন করুন:
replicas: 1

থেকে

replicas: 2

অ্যাপ্লিকেশনটি পুনরায় স্থাপন করা হয়ে গেলে, আপনি দুটি পড চলতে দেখবেন – প্রতিটির নাম আলাদা হবে।

  1. এখন, base > deployment.yaml ফাইলের একই লাইনটি পরিবর্তন করে আগের অবস্থায় ফিরিয়ে আনুন:
replicas: 1

আপনি দেখবেন যে পডগুলোর মধ্যে একটিকে পরিষেবা থেকে সরিয়ে দেওয়া হয়েছে, যাতে কেবল একটিই অবশিষ্ট থাকে।

  1. অবশেষে, Skaffold লোকাল ডেভেলপমেন্ট বন্ধ করতে টার্মিনাল উইন্ডোতে Ctrl-C চাপুন।

একটি রিলিজ কাটা

এরপরে, আপনি একটি রিলিজ ইমেজ তৈরি করে সেটিকে একটি ক্লাস্টারে ডেপ্লয় করবেন।

  1. রিলিজটি বিল্ড করতে নিম্নলিখিত কমান্ডটি চালান:
skaffold build --file-output artifacts.json

এই কমান্ডটি (প্রয়োজন হলে) চূড়ান্ত ইমেজটি বিল্ড করবে এবং রিলিজের বিবরণ artifacts.json ফাইলে আউটপুট করবে।

আপনি যদি আপনার ক্লাস্টারগুলিতে ডেপ্লয় করার জন্য ক্লাউড ডেপ্লয়ের মতো কোনো টুল ব্যবহার করতে চান, তাহলে এই ফাইলটিতে রিলিজের তথ্য থাকে। এর মানে হলো, লাইভে যাওয়ার পথে আর্টিফ্যাক্ট(গুলি) অপরিবর্তনীয় থাকে।

  1. artifacts.json ফাইলের বিষয়বস্তু দেখতে নিম্নলিখিত কমান্ডটি চালান:
cat artifacts.json | jq

লক্ষ্য করুন যে ফাইলটিতে সেই ইমেজটির রেফারেন্স রয়েছে যা চূড়ান্ত ডেপ্লয়মেন্টে ব্যবহার করা হবে।

স্টেজিং-এ স্থাপন করা হচ্ছে

  1. staging প্রোফাইল ব্যবহার করে রিলিজটি ডেপ্লয় করতে নিম্নলিখিত কমান্ডটি চালান:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail

ডেপ্লয়মেন্ট সম্পন্ন হলে আপনি দুটি পড থেকে নিম্নলিখিতের মতো আউটপুট দেখতে পাবেন:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
  1. Skaffold আউটপুট বন্ধ করতে টার্মিনাল উইন্ডোতে Ctrl-C চাপুন।
  2. ক্লাস্টারে আপনার অ্যাপ্লিকেশনটি চালু আছে কিনা তা পর্যবেক্ষণ করতে নিম্নলিখিত কমান্ডটি চালান:
kubectl get all --namespace staging

আপনি দুটি স্বতন্ত্র পড নাম দেখতে পাবেন, কারণ অ্যাপ্লিকেশনটির staging প্রোফাইলে উল্লেখ করা আছে যে ডিপ্লয়মেন্টে দুটি রেপ্লিকা থাকবে।

প্রোডাকশনে ডেপ্লয় করা হচ্ছে

  1. এখন prod প্রোফাইল ব্যবহার করে রিলিজটি ডেপ্লয় করতে নিম্নলিখিত কমান্ডটি চালান:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail

ডেপ্লয়মেন্ট সম্পন্ন হলে আপনি তিনটি পড থেকে নিম্নলিখিতের মতো আউটপুট দেখতে পাবেন:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
  1. Skaffold আউটপুট বন্ধ করতে টার্মিনাল উইন্ডোতে Ctrl-C চাপুন।

আপনি তিনটি স্বতন্ত্র পড নাম দেখতে পাবেন, কারণ অ্যাপ্লিকেশনটির prod প্রোফাইলে উল্লেখ করা আছে যে ডিপ্লয়মেন্টে তিনটি রেপ্লিকা থাকবে।

  1. ক্লাস্টারে আপনার অ্যাপ্লিকেশনটি চালু আছে কিনা তা পর্যবেক্ষণ করতে নিম্নলিখিত কমান্ডটি চালান:
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

৮. অভিনন্দন!

অভিনন্দন! আপনি Understanding Skaffold ল্যাবটি সম্পন্ন করেছেন এবং লোকাল ডেভেলপমেন্ট ও অ্যাপ্লিকেশন ডেপ্লয়মেন্টের জন্য স্ক্যাফোল্ড কনফিগার ও ব্যবহার করার পদ্ধতি শিখেছেন।

এরপর কী:

স্ক্যাফোল্ড সম্পর্কে আরও জানতে থাকুন:

পরিষ্কার-পরিচ্ছন্নতা

  1. স্থানীয় ক্লাস্টারটি বন্ধ করতে নিম্নলিখিত কমান্ডটি চালান:
minikube delete