Pods, ReplicaSets & Deployments · Part 1313

Kubernetes Pods with YAMLYAML File দিয়ে Pod Create করা

Pod Definition File কীভাবে লিখব: apiVersion, kind, metadata ও spec, Labels কেন দরকার, containers কেন List; তারপর kubectl create -f দিয়ে Pod Create আর Imperative vs Declarative।

A pod-definition.yaml file with its four root fields apiVersion, kind, metadata and spec highlighted, next to a terminal running kubectl create -f and kubectl get pods
FIG. 13 apiVersion, kind, metadata, spec — চারটি Field দিয়ে একটি Pod; তারপর kubectl create -f।

আগের Tutorial-এ আমরা শিখেছি YAML কী, কীভাবে Key-Value Pairs, Lists, Dictionaries এবং Indentation কাজ করে।

আমরা আরও দেখেছি কীভাবে kubectl Command ব্যবহার করে Kubernetes Pod Create করতে হয়।

যেমন:

kubectl run nginx --image=nginx

কিন্তু Real Kubernetes Environment-এ সাধারণত প্রতিটি Resource Create করার জন্য আলাদা আলাদা Commands ব্যবহার করার পরিবর্তে YAML Definition Files ব্যবহার করা হয়।

YAML File-এর মাধ্যমে Kubernetes-কে বলে দেওয়া যায় আমরা কী ধরনের Resource Create করতে চাই এবং সেই Resource-এর Configuration কেমন হবে।

এই Tutorial-এ আমরা দেখব কীভাবে একটি Kubernetes Pod YAML Definition File লিখতে হয় এবং সেই File ব্যবহার করে Pod Create করতে হয়।

1. Kubernetes Objects Create করার দুটি উপায়

Kubernetes-এ Objects Create করার দুটি Common Approach রয়েছে।

Method 1: Imperative Command

সরাসরি kubectl Command ব্যবহার করে Object Create করা।

Example:

kubectl run nginx --image=nginx

এই Command Kubernetes-এ nginx নামে একটি Pod Create করে।

এটি Quick Testing এবং Learning-এর জন্য Useful।

Method 2: YAML Definition File

অন্য Approach হলো একটি YAML File লিখে Kubernetes Resource-এর Configuration Define করা।

Example:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx

এরপর YAML File ব্যবহার করে Pod Create করা যায়।

Kubernetes-এ YAML Definition Files ব্যবহার করে বিভিন্ন Resources Define করা হয়।

যেমন:

  • Pods
  • ReplicaSets
  • Deployments
  • Services

YAML File-এর মাধ্যমে আমরা Kubernetes-কে জানাই কোন Object Create করতে হবে এবং তার Desired Configuration কী হবে।

2. Kubernetes YAML-এর Four Main Fields

Kubernetes Object Definition File-এ সাধারণত চারটি গুরুত্বপূর্ণ Root-Level Fields থাকে।

apiVersion:
kind:
metadata:
spec:

এগুলোকে Top-Level Properties অথবা Root-Level Fields বলা হয়।

বেশিরভাগ Kubernetes Workload Resources-এর YAML Manifest-এ এই Fields ব্যবহার করা হয়।

FieldMeaning
apiVersionকোন Kubernetes API Version ব্যবহার করা হবে
kindকোন ধরনের Kubernetes Object Create করা হবে
metadataObject-এর Name, Labels এবং অন্যান্য Information
specObject-এর Desired Configuration

Basic Structure

Kubernetes YAML
       |
       ├── apiVersion
       |
       ├── kind
       |
       ├── metadata
       |
       └── spec

এই চারটি Fields বুঝতে পারলে Kubernetes-এর অনেক YAML Files পড়া এবং লেখা সহজ হয়ে যায়।

Note: সব Kubernetes Resources-এর জন্য spec বাধ্যতামূলক নয়। তবে এই Tutorial-এর Pod Definition-এ চারটি Fields-ই ব্যবহার করব।

3. apiVersion — কোন Kubernetes API Version ব্যবহার করব?

