Kustomize দিয়ে স্কেলিং

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

Kustomize হলো এমন একটি টুল যা অ্যাপ্লিকেশন কনফিগারেশন কাস্টমাইজ করার জন্য একটি টেমপ্লেট-মুক্ত উপায় নিয়ে আসে, যার ফলে রেডিমেড অ্যাপ্লিকেশনগুলোর ব্যবহার সহজ হয়ে যায়। এটি একটি স্বতন্ত্র ইউটিলিটি হিসেবে উপলব্ধ এবং kubectl apply -k কমান্ডের মাধ্যমে এটি `kubectl`-এর সাথে বিল্ট-ইন থাকে অথবা একটি স্বতন্ত্র CLI হিসেবেও ব্যবহার করা যায়। আরও বিস্তারিত জানতে `kustomize.io` দেখুন।

এই টিউটোরিয়ালে আপনি কাস্টোমাইজ (Kustomize)-এর কিছু মূল ধারণা নিয়ে কাজ করবেন এবং অ্যাপ্লিকেশন ও এনভায়রনমেন্টের ভ্যারিয়েশনগুলো পরিচালনা করতে এটি ব্যবহার করবেন।

আপনি করবেন:

  • কাস্টোমাইজ কমান্ড লাইন ক্লায়েন্ট ব্যবহার করুন
  • সাধারণ উপাদানগুলিকে অগ্রাহ্য করুন
  • বৃহত্তর YAML কাঠামো প্যাচ করুন
  • একাধিক ওভারলে স্তর ব্যবহার করুন

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

  1. নিম্নলিখিত ইউআরএল-এ গিয়ে ক্লাউড শেল এডিটর খুলুন।

https://ide.cloud.google.com

  1. টার্মিনাল উইন্ডোতে এই টিউটোরিয়ালের জন্য একটি ওয়ার্কিং ডিরেক্টরি তৈরি করুন।

mkdir kustomize-lab

  1. ডিরেক্টরিতে প্রবেশ করুন এবং IDE ওয়ার্কস্পেস সেট করুন।

cd kustomize-lab && cloudshell workspace .

৩. কাস্টোমাইজ কমান্ড লাইন ক্লায়েন্ট ব্যবহার করা

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

এই অংশে আপনি একটি বেস কাস্টোমাইজ কনফিগারেশন তৈরি করবেন এবং স্বতন্ত্র কাস্টোমাইজ কমান্ড লাইন ক্লায়েন্ট ব্যবহার করে ফাইলগুলো প্রসেস করবেন।

  1. শুরুতে, আপনার মূল কনফিগারেশন ফাইলগুলো রাখার জন্য একটি ফোল্ডার তৈরি করতে হবে।

mkdir -p chat-app/base

  1. বেস ফোল্ডারে একটি সহজ kubernetes deployment.yaml তৈরি করুন।

cat <<EOF > chat-app/base/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`metadata:`

  `name: chat-app`

`spec:`

  `containers:`

  `- name: chat-app`

    `image: chat-app-image`

EOF

  1. বেস kustomization.yaml তৈরি করুন।

Kustomize এন্ট্রি পয়েন্ট হিসেবে kustomization.yaml নামের একটি ফাইল খোঁজে। এই ফাইলে বিভিন্ন বেস ও ওভাররাইড ফাইলের রেফারেন্সের পাশাপাশি নির্দিষ্ট ওভাররাইড ভ্যালুগুলোও থাকে।

একটি kustomization.yaml ফাইল তৈরি করুন যা deployment.yaml মূল রিসোর্স হিসেবে উল্লেখ করে।

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. বেস ফোল্ডারে kustomize কমান্ডটি চালান। এটি করলে কোনো পরিবর্তন ছাড়াই ডিপ্লয়মেন্ট YAML ফাইলগুলো আউটপুট হিসেবে পাওয়া যাবে, যা প্রত্যাশিত, কারণ আপনি এখনও কোনো ভ্যারিয়েশন যোগ করেননি।

kustomize build chat-app/base

এই স্বতন্ত্র ক্লায়েন্টটিকে kubectl ক্লায়েন্টের সাথে যুক্ত করে আউটপুট সরাসরি প্রয়োগ করা যায়, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে। এর ফলে build কমান্ডের আউটপুট সরাসরি kubectl apply কমান্ডে স্ট্রিম করা হয়।

(কার্যকর করবেন না - শুধুমাত্র তথ্যসূত্র হিসেবে অন্তর্ভুক্ত)

kustomize build chat-app/base | kubectl apply -f -

কাস্টোমাইজ ক্লায়েন্টের কোনো নির্দিষ্ট সংস্করণের প্রয়োজন হলে এই কৌশলটি কার্যকর।

