কিন্তু application-কে container-এর মধ্যে package করা শুধু first step।
এরপর আসল question:
Production environment-এ শুধু:
docker run
করলেই যথেষ্ট না। কারণ production system-এ আমাদের দরকার:
- অনেক containers manage করা
- Containers একে অপরের সাথে connect করা
- Traffic বাড়লে scale করা
- Container crash করলে recover করা
- Server fail হলেও application চালু রাখা
- Updates manage করা
এই কাজগুলো করার system-কে বলা হয় Container Orchestration Platform।
1. Containers তৈরি করার পর problem কী?
ধরো তোমার application Docker container-এর মধ্যে package করা হয়ে গেছে। এখন অনেক question আসে:
- Production-এ container কীভাবে run করব?
- Application-এর সাথে database container থাকলে কী হবে?
- Redis, messaging service বা backend API লাগলে কী হবে?
- Containers একে অপরের সাথে communicate করবে কীভাবে?
- Traffic হঠাৎ বেড়ে গেলে আরও containers কীভাবে add করব?
- Traffic কমে গেলে extra containers কীভাবে remove করব?
- Container crash করলে কে restart করবে?
- পুরো server fail করলে কী হবে?
একটা container manually run করা easy:
1 Container
↓
Easy to manage
কিন্তু container-এর সংখ্যা বাড়ার সাথে সাথে manual management দ্রুত কঠিন হয়ে যায়:
100 Containers
↓
1,000 Containers
↓
10,000 Containers
↓
Manual management becomes impractical
এই কারণেই দরকার Container Orchestration।
2. Container Orchestration কী?
Container orchestration মানে containers-কে automatically deploy, connect, scale, restart, distribute এবং manage করা।
একটা orchestration platform সাধারণত handle করে:
- Containers start এবং stop করা
- Failed containers restart করা
- Containers connect করা
- Scale up এবং scale down করা
- Traffic load balance করা
- Multiple servers-এর মধ্যে containers distribute করা
- Application updates manage করা
- Application highly available রাখা
অর্থাৎ তোমাকে প্রতিটা container manually manage করতে হবে না। তুমি orchestrator-কে বলবে:
তারপর orchestrator চেষ্টা করবে সেই অবস্থাটা maintain করতে। এটাকেই desired state approach বলা হয়।
3. Kubernetes কী?
Kubernetes হলো একটি Container Orchestration Platform।
এটা containerized applications-কে multiple machines-এর মধ্যে manage করতে সাহায্য করে। Multiple machines একসাথে managed হলে সেই group-কে বলা হয় Cluster।
Server 1
Server 2
Server 3
Server 4
↓
Kubernetes manages them
↓
Cluster
সহজ definition:
আরও complete definition:
Kubernetes হলো container orchestration platform যা cluster-এর মধ্যে hundreds বা thousands of containers deploy, scale, load balance এবং manage করতে পারে।
4. Other Container Orchestration Tools
Kubernetes একমাত্র orchestration technology না। আরও কিছু tools ছিল বা এখনো আছে:
| Tool | Created by | Main idea |
|---|---|---|
| Docker Swarm | Docker | সহজ setup, কম advanced features |
| Kubernetes | Google / Open Source | Powerful, flexible, widely used |
| Apache Mesos | Apache ecosystem | Advanced কিন্তু comparatively complex |
Docker Swarm
Docker Swarm শুরু করা তুলনামূলক easy। তুমি যদি Docker জানো, Swarm শেখা relatively straightforward। কিন্তু complex production environment-এ Kubernetes-এর মতো advanced features এবং ecosystem সাধারণত কম।
Docker
↓
Docker Swarm
↓
Multiple Docker hosts managed together
Apache Mesos
Apache Mesos advanced distributed workloads manage করতে পারে। কিন্তু setup complex, learning curve বেশি এবং configuration তুলনামূলক difficult। তাই সাধারণ application orchestration-এর ক্ষেত্রে Kubernetes বেশি popular হয়ে গেছে।
Kubernetes
Kubernetes শুরুতে একটু complicated মনে হতে পারে। কিন্তু এর advantage:
- Powerful
- Flexible
- Highly configurable
- Large ecosystem
- Production-ready
- Complex architectures support করে
এই কারণেই Kubernetes modern infrastructure-এ খুব common।
5. Kubernetes এত popular কেন?
Kubernetes power এবং flexibility-এর একটা strong balance দেয়। Major cloud providers Kubernetes support করে:
- Google Cloud
- Microsoft Azure
- Amazon Web Services
তুমি Kubernetes নিজে manually install এবং manage করতে পারো। অথবা cloud provider-এর Managed Kubernetes Service ব্যবহার করতে পারো:
Google Cloud → GKE
Azure → AKS
AWS → EKS
- GKE
- Google Kubernetes Engine—Google Cloud-এর managed Kubernetes service।
- AKS
- Azure Kubernetes Service—Microsoft Azure-এর managed Kubernetes service।
- EKS
- Elastic Kubernetes Service—AWS-এর managed Kubernetes service।
Managed service ব্যবহার করলে cloud provider Kubernetes infrastructure-এর অনেক operational কাজ handle করে, আর তুমি application deploy এবং manage করার দিকে focus করতে পারো।
6. Container Orchestration-এর main benefits
এখন সবচেয়ে important অংশ: orchestration production system-কে কী কী সুবিধা দেয়?
A. High Availability
High Availability মানে application-এর কোনো অংশ fail করলেও application যতটা সম্ভব available থাকবে। Kubernetes ছাড়া single server fail করলে application down হয়ে যেতে পারে:
Application
↓
Server 1 ❌
↓
Application down ❌
Kubernetes cluster-এ application-এর multiple instances বিভিন্ন node-এ run করতে পারে:
App 1 → Node 1 ✅
App 2 → Node 2 ❌
App 3 → Node 3 ✅
↓
Kubernetes detects the failure
↓
New instance starts
↓
Application stays available
B. Load Balancing
ধরো তোমার application-এর তিনটা instance আছে। সব traffic যদি একটাতে যায়, সেই container overload হতে পারে। তাই traffic distribute করতে হয়:
Users
↓
Load Balancer
/ | \
↓ ↓ ↓
App 1 App 2 App 3
Kubernetes services এবং related networking mechanisms দিয়ে traffic multiple application instances-এর মধ্যে distribute করা যায়। এতে performance এবং reliability বাড়ে, আর একটি container-এর উপর overload কমে।
C. Scaling Up
Normal traffic-এ application-এর তিনটা container যথেষ্ট হতে পারে। Black Friday-এর মতো সময়ে traffic বেড়ে গেলে আরও capacity দরকার:
Traffic ↑
↓
3 replicas → 10 replicas
↓
More capacity
Application-এর copies বা replicas বাড়ানোকে broadly Scaling Up / Scaling Out বলা হয়।
D. Scaling Down
Traffic সবসময় high থাকে না। রাতের বেলায় কম user থাকলে extra containers remove করা যায়:
Traffic ↓
↓
10 replicas → 3 replicas
↓
CPU, RAM and cost saved
E. Node Scaling
এখানে Application scaling এবং Node scaling-এর difference বুঝতে হবে। Node হলো Kubernetes cluster-এর একটা machine—physical server, virtual machine বা cloud instance।
| Scaling | Meaning | Example |
|---|---|---|
| Application scaling | App instances বা replicas বাড়ানো বা কমানো | 3 Pods → 10 Pods |
| Node scaling | Cluster-এর machines বাড়ানো বা কমানো | 3 Servers → 5 Servers |
Existing nodes-এর CPU বা RAM full হয়ে গেলে নতুন containers run করার জায়গা থাকে না। তখন cluster-এ নতুন node add করতে হয়:
Cluster
├── Node 1 — Full
├── Node 2 — Full
├── Node 3 — Full
└── Node 4 — New
7. Declarative Configuration
এটা Kubernetes-এর অন্যতম most important concept। Declarative মানে Kubernetes-কে step-by-step command না বলে final desired state বলে দেওয়া।
ধরো তোমার application-এর তিনটা copies দরকার। Manual approach-এ প্রতিটা container start করতে হবে এবং crash করলে নিজে restart করতে হবে। Kubernetes-এ তুমি বলবে:
replicas: 3
Desired State = 3
Actual State = 3
Status = Matched ✅
একটা instance crash করলে:
Desired State = 3
Actual State = 2
↓
Kubernetes creates a new instance
↓
Desired State = 3
Actual State = 3
এই continuous process-কে Kubernetes-এর reconciliation concept-এর সাথে relate করা যায়।
8. Simple real-world example
ধরো তোমার একটা online shopping application আছে। Architecture:
Frontend
Backend API
Database
Redis
Payment Service
Notification Service
প্রত্যেকটা আলাদা containerized service হতে পারে। Kubernetes ছাড়া তোমাকে manually frontend, backend, database ও Redis start করতে হবে; networking এবং ports configure করতে হবে; containers monitor করতে হবে; crash হলে restart, traffic বাড়লে more containers create এবং deployment update করতে হবে।
Kubernetes দিয়ে তুমি configuration-এ define করতে পারো:
- Frontend এবং backend-এর কত copies থাকবে
- Services কীভাবে communicate করবে
- Traffic কোথায় যাবে
- Container fail করলে কী হবে
- Update এবং scaling কীভাবে হবে
তখন Kubernetes পুরো system-এর control layer-এর মতো কাজ করে:
Kubernetes
↓
┌──────────┼──────────┐
↓ ↓ ↓
Frontend Backend Redis
↓ ↓
Users Database
↓
Payment Service
9. Important terms
- Container
- একটি isolated environment যেখানে application run করে।
- Docker
- Containers build এবং run করার technology/platform।
- Orchestration
- Multiple containers-এর automatic management।
- Kubernetes
- একটি Container Orchestration Platform।
- Cluster
- Kubernetes-এর মাধ্যমে একসাথে managed machines-এর group।
- Node
- Cluster-এর একটি physical server, VM বা cloud machine।
- Load Balancing
- Multiple instances-এর মধ্যে user traffic distribute করা।
- High Availability
- Failure হলেও application running এবং reachable রাখা।
- Declarative Configuration
- Step-by-step instructions না দিয়ে desired final state define করা।
10. Docker vs Kubernetes
Docker কী solve করে? Application এবং dependencies consistent ভাবে কীভাবে package করব?
Application + Dependencies
↓
Docker Image
↓
Container
Kubernetes কী solve করে? Production-এ hundreds বা thousands of containers reliably কীভাবে manage করব?
Containers
↓
Kubernetes
↓
Deploy · Manage · Scale
Restart · Load Balance · Recover
11. Complete flow
Developer
↓
Application Code
↓
Dockerfile
↓
Docker Image
↓
Container
↓
Many Containers
↓
Kubernetes
↓
Cluster
↓
Production
Kubernetes production-এ deploy, schedule, connect, load balance, monitor, restart, scale এবং update manage করে।
12. Restaurant analogy
Container orchestration বুঝতে একটা restaurant chain-এর analogy ব্যবহার করা যায়:
- Docker Image = Recipe
- Bread, meat, cheese এবং sauce দিয়ে burger বানানোর repeatable instruction।
- Container = Actual Burger
- একই recipe থেকে Burger 1, Burger 2, Burger 3 তৈরি করা যায়।
- Node = Kitchen
- প্রতিটি kitchen-এর limited capacity আছে।
- Cluster = Kitchens
- একসাথে managed restaurant kitchens-এর group।
- Kubernetes = Manager
- কোন kitchen-এ কাজ যাবে, কত burgers তৈরি হবে এবং কোথায় capacity দরকার—সেটা manage করে।
13. নিজের Kubernetes infrastructure-এর সাথে মিলিয়ে
ধরো তোমার Kubernetes cluster-এ তিনটি control plane node এবং দুটি worker node আছে। এগুলো সব মিলে Kubernetes Cluster।
Control Plane Nodes
├── Server 1
├── Server 2
└── Server 3
Worker Nodes
├── Worker 1
└── Worker 2
App deploy করলে Kubernetes decide করতে পারে কোন worker node-এ সেটা run করবে:
Kubernetes Cluster
│
├── Worker Node 1
│ ├── Your App
│ └── Backend
│
└── Worker Node 2
├── PostgreSQL
└── Other Application
Application crash করলে Kubernetes failure detect করে workload restart বা replace করতে পারে। এটাই lecture-এর concepts-এর practical version।
14. Kubernetes কি container সরাসরি manage করে?
Learning-এর শুরুতে আমরা বলি: Kubernetes manages containers. Conceptually এটা ঠিক। কিন্তু Kubernetes সাধারণত individual container-কে primary deployment unit হিসেবে treat করে না। তার বদলে একটা concept আছে: Pod।
Kubernetes
↓
Pod
↓
Container
সাধারণ simple application-এ একটি Pod-এর মধ্যে একটি Container থাকতে পারে। তাই সামনে Pod খুব important হবে।
15. সবচেয়ে important 7 points
- Docker packaging solve করে: App + Dependencies → Container Image.
- Production management-এর জন্য orchestration দরকার: Many Containers → Complex Management → Orchestration.
- Kubernetes হলো orchestration platform: Containers automatically manage করে।
- Cluster হলো machines-এর group: প্রতিটি machine একটি Node.
- Kubernetes High Availability দিতে সাহায্য করে: Failure → Recover → Application remains available.
- Kubernetes scaling করতে পারে: Traffic বাড়লে more instances, কমলে fewer instances.
- Kubernetes declarative: তুমি desired state বলবে; Kubernetes সেই state maintain করবে।
Final simplified explanation
Docker application-কে container-এর মধ্যে package করে। কিন্তু production environment-এ অনেক containers এবং servers থাকলে manually সব manage করা খুব difficult। তাই দরকার Container Orchestration।
Container orchestration automatically containers deploy, connect, scale, restart, load balance, multiple servers-এর মধ্যে distribute এবং failure থেকে recover করে।
Kubernetes হলো একটি Container Orchestration Platform। Kubernetes অনেক machines-কে একটা Cluster হিসেবে manage করে। Cluster-এর প্রতিটি machine-কে বলা হয় Node।
Kubernetes-এর খুব important philosophy হলো Declarative Desired State। তুমি বলবে, “আমি 3টা instance চাই।” Kubernetes continuously চেষ্টা করবে তিনটা instance চালু রাখতে।
One-line summary
Docker
↓
Container
↓
Many Containers
↓
Kubernetes
↓
Cluster
↓
Reliable Production