apiVersion Kubernetes-কে বলে কোন API Version ব্যবহার করে Object Process করতে হবে।

একটি Basic Pod-এর জন্য:

apiVersion: v1

Different Kubernetes Resources-এর API Versions আলাদা হতে পারে।

Kubernetes ObjectCommon API Version
Podv1
Servicev1
Deploymentapps/v1
ReplicaSetapps/v1

Example: Pod

apiVersion: v1

Example: Deployment

apiVersion: apps/v1

এখানে গুরুত্বপূর্ণ বিষয় হলো Object Type অনুযায়ী Correct API Version ব্যবহার করতে হবে।

এই Tutorial-এ আমরা Pod Create করছি।

তাই ব্যবহার করব:

apiVersion: v1

4. kind — কোন Kubernetes Object Create করব?

kind Field Kubernetes-কে বলে আমরা কোন ধরনের Object Create করতে চাই।

Pod Create করার জন্য:

kind: Pod

Deployment Create করতে:

kind: Deployment

ReplicaSet Create করতে:

kind: ReplicaSet

Service Create করতে:

kind: Service

Simple Example

apiVersion: v1
kind: Pod

এখানে আমরা Kubernetes-কে বলছি:

Kubernetes API-এর v1 Version ব্যবহার করে একটি Pod Object Create করতে চাই।

মনে রাখবে

kind-এর Value অবশ্যই Kubernetes-এর Supported Resource Type-এর সঙ্গে Match করতে হবে।

Pod Definition লিখলে:

kind: Pod

ব্যবহার করতে হবে।

5. metadata — Kubernetes Object-এর Information

metadata Field-এর মধ্যে Kubernetes Object-এর Information Define করা হয়।

যেমন:

  • Name
  • Labels
  • অন্যান্য Supported Metadata Properties

Example:

metadata:
  name: myapp-pod
  labels:
    app: myapp

এখানে:

name হলো Pod-এর Name।

labels হলো Pod-এর সঙ্গে যুক্ত Key-Value Tags।

Structure

metadata
   |
   ├── name: myapp-pod
   |
   └── labels
         |
         └── app: myapp

এখানে metadata হলো একটি Dictionary।

তার Child Properties হলো name এবং labels।

আবার labels নিজেও একটি Dictionary।

YAML Indentation

metadata:
  name: myapp-pod
  labels:
    app: myapp

এখানে:

  • name এবং labels একই Indentation Level-এ রয়েছে।
  • app হলো labels-এর Child Property।

এই Parent-Child Relationship YAML Indentation দিয়ে বোঝানো হয়।

6. Kubernetes Labels কেন গুরুত্বপূর্ণ?

Kubernetes Labels ব্যবহার করে Objects Identify, Group এবং Select করা যায়।

Labels হলো Key-Value Pairs।

Example:

labels:
  app: myapp
  type: frontend

এখানে দুটি Labels রয়েছে।

app  → myapp
type → frontend

ধরো, তোমার Kubernetes Cluster-এ অনেক Pods Running রয়েছে।

যেমন:

100 Frontend Pods
100 Backend Pods
 50 Database Pods

এখন যদি Pods-এর Labels ঠিকভাবে Configure করা থাকে, তাহলে নির্দিষ্ট Category-এর Pods Identify এবং Filter করা সহজ হয়।

Example Labels

labels:
  app: ecommerce
  tier: frontend
  environment: dev

এখানে:

Label KeyLabel Value
appecommerce
tierfrontend
environmentdev

Labels ব্যবহার করে Kubernetes Objects Group করা যায়।

Important Difference

metadata-এর মধ্যে Arbitrary Field Names ব্যবহার করা যায় না।

Kubernetes যেসব Metadata Fields Support করে, সেগুলোই ব্যবহার করতে হবে।

যেমন:

metadata:
  name: myapp-pod
  labels:
    app: myapp

কিন্তু labels-এর মধ্যে Kubernetes-এর Label Naming Rules অনুসরণ করে Custom Key-Value Pairs Define করা যায়।