বিকল্পভাবে, kubectl-এর মধ্যেই সমন্বিত টুলিং ব্যবহার করে kustomize চালানো যেতে পারে। যেমনটি নিচের উদাহরণে দেখানো হয়েছে।

(কার্যকর করবেন না - শুধুমাত্র তথ্যসূত্র হিসেবে অন্তর্ভুক্ত)

kubectl apply -k chat-app/base

৪. অগ্রাহ্যকারী সাধারণ উপাদানসমূহ

এখন যেহেতু আপনার ওয়ার্কস্পেস কনফিগার করা হয়ে গেছে এবং আপনি যাচাই করে নিয়েছেন যে কাস্টোমাইজ ঠিকমতো কাজ করছে, তাই কিছু বেস ভ্যালু ওভাররাইড করার সময় এসেছে।

প্রতিটি অ্যাপ্লিকেশন এবং পরিবেশের জন্য ইমেজ, নেমস্পেস এবং লেবেল প্রায়শই কাস্টমাইজ করা হয়। যেহেতু এগুলো প্রায়শই পরিবর্তন করা হয়, তাই কাস্টোমাইজ আপনাকে সরাসরি kustomize.yaml এ এগুলো ঘোষণা করার সুযোগ দেয়, যার ফলে এই সাধারণ পরিস্থিতিগুলোর জন্য অনেক প্যাচ তৈরি করার প্রয়োজন হয় না।

এই কৌশলটি প্রায়শই কোনো টেমপ্লেটের একটি নির্দিষ্ট ইনস্ট্যান্স তৈরি করতে ব্যবহৃত হয়। এখন শুধুমাত্র নাম এবং এর নেমস্পেস পরিবর্তন করে রিসোর্সের একটি মূল সেট একাধিক ইমপ্লিমেন্টেশনের জন্য ব্যবহার করা যেতে পারে।

এই উদাহরণে, আপনি আপনার kustomization.yaml ফাইলে একটি নেমস্পেস, নেম প্রিফিক্স এবং কিছু লেবেল যোগ করবেন।

  1. সাধারণ লেবেল এবং নেমস্পেস অন্তর্ভুক্ত করতে kustomization.yaml ফাইলটি আপডেট করুন।

নিম্নলিখিত কমান্ডগুলি আপনার টার্মিনালে কপি করে চালান।

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

namespace: my-namespace

nameprefix: my-

commonLabels:

app: my-app

EOF

  1. বিল্ড কমান্ডটি চালান।

এই পর্যায়ে বিল্ডটি চালালে দেখা যায় যে, ফলস্বরূপ YAML ফাইলটিতে এখন সার্ভিস এবং ডিপ্লয়মেন্ট ডেফিনিশন উভয়ের মধ্যেই নেমস্পেস, লেবেল এবং প্রিফিক্সযুক্ত নামগুলো অন্তর্ভুক্ত রয়েছে।

kustomize build chat-app/base

লক্ষ্য করুন, আউটপুটে এমন লেবেল এবং নেমস্পেস রয়েছে যা ডিপ্লয়মেন্ট YAML ফাইলে নেই। আরও লক্ষ্য করুন, কীভাবে নামটি chat-app থেকে my-chat-app এ পরিবর্তন করা হয়েছে।

(আউটপুট কপি করবেন না)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

৫. বৃহত্তর YAML কাঠামো প্যাচ করা

কাস্টোমাইজ বেস রিসোর্সের উপর প্যাচ প্রয়োগ করার সুবিধাও প্রদান করে। এই কৌশলটি প্রায়শই বিভিন্ন অ্যাপ্লিকেশন এবং পরিবেশের মধ্যে বৈচিত্র্য আনার জন্য ব্যবহৃত হয়।

এই ধাপে, আপনি একটিমাত্র অ্যাপ্লিকেশনের জন্য পরিবেশের বিভিন্ন রূপ তৈরি করবেন, যেগুলো একই মূল রিসোর্স ব্যবহার করবে।

  1. বিভিন্ন পরিবেশের জন্য ফোল্ডার তৈরি করে শুরু করুন।

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. নিম্নলিখিত কমান্ড ব্যবহার করে স্টেজ প্যাচটি লিখুন।

cat <<EOF > chat-app/dev/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: dev`

EOF

  1. এখন নিম্নলিখিত কমান্ড ব্যবহার করে প্রোডাকশন প্যাচটি লিখুন।

cat <<EOF > chat-app/prod/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: prod`

EOF

লক্ষ্য করুন যে উপরের প্যাচগুলিতে কন্টেইনার ইমেজের নাম নেই। সেই মানটি আগের ধাপে আপনার তৈরি করা base/deployment.yaml-এ দেওয়া আছে। তবে এই প্যাচগুলিতে dev এবং prod-এর জন্য স্বতন্ত্র এনভায়রনমেন্ট ভেরিয়েবল রয়েছে।

  1. বেস ডিরেক্টরির জন্য কাস্টোমাইজ YAML ফাইলগুলো প্রয়োগ করুন।

