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

১. উদ্দেশ্য

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

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

তুমি করবে:

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

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

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

  1. নিম্নলিখিত URL টি পরিদর্শন করে ক্লাউড শেল সম্পাদকটি খুলুন:
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}}

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

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

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

  • build
  • deploy
  • profiles

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

স্কাফোল্ড পর্যায়ের সম্পূর্ণ তালিকা সম্পর্কে আপনি স্কাফোল্ড পাইপলাইন পর্যায়ের ডকুমেন্টেশনে আরও পড়তে পারেন।

৪. নির্মাণ

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

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

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

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

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

এই উদাহরণে আপনি তিনটি টার্গেটের জন্য দুটি ওভারলে দেখতে পাবেন, dev , staging এবং proddev ওভারলে স্থানীয় উন্নয়নের সময় ব্যবহার করা হবে এবং Skaffold ব্যবহার করে স্থাপনের সময় স্টেজিং এবং prod ওভারলে ব্যবহার করা হবে।

6. প্রোফাইল

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

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

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

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

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

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

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

আপনার Kubernetes পরিবেশ কনফিগার করা

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

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

Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
  1. dev , staging এবং prod এর জন্য Kubernetes namespace তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
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

মনে রাখবেন যে সঠিক পডের নাম উপরে দেওয়া জেনেরিক আউটপুট থেকে আলাদা হবে।

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

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

  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)

আবার আপনি অ্যাপ্লিকেশনটি পুনর্নির্মাণ এবং পুনরায় স্থাপন করা দেখতে পাবেন, আউটপুট লাইনটি প্রতি 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. স্কাফোল্ড আউটপুট বন্ধ করতে টার্মিনাল উইন্ডোতে 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. স্কাফোল্ড আউটপুট বন্ধ করতে টার্মিনাল উইন্ডোতে 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