7. spec — Pod-এর Desired Configuration

spec Field Kubernetes Object-এর Desired Configuration Define করে।

Pod-এর ক্ষেত্রে spec Kubernetes-কে বলে Pod-এর মধ্যে কোন Containers Run করতে হবে।

Example:

spec:
  containers:
    - name: nginx-container
      image: nginx

এখানে:

  • spec হলো একটি Dictionary।
  • containers হলো একটি List।
  • List-এর প্রতিটি Item হলো একটি Dictionary।
  • name হলো Container-এর Name।
  • image হলো Container Image।

Structure

spec
 |
 └── containers (List)
          |
          └── Container (Dictionary)
                   |
                   ├── name: nginx-container
                   |
                   └── image: nginx

এই YAML Structure Kubernetes-কে বলে Pod-এর মধ্যে একটি Container Run করতে হবে।

Container-এর Name হবে nginx-container।

আর Container Image হবে nginx।

8. containers কেন List?

এখানে একটি গুরুত্বপূর্ণ প্রশ্ন আসে।

containers Field কেন List হিসেবে Define করা হয়?

কারণ একটি Kubernetes Pod-এর মধ্যে একাধিক Containers থাকতে পারে।

Example:

Pod
 |
 ├── Main Application Container
 |
 └── Helper Container

তাই Kubernetes Pod Specification-এ containers একটি List।

Single Container Example

containers:
  - name: nginx-container
    image: nginx

এখানে Dash (-) List-এর একটি Item বোঝায়।

যদিও আমাদের Pod-এর মধ্যে একটি Container রয়েছে, তারপরও containers List হিসেবে Define করতে হয়।

Multi-Container Structure

containers:
  - name: main-container
    image: nginx

  - name: helper-container
    image: busybox

এখানে দুটি Container Definitions রয়েছে।

তবে এই Tutorial-এ আমরা Single-Container Pod নিয়ে কাজ করব।

9. Complete Kubernetes Pod YAML Example

এবার সব Fields একসঙ্গে ব্যবহার করে একটি Complete Pod Definition লিখি।

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
    - name: nginx-container
      image: nginx

এই YAML File Kubernetes-কে কী বলছে?

Step 1: apiVersion: v1

Kubernetes API-এর v1 Version ব্যবহার করো।

Step 2: kind: Pod

একটি Pod Object Create করো।

Step 3: metadata.name: myapp-pod

Pod-এর Name হবে myapp-pod।

Step 4: metadata.labels.app: myapp

Pod-এর সঙ্গে app=myapp Label Attach করো।

Step 5: spec.containers

Pod-এর মধ্যে একটি Container Run করো।

Step 6: name: nginx-container

Container-এর Name হবে nginx-container।

Step 7: image: nginx

Container Run করার জন্য NGINX Image ব্যবহার করো।

Complete Structure

Kubernetes Pod
      |
      ├── apiVersion: v1
      |
      ├── kind: Pod
      |
      ├── metadata
      |      |
      |      ├── name: myapp-pod
      |      |
      |      └── labels
      |             |
      |             └── app: myapp
      |
      └── spec
             |
             └── containers
                    |
                    └── nginx-container
                           |
                           └── image: nginx

10. YAML Indentation কেন গুরুত্বপূর্ণ?

YAML-এ Indentation Parent-Child Relationship Define করে।

তাই ভুল Indentation দিলে Kubernetes YAML File Correctly Parse করতে নাও পারে।

Correct Example

metadata:
  name: myapp-pod
  labels:
    app: myapp

এখানে:

  • name এবং labels হলো metadata-এর Children।
  • app হলো labels-এর Child।

Incorrect Example

metadata:
  name: myapp-pod
    labels:
      app: myapp

এটি Incorrect।

কারণ labels ভুলভাবে name-এর নিচে Nested করা হয়েছে।

কিন্তু name ইতিমধ্যে একটি Direct Value পেয়েছে।

name: myapp-pod

তাই তার নিচে Nested Dictionary রাখা যাবে না।

Correct Structure