বেস kustomization.yaml ফাইলটি পুনরায় লিখুন এবং নেমস্পেস ও নেম প্রিফিক্স মুছে ফেলুন, কারণ এটি কোনো পরিবর্তন ছাড়াই শুধুমাত্র বেস কনফিগারেশন। এই ফিল্ডগুলো কিছুক্ষণের মধ্যেই এনভায়রনমেন্ট ফাইলে স্থানান্তর করা হবে।

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. dev ডিরেক্টরির জন্য kustomize YAML ফাইলগুলো প্রয়োগ করুন।

এখন আপনার টার্মিনালে নিম্নলিখিত কমান্ডগুলো চালিয়ে dev এবং prod-এর জন্য পরিবর্তনগুলো প্রয়োগ করুন।

cat <<EOF > chat-app/dev/kustomization.yaml

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

ফাইলটির patches :` অংশের সংযোজনটি লক্ষ্য করুন। এটি নির্দেশ করে যে কাস্টোমাইজ যেন মূল রিসোর্সগুলোর উপরে এই ফাইলগুলোকে ওভারলে করে।

  1. prod ডিরেক্টরির জন্য kustomize YAML ফাইলগুলো প্রয়োগ করুন।

cat <<EOF > chat-app/prod/kustomization.yaml

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. ফাইলগুলো মার্জ করতে কাস্টোমাইজ চালান।

বেস এবং এনভায়রনমেন্ট ফাইলগুলো তৈরি হয়ে গেলে, আপনি বেস ফাইলগুলো প্যাচ করার জন্য কাস্টোমাইজ প্রসেসটি চালাতে পারেন।

মার্জ করা ফলাফল দেখতে dev-এর জন্য নিম্নলিখিত কমান্ডটি চালান।

kustomize build chat-app/dev

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

৬. একাধিক স্তরের ওভারলে ব্যবহার করা

অনেক প্রতিষ্ঠানেই এমন একটি দল থাকে যারা অ্যাপ দলগুলোকে সহায়তা করে এবং প্ল্যাটফর্মটি পরিচালনা করে। প্রায়শই এই দলগুলো এমন কিছু নির্দিষ্ট বিবরণ অন্তর্ভুক্ত করতে চায় যা সমস্ত পরিবেশের সমস্ত অ্যাপে থাকা আবশ্যক, যেমন একটি লগিং এজেন্ট।

এই উদাহরণে, আপনি একটি shared-kustomize ফোল্ডার এবং রিসোর্স তৈরি করবেন যা সমস্ত অ্যাপ্লিকেশন দ্বারা অন্তর্ভুক্ত হবে, সেগুলি যে পরিবেশেই স্থাপন করা হোক না কেন।

  1. shared-kustomize ফোল্ডারটি তৈরি করুন

mkdir shared-kustomize

  1. শেয়ার্ড ফোল্ডারে একটি সহজ deployment.yaml তৈরি করুন।

cat <<EOF > shared-kustomize/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: logging-agent`

    `image: logging-agent-image`

EOF

  1. শেয়ার্ড ফোল্ডারে একটি kustomization.yaml তৈরি করুন।

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. আপনার অ্যাপ্লিকেশন থেকে shared-kustomize ফোল্ডারটি উল্লেখ করুন।

যেহেতু আপনি আপনার সমস্ত অ্যাপ্লিকেশনের ভিত্তি হিসেবে shared-kustomize ফোল্ডারটি ব্যবহার করতে চান, তাই আপনাকে আপনার chat-app/base/kustomization.yaml আপডেট করে shared-kustomize ভিত্তি হিসেবে ব্যবহার করতে হবে। এরপর এর উপরে এর নিজস্ব deployment.yaml ফাইলটি প্যাচ করুন। তারপর এর উপরে এনভায়রনমেন্ট ফোল্ডারগুলো আবার প্যাচ হবে।

নিম্নলিখিত কমান্ডগুলি আপনার টার্মিনালে কপি করে চালান।

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- ../../shared-kustomize

commonLabels:

app: chat-app

patches:

- deployment.yaml

EOF

  1. kustomize চালান এবং dev-এর জন্য মার্জ করা ফলাফলগুলো দেখুন।

kustomize build chat-app/dev

লক্ষ্য করুন, আউটপুটটিতে অ্যাপ বেস, অ্যাপ এনভায়রনমেন্ট এবং shared-kustomize ফোল্ডারগুলো থেকে একত্রিত ফলাফল রয়েছে। বিশেষত, আপনি কন্টেইনার সেকশনে এই তিনটি জায়গারই ভ্যালু দেখতে পাবেন।

(আউটপুট কপি করবেন না)

<পূর্ব>

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

</pre>