Kubernetes শেখার সময় সবচেয়ে গুরুত্বপূর্ণ Concepts-এর একটি হলো Pod।
Docker শেখার সময় আমরা দেখেছি কীভাবে Docker Image ব্যবহার করে Container Run করতে হয়।
যেমন:
docker run nginx
কিন্তু Kubernetes-এ Application Run করার Process একটু আলাদা।
এখানে আমরা সরাসরি Container Create করি না। বরং Kubernetes-এর একটি Resource তৈরি করি, যার নাম Pod।
Kubernetes-এ Pod হলো সবচেয়ে ছোট Deployable Unit, যার মধ্যে একটি অথবা একাধিক Container Run করতে পারে।
এই Tutorial-এ আমরা Pod কী, Container-এর সঙ্গে Pod-এর সম্পর্ক, Scaling কীভাবে কাজ করে, Multi-Container Pod কেন ব্যবহার করা হয় এবং kubectl দিয়ে একটি Pod কীভাবে Create করতে হয় — সবকিছু Step-by-Step বুঝব।
1. Kubernetes Pods শেখার আগে কী কী Ready থাকা দরকার?
Pod Create করার আগে আমরা ধরে নিচ্ছি দুটি জিনিস ইতিমধ্যে Ready রয়েছে।
- Application-এর Docker/Container Image তৈরি করা আছে।
- একটি Kubernetes Cluster Running রয়েছে।
ধরো, তুমি একটি Python অথবা Node.js Application তৈরি করেছ।
এখন সেটিকে Docker Image হিসেবে Package করা হয়েছে।
এই Image কোনো Container Registry-তে Store করা থাকতে পারে।
যেমন:
- Docker Hub
- Private Company Registry
- অন্য কোনো Container Image Repository
Kubernetes সেই Registry থেকে Image Pull করে Container Run করতে পারে।
Basic Application Deployment Flow
Application Source Code
|
▼
Dockerfile
|
▼
Container Image
|
▼
Container Registry
|
▼
Kubernetes Cluster
|
▼
Pod
|
▼
App Container
অর্থাৎ Kubernetes-এ Application Run করার জন্য সাধারণত আমাদের একটি Container Image এবং একটি Working Kubernetes Cluster প্রয়োজন।
2. Kubernetes Pod কী?
Pod হলো Kubernetes-এর Smallest Deployable Unit।
সহজভাবে বলতে গেলে:
Pod হলো Kubernetes-এর এমন একটি Object, যেটি এক বা একাধিক Containers-কে একসঙ্গে Group করে।
সাধারণত একটি Pod-এর মধ্যে একটি Application Container থাকে।
Example:
Kubernetes Pod
|
▼
┌─────────────────────┐
│ Pod │
│ │
│ ┌───────────────┐ │
│ │ Nginx │ │
│ │ Container │ │
│ └───────────────┘ │
│ │
└─────────────────────┘
এখানে Nginx Container একটি Pod-এর মধ্যে Run করছে।
Kubernetes এই Pod-কে একটি Deployable Unit হিসেবে Manage করে।
অর্থাৎ Kubernetes-এ Application Run করার সময় আমরা সাধারণত Pod Create করি এবং সেই Pod-এর মধ্যে Container Run হয়।
3. Kubernetes সরাসরি Container Deploy করে না
এটি Kubernetes-এর একটি গুরুত্বপূর্ণ Concept।
Docker ব্যবহার করলে আমরা সরাসরি Container Run করতে পারি।
Docker Example
docker run nginx
এই Command Docker Engine-এর মাধ্যমে একটি Nginx Container Create এবং Run করে।
কিন্তু Kubernetes-এর ক্ষেত্রে:
kubectl run nginx --image=nginx
এই Command একটি Pod Create করে।
Pod-এর মধ্যে Nginx Container Run হয়।
Docker vs Kubernetes Execution
Docker
|
▼
Container
|
▼
Nginx Application
Kubernetes
|
▼
Pod
|
▼
Container
|
▼
Nginx Application
এখানে মূল পার্থক্য হলো:
Docker-এর Main Runtime Object হলো Container।
Kubernetes-এর Smallest Deployable Workload Unit হলো Pod।
Kubernetes Pod-এর Desired State Manage করে এবং Container Runtime-এর মাধ্যমে Pod-এর Containers Execute করায়।
4. Pod এবং Container-এর Relationship
সাধারণত একটি Pod-এর মধ্যে একটি Application Container থাকে।
এটিকে আমরা One Pod to One Application Container Pattern হিসেবে ভাবতে পারি।
Example:
Pod 1
└── Application Container 1
Pod 2
└── Application Container 2
Pod 3
└── Application Container 3
ধরো, তুমি একটি Web Application Run করতে চাও।
প্রথমে একটি Pod Create করলে:
Pod 1
|
└── Web Application
এখন যদি একই Application-এর তিনটি Instances Run করতে চাও, তাহলে সাধারণত তিনটি Pods ব্যবহার করা হয়।
Pod 1 → Web App Container
Pod 2 → Web App Container
Pod 3 → Web App Container
এখানে তিনটি আলাদা Pods-এর মধ্যে একই Application-এর তিনটি Instances Run করছে।
Important: Application Scale করার জন্য সাধারণত একই Pod-এর মধ্যে একই Application Container-এর একাধিক Copies রাখা হয় না।
বরং নতুন Pods Create করা হয়।
5. Kubernetes-এ Pod Scaling কীভাবে কাজ করে?
ধরো, তোমার একটি Web Application আছে।
প্রথমে Application-এর Traffic কম।
তাই একটি Pod যথেষ্ট।
Kubernetes Node 1
|
▼
Pod 1
|
▼
Web App Container
কিন্তু কিছুদিন পর Application-এর Users বেড়ে গেল।
এখন একটি Pod সব Requests Handle করতে পারছে না।
তাই Application-এর আরও Instances দরকার।
Kubernetes-এ সাধারণত আরও Pods Create করে Application Scale করা হয়।
Example: One Pod থেকে Three Pods
Node 1
|
+---------+---------+
| | |
▼ ▼ ▼
Pod 1 Pod 2 Pod 3
| | |
▼ ▼ ▼
Web App Web App Web App
এখন একই Application-এর তিনটি Instances Running রয়েছে।
এতে Application-এর Traffic Multiple Pods-এর মধ্যে Distribute করা সম্ভব হয়, যদি উপযুক্ত Service এবং Load Distribution Configure করা থাকে।
Multiple Nodes-এ Scaling
ধরো, Node 1-এর CPU অথবা Memory যথেষ্ট নেই।
তাহলে Kubernetes Scheduler নতুন Pod অন্য Available Node-এ Schedule করতে পারে।
Kubernetes Cluster
|
+----------+----------+
| |
▼ ▼
Node 1 Node 2
| |
+---+---+ +---+---+
| | | |
▼ ▼ ▼ ▼
Pod 1 Pod 2 Pod 3 Pod 4
| | | |
App App App App
এই Architecture-এর মাধ্যমে Kubernetes Application Workloads Multiple Nodes-এর মধ্যে Distribute করতে পারে।
অবশ্যই Scheduling-এর জন্য Nodes-এর Available Resources এবং Kubernetes Scheduling Rules পূরণ হতে হবে।
মনে রাখবে
Kubernetes-এ Application Scale করার সাধারণ Approach হলো নতুন Pods Create করা, একই Pod-এর মধ্যে অতিরিক্ত Application Containers যোগ করা নয়।
6. Scaling Up এবং Scaling Down
Kubernetes-এ Application-এর Running Instances বাড়ানো অথবা কমানোকে Scaling বলা হয়।
Scaling Up
Scaling Up মানে Application-এর Running Pod Instances বাড়ানো।
Example:
Before:
Pod 1
Total: 1 Pod
After:
Pod 1
Pod 2
Pod 3
Total: 3 Pods
এতে Application বেশি Traffic Handle করতে পারে, যদি Application এবং Infrastructure সেভাবে Designed থাকে।
Scaling Down
Scaling Down মানে Running Pods-এর সংখ্যা কমানো।
Example:
Before:
Pod 1
Pod 2
Pod 3
Pod 4
Pod 5
Total: 5 Pods
After:
Pod 1
Pod 2
Total: 2 Pods
Traffic কমে গেলে অতিরিক্ত Pods কমিয়ে Infrastructure Resources Save করা যায়।
Important: Production-এ Application Scaling সাধারণত Deployment বা অন্য Workload Controller-এর মাধ্যমে Manage করা হয়।
একটি Standalone Pod নিজে Automatically Multiple Replicas Maintain করে না।
7. একটি Pod-এর মধ্যে কি Multiple Containers থাকতে পারে?
হ্যাঁ, পারে।
একটি Pod-এর মধ্যে একাধিক Containers Run করতে পারে।
তবে এটি সাধারণত একই Application-এর Multiple Instances চালানোর জন্য করা হয় না।
বরং যখন দুটি Containers একে অপরের সঙ্গে Closely Connected এবং একসঙ্গে কাজ করতে হয়, তখন Multi-Container Pod ব্যবহার করা হয়।
Example:
┌──────────────────────────────┐
│ Pod │
│ │
│ ┌────────────────────────┐ │
│ │ Main Web Application │ │
│ └────────────────────────┘ │
│ │
│ ┌────────────────────────┐ │
│ │ Helper Container │ │
│ └────────────────────────┘ │
│ │
└──────────────────────────────┘
এখানে একটি Container Main Application Run করছে।
অন্য Container সেই Application-কে Support করছে।
Helper Container-এর কাজ হতে পারে:
- Uploaded Files Process করা
- Application Logs Collect করা
- External Data Fetch করা
- Main Application-কে Support করা
- Files অথবা Content Synchronize করা
- Sidecar Functionality Provide করা
এই Pattern-কে অনেক সময় Sidecar Pattern বলা হয়।
8. একটি Pod-এর মধ্যে Multiple Containers কেন রাখব?
Multi-Container Pod ব্যবহার করার মূল কারণ হলো Closely Related Containers-এর মধ্যে কিছু Resources Share করা।
একই Pod-এর Containers সাধারণত Share করে:
- Network Namespace
- Pod-level Networking
- Shared Volumes, যদি Configure করা হয়
- Pod Lifecycle Boundary
এর ফলে Containers সহজে একে অপরের সঙ্গে Communicate করতে পারে।
Shared Network
একই Pod-এর Containers সাধারণত একই Network Namespace Share করে।
ফলে তারা localhost ব্যবহার করে Communicate করতে পারে।
Example:
Pod
|
+--------+--------+
| |
▼ ▼
Main Application Helper Container
Port 8080 Port 9000
| |
+------localhost--+
ধরো, Main Application Port 8080-এ চলছে।
Helper Container একই Pod-এর মধ্যে থেকে localhost:8080-এর মাধ্যমে Main Application-এর সঙ্গে Communicate করতে পারে।
Shared Storage
একই Pod-এর Multiple Containers একই Volume Mount করতে পারে।
Example:
Pod
|
+-------+-------+
| |
▼ ▼
App Container Helper Container
| |
+-------+-------+
|
▼
Shared Volume
এক্ষেত্রে Main Application একটি File Write করলে Helper Container একই Shared Volume থেকে সেই File Read করতে পারে।
তবে Volume Sharing Automatically হয় না। Pod Specification-এর মধ্যে Volume এবং Volume Mounts Configure করতে হয়।
Shared Lifecycle
একটি Pod Create হলে Kubernetes সেই Pod-এর Spec অনুযায়ী Containers Run করার চেষ্টা করে।
Pod Delete হলে তার সঙ্গে সম্পর্কিত Containers-ও Terminate করা হয়।
তবে একই Pod-এর সব Containers একই মুহূর্তে Start বা Stop হবে — এমন নিশ্চয়তা নেই।
প্রতিটি Container-এর Restart এবং Readiness Behavior আলাদা হতে পারে।
9. Helper Containers Manually Manage না করে Pod ব্যবহার করব কেন?
ধরো, Kubernetes ছাড়া Plain Docker ব্যবহার করে একটি Application এবং একটি Helper Container Run করছ।
তোমার Setup হতে পারে:
App Container 1 ↔ Helper Container 1
App Container 2 ↔ Helper Container 2
App Container 3 ↔ Helper Container 3
এখানে প্রতিটি Application Container-এর জন্য আলাদা Helper Container দরকার।
এখন Manually Manage করতে হবে:
- Container Networking
- Container Communication
- Shared Volumes
- Application ও Helper Container Matching
- Restart Behavior
- Container Cleanup
- Container Lifecycle Coordination
Application Instances বেড়ে গেলে এই Management আরও Complex হয়ে যায়।
Kubernetes Pods Related Containers-কে একটি Logical Unit হিসেবে Group করে এই কাজগুলো সহজ করে।
Example:
Kubernetes
|
+---------+---------+
| | |
▼ ▼ ▼
Pod 1 Pod 2 Pod 3
| | |
App + App + App +
Helper Helper Helper
এখানে প্রতিটি Pod-এর মধ্যে Main Application এবং তার Helper Container একসঙ্গে Group করা হয়েছে।
10. একই Pod-এর Containers-এর জন্য Kubernetes কী Manage করে?
Kubernetes Pod-এর মাধ্যমে Related Containers-কে একটি Shared Execution Environment Provide করে।
| Shared Feature | Meaning |
|---|---|
| Shared Network | Containers localhost ব্যবহার করে Communicate করতে পারে |
| Shared Storage | Same Volumes Mount করতে পারে |
| Pod Lifecycle | Containers একই Pod-এর Lifecycle Boundary-এর মধ্যে থাকে |
Example
Kubernetes Pod
|
├── Shared Network
|
├── Shared Volumes
|
├── Main Application Container
|
└── Helper Container
এর ফলে Related Containers আলাদাভাবে Connect করার পরিবর্তে একই Pod-এর মধ্যে Define করা যায়।
11. Multi-Container Pods কি Common?
Multi-Container Pods Kubernetes-এর একটি Valid এবং Useful Feature।
তবে Beginner Level-এ সবচেয়ে Common Pattern হলো:
One Pod
|
▼
One Application Container
আর Multi-Container Pattern:
One Pod
|
├── Main App Container
|
└── Helper Container
এই Course-এ আপাতত বেশিরভাগ Examples-এ Single-Container Pods ব্যবহার করা হবে।
কারণ এতে Kubernetes-এর Basic Concepts বোঝা সহজ হয়।
পরবর্তীতে Sidecar Containers এবং Multi-Container Pod Architecture আরও বিস্তারিতভাবে শেখা যাবে।
12. kubectl দিয়ে একটি Pod Create করা
এবার একটি Real Kubernetes Pod Create করব।
আমরা Nginx Image ব্যবহার করব।
Step 1: Kubernetes Cluster Check করা
প্রথমে নিশ্চিত হও Cluster Running রয়েছে।
Minikube ব্যবহার করলে:
minikube status
তারপর:
kubectl get nodes
Expected Example:
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 5m v1.x.x
Step 2: Nginx Pod Create করা
kubectl run nginx --image=nginx
এই Command Kubernetes-কে বলছে:
nginxনামে একটি Pod Create করো এবং সেই Pod-এর মধ্যেnginxImage ব্যবহার করে Container Run করো।
Kubernetes Default Registry Configuration অনুযায়ী Nginx Image Pull করবে। সাধারণত এটি Docker Hub থেকে Pull হয়।
Architecture
kubectl run nginx --image=nginx
|
▼
Kubernetes API Server
|
▼
Pod Created
|
▼
Kubernetes Node
|
▼
Container Runtime
|
▼
Nginx Container
13. Kubernetes Pods List করা
Pod Create করার পর Check করো:
kubectl get pods
প্রথমে এমন Output দেখতে পারো:
NAME READY STATUS RESTARTS AGE
nginx 0/1 ContainerCreating 0 5s
কিছু সময় পর:
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 20s
এখানে গুরুত্বপূর্ণ Columns:
| Column | Meaning |
|---|---|
| NAME | Pod-এর নাম |
| READY | Ready Containers / Total Containers |
| STATUS | Pod-এর Current Status |
| RESTARTS | Container Restart Count |
| AGE | Pod Create হওয়ার পর কত সময় হয়েছে |
READY 1/1 মানে Pod-এর একটি Container-এর মধ্যে একটি Ready রয়েছে।
Running মানে Pod একটি Node-এ Bound হয়েছে এবং তার Container Process Running অবস্থায় রয়েছে।
14. Pod Status — ContainerCreating vs Running
Pod Create করার পর বিভিন্ন Status দেখতে পারো।
ContainerCreating
Example:
NAME READY STATUS RESTARTS
nginx 0/1 ContainerCreating 0
এই অবস্থায় Kubernetes Container Start করার Preparation করছে।
এর মধ্যে থাকতে পারে:
- Container Image Pull করা
- Container Create করা
- Network Setup করা
- Storage Mount করা
- Container Runtime Preparation
Running
Example:
NAME READY STATUS RESTARTS
nginx 1/1 Running 0
এখানে Pod-এর Container Running এবং Ready রয়েছে।
তবে শুধু Running Status দেখেই Application সম্পূর্ণ Healthy — এমন ধরে নেওয়া উচিত নয়।
Application Health আরও ভালোভাবে Check করতে Readiness Probe এবং Liveness Probe ব্যবহার করা যায়।
এই বিষয়গুলো পরবর্তী Kubernetes Health Check Topic-এ শেখা যাবে।
15. Pod Create করলেই কি External Users Access করতে পারবে?
সাধারণত না।
Kubernetes-এ একটি Pod Create করলে Application Cluster-এর মধ্যে Run করে।
কিন্তু Application Automatically External Users-এর জন্য Accessible হয়ে যায় না।
Example:
Kubernetes Cluster
|
▼
Pod
|
▼
Nginx Container
এই অবস্থায় Container Running থাকলেও Browser থেকে সরাসরি Access করার জন্য উপযুক্ত Networking Configuration প্রয়োজন।
Application Expose করার জন্য Kubernetes-এর Service-এর মতো Networking Resources ব্যবহার করা যায়।
External User
|
▼
Service
|
▼
Pod
|
▼
Container
এই Tutorial-এ Service এবং Kubernetes Networking বিস্তারিতভাবে আলোচনা করা হচ্ছে না।
আপাতত আমাদের Focus হলো:
Pod Create করা এবং সেটি Running রয়েছে কি না Verify করা।
16. Pod-এর Simple Mental Model
Pod-কে একটি ছোট Box বা Wrapper হিসেবে ভাবতে পারো।
Pod = Box
Container = Application inside the Box
সাধারণত:
┌─────────────────────┐
│ Pod │
│ │
│ ┌───────────┐ │
│ │ Container │ │
│ └───────────┘ │
│ │
└─────────────────────┘
অর্থাৎ একটি Box-এর মধ্যে একটি Application Container।
কখনো কখনো:
┌─────────────────────────────┐
│ Pod │
│ │
│ ┌──────────────────┐ │
│ │ Main Application │ │
│ └──────────────────┘ │
│ │
│ ┌──────────────────┐ │
│ │ Helper Container │ │
│ └──────────────────┘ │
│ │
└─────────────────────────────┘
অর্থাৎ একটি Box-এর মধ্যে Main Application এবং Helper Container।
Kubernetes এই Box বা Pod-কে একটি Logical Deployable Unit হিসেবে Manage করে।
17. Docker Container vs Kubernetes Pod
| Docker | Kubernetes |
|---|---|
| Containers সরাসরি Run করা যায় | Containers Pods-এর মধ্যে Run করে |
docker run nginx | kubectl run nginx --image=nginx |
| Container হলো Main Runtime Unit | Pod হলো Smallest Deployable Unit |
| More Containers Run করে Scale করা যায় | More Pods Create করে Scale করা হয় |
| Related Containers Manually Coordinate করা যায় | Pod Related Containers Group করে |
| Docker CLI ব্যবহার করা হয় | kubectl ব্যবহার করা হয় |
Docker Example
docker run nginx
Kubernetes Example
kubectl run nginx --image=nginx
Docker একটি Container Run করে।
Kubernetes একটি Pod Create করে, যার মধ্যে Container Run হয়।
18. Full Kubernetes Pod Workflow
এবার পুরো Process একসঙ্গে দেখি।
1. Build Application Image
|
▼
2. Push Image to Registry
|
▼
3. Start Kubernetes Cluster
|
▼
4. Create Pod
|
▼
5. Kubernetes Schedules Pod
|
▼
6. Node Pulls Container Image
|
▼
7. Container Runtime Starts Container
|
▼
8. Pod Status Becomes Running
|
▼
9. Verify Pod Using kubectl
এই Workflow Kubernetes-এর Pod Execution Process বোঝার জন্য গুরুত্বপূর্ণ।
19. Important kubectl Commands
| Command | Purpose |
|---|---|
kubectl get nodes | Kubernetes Nodes List করা |
kubectl run nginx --image=nginx | Nginx Pod Create করা |
kubectl get pods | Current Namespace-এর Pods List করা |
kubectl get pods -A | সব Namespaces-এর Pods List করা |
kubectl get pod nginx | Specific Pod Check করা |
kubectl describe pod nginx | Pod-এর Detailed Information দেখা |
kubectl logs nginx | Pod-এর Container Logs দেখা |
kubectl delete pod nginx | Pod Delete করা |
20. Complete Hands-On Demo — Nginx Pod
এই Tutorial-এর সব Commands একসঙ্গে:
# 1. Check Minikube Cluster
minikube status
# 2. Check Kubernetes Nodes
kubectl get nodes
# 3. Create Nginx Pod
kubectl run nginx --image=nginx
# 4. List Pods
kubectl get pods
# 5. Check Specific Pod
kubectl get pod nginx
# 6. Get Pod Details
kubectl describe pod nginx
# 7. Check Container Logs
kubectl logs nginx
# 8. Delete Pod After Testing
kubectl delete pod nginx
এই Commands ব্যবহার করে আমরা একটি Kubernetes Pod Create, Inspect এবং Delete করতে পারি।
21. Final Takeaway — Kubernetes Pods
এই Tutorial-এর সবচেয়ে গুরুত্বপূর্ণ বিষয় হলো Pod এবং Container-এর Relationship বোঝা।
Kubernetes-এ সাধারণত Application Containers সরাসরি Deploy করা হয় না।
Containers একটি Pod-এর মধ্যে Run করে।
Pod হলো Kubernetes-এর Smallest Deployable Unit।
সাধারণত একটি Pod-এর মধ্যে একটি Application Container থাকে।
Application Scale করার সময় সাধারণত আরও Pods Create করা হয়।
আর যখন Multiple Containers একে অপরের সঙ্গে Closely Connected থাকে, তখন একই Pod-এর মধ্যে Multiple Containers ব্যবহার করা যায়।
Quick Recap
Kubernetes
|
▼
Pod
|
▼
Container
|
▼
Application
Scaling:
Application
|
▼
Multiple Pods
|
├── Pod 1 → Container
|
├── Pod 2 → Container
|
└── Pod 3 → Container
Multi-Container Pod:
Pod
|
├── Main Application Container
|
└── Helper Container
Final One-Line Summary:
Kubernetes Pod হলো সবচেয়ে ছোট Deployable Unit, যার মধ্যে একটি অথবা একাধিক Containers Run করে। সাধারণত একটি Pod-এ একটি Application Container থাকে এবং Application Scale করার জন্য একই Pod-এর মধ্যে আরও Containers যোগ করার পরিবর্তে নতুন Pods Create করা হয়।