metadata
   |
   ├── name
   |
   └── labels
          |
          └── app

Important: YAML Indentation ভুল হলে Kubernetes Resource Definition Invalid হতে পারে অথবা Unexpected Structure তৈরি হতে পারে।

11. YAML File দিয়ে Pod Create করা

এবার আমরা একটি Pod YAML File Create করে Kubernetes-এ Apply করব।

Step 1: YAML File Create করা

Terminal-এ একটি File Create করো:

nano pod-definition.yaml

তারপর নিচের YAML Configuration লিখো:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
    - name: nginx-container
      image: nginx

File Save করো।

File Name:

pod-definition.yaml

Step 2: Pod Create করা

kubectl create -f pod-definition.yaml

এই Command YAML File Read করে Kubernetes API Server-এ Resource Create করার Request পাঠায়।

Expected Output:

pod/myapp-pod created

এখন Kubernetes Pod Create করে Container Run করার চেষ্টা করবে।

12. kubectl create vs kubectl apply

Kubernetes YAML File ব্যবহার করার সময় সাধারণত দুটি Commands দেখতে পাওয়া যায়।

kubectl create

kubectl create -f pod-definition.yaml

এই Command YAML Definition অনুযায়ী একটি নতুন Kubernetes Object Create করে।

kubectl apply

kubectl apply -f pod-definition.yaml

এই Command Declarative Configuration অনুযায়ী Kubernetes Resource Create অথবা Update করার জন্য ব্যবহার করা হয়।

Difference

CommandPurpose
kubectl create -fYAML থেকে নতুন Resource Create করা
kubectl apply -fDeclarative Configuration Create বা Update করা

এই Tutorial-এ আমরা ব্যবহার করব:

kubectl create -f pod-definition.yaml

কারণ এখানে আমাদের Main Goal হলো YAML File দিয়ে নতুন Pod Create করা।

13. Created Pod Check করা

Pod Create করার পর Check করো:

kubectl get pods

Expected Example:

NAME        READY   STATUS    RESTARTS   AGE
myapp-pod   1/1     Running   0          30s

এখানে myapp-pod Pod Successfully Running রয়েছে।

Detailed Pod Information

kubectl describe pod myapp-pod

এই Command Pod সম্পর্কে বিস্তারিত Information দেখাবে।

যেমন:

  • Pod Name
  • Labels
  • Node Assignment
  • Container Image
  • Container Status
  • Events

Pod IP এবং Node দেখতে

kubectl get pods -o wide

এই Command Pod-এর Internal IP এবং Assigned Node Information দেখতে সাহায্য করে।

14. Imperative vs Declarative Style

এখন পর্যন্ত আমরা Kubernetes Pod Create করার দুটি Approach দেখেছি।

Imperative Approach

kubectl run nginx --image=nginx

এখানে আমরা সরাসরি Kubernetes-কে Command দিচ্ছি।

এই Approach Quick Testing-এর জন্য Useful।

Declarative Approach

একটি YAML File লিখছি:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
    - name: nginx-container
      image: nginx

তারপর:

kubectl apply -f pod-definition.yaml

এখানে আমরা Desired Configuration File-এর মধ্যে Define করছি।

Kubernetes সেই Configuration অনুযায়ী Resource Create অথবা Update করার চেষ্টা করে।

Comparison

FeatureImperativeDeclarative
ConfigurationCLI CommandYAML File
Quick TestingVery UsefulPossible
ReusabilityLimitedHigh
Version ControlCommands আলাদাভাবে রাখতে হয়YAML Git-এ রাখা যায়
Configuration ReviewLess ConvenientEasy
Real Kubernetes ProjectsUseful for OperationsCommonly Preferred

Real Kubernetes Projects-এ Declarative YAML Configuration বেশি গুরুত্বপূর্ণ।

কারণ Configuration File Save, Review, Reuse এবং Version Control করা যায়।

15. Kubernetes YAML-এর Simple Mental Model

Kubernetes YAML File-কে একটি Order Form হিসেবে ভাবতে পারো।

ধরো, তুমি Kubernetes-কে একটি Pod Create করার Order দিচ্ছ।

তাহলে:

apiVersion = কোন API Version ব্যবহার হবে?
kind       = কী ধরনের Object Create হবে?
metadata   = Object-এর Name এবং Labels কী হবে?
spec       = Object-এর Configuration কী হবে?

একটি Pod-এর ক্ষেত্রে:

kind: Pod

মানে:

আমি একটি Pod Create করতে চাই।

আর:

spec:
  containers:
    - name: nginx-container
      image: nginx

মানে:

এই Pod-এর মধ্যে NGINX Image ব্যবহার করে একটি Container Run করতে চাই।

Complete Mental Model

              Kubernetes YAML
                     |
         +-----------+-----------+
         |           |           |
         ▼           ▼           ▼
    apiVersion      kind       metadata
                                  |
                                  ▼
                             Name & Labels
                     |
                     ▼
                    spec
                     |
                     ▼
                containers
                     |
                     ▼
                 NGINX Image
                     |
                     ▼
                 Running Pod

16. Important kubectl Commands

CommandPurpose
kubectl create -f pod-definition.yamlYAML File থেকে Pod Create করা
kubectl get podsPods List করা
kubectl describe pod myapp-podDetailed Pod Information দেখা

17. Complete Hands-On Demo — Pod with YAML

এই Tutorial-এর Commands একসঙ্গে:

Step 1: YAML File Create করা

File Name:

pod-definition.yaml

File Content:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
    - name: nginx-container
      image: nginx

Step 2: Kubernetes Cluster Check করা

kubectl get nodes

Step 3: Pod Create করা

kubectl create -f pod-definition.yaml

Step 4: Pod Status Check করা

kubectl get pods

Step 5: Pod Details Check করা

kubectl describe pod myapp-pod

Step 6: Pod IP এবং Node Check করা

kubectl get pods -o wide

Step 7: Pod Delete করা

Testing শেষে Pod Remove করতে:

kubectl delete pod myapp-pod

এতে Pod Cluster থেকে Delete হবে।

YAML File Local Computer-এ থেকে যাবে।

18. Final Takeaway — Kubernetes Pods with YAML

এই Tutorial-এর সবচেয়ে গুরুত্বপূর্ণ বিষয় হলো Kubernetes YAML Definition File-এর Structure বোঝা।

একটি Basic Pod YAML Definition-এ চারটি Main Fields ব্যবহার করা হয়।

apiVersion:
kind:
metadata:
spec:

এখানে:

apiVersion: Kubernetes API Version Define করে।

kind: কোন Kubernetes Resource Create করা হবে তা Define করে।

metadata: Resource-এর Name এবং Labels-এর মতো Information Store করে।

spec: Resource-এর Desired Configuration Define করে।

একটি Complete Pod Example:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
    - name: nginx-container
      image: nginx

Pod Create করতে:

kubectl create -f pod-definition.yaml

Pod Check করতে:

kubectl get pods

Detailed Information দেখতে:

kubectl describe pod myapp-pod

Final Memory Rule

apiVersion → Kubernetes API Version
kind       → Object Type
metadata   → Name and Labels
spec       → Desired Configuration

Final One-Line Summary:

Kubernetes Pod YAML File-এ apiVersion, kind, metadata এবং spec ব্যবহার করে Define করা হয় কোন Object Create করতে হবে, Object-এর Name ও Labels কী হবে এবং Pod-এর মধ্যে কোন Container Image Run করবে।

Official Documentation

মনে রাখবে: Kubernetes YAML শেখার মূল উদ্দেশ্য শুধু Syntax মনে রাখা নয়। বরং YAML-এর মাধ্যমে Kubernetes Resources-এর Desired Configuration কীভাবে Define করা হয়, সেটি বোঝা। কারণ পরবর্তী Tutorials-এ ReplicaSets, Deployments এবং Services — সবকিছুতেই এই YAML Structure ব্যবহার করা হবে।

Was this guide helpful?

Search the archive

Press Esc to close