1. Kubernetes কী?
Kubernetes, যাকে সংক্ষেপে K8s বলা হয়, হলো একটি open-source platform যেটা মূলত containers manage করার জন্য ব্যবহার করা হয়।
Kubernetes originally Google তৈরি করেছিল, কারণ Google অনেক বড় scale-এ containerized applications run করত।
সহজভাবে:
কিন্তু Kubernetes ভালোভাবে বোঝার আগে দুইটা concept বুঝতে হবে:
- Containers
- Container Orchestration
এই অংশে আমরা mainly Containers এবং বিশেষ করে Docker নিয়ে আলোচনা করছি।
2. Docker কেন দরকার?
Docker আসার আগে application setup করা অনেক complicated ছিল।
ধরো আমাদের একটা application আছে, যেখানে আছে:
- Node.js web server
- MongoDB database
- Redis cache/messaging system
- Ansible automation tool
এখন প্রত্যেকটা software-এর জন্য লাগতে পারে:
- নির্দিষ্ট Operating System version
- নির্দিষ্ট library
- নির্দিষ্ট dependencies
- নির্দিষ্ট configuration
এখানে problem শুরু হয়।
উদাহরণ:
MongoDB-এর হয়তো একটা library-এর version 1 দরকার।
কিন্তু Redis-এর সেই একই library-এর version 2 দরকার।
আবার একজন developer Ubuntu use করছে, অন্যজন Fedora use করছে, আর production server হয়তো অন্য Linux distribution use করছে।
তখন familiar problem:
মানে developer-এর computer-এ application চলছে, কিন্তু production server-এ চলছে না।
Docker এই problem অনেকটাই solve করে।
3. Docker কী?
Docker হলো একটি containerization platform।
Docker দিয়ে application-এর সাথে application run করার জন্য যা যা দরকার, সবকিছু একটা package-এর মধ্যে রাখা যায়।
যেমন:
- Application Code
- Runtime
- Libraries
- Dependencies
- Configuration
তখন প্রত্যেক computer/server-এ manually সব install করতে হয় না।
একবার একটা Docker Image তৈরি করবে, তারপর যেকোনো machine যেখানে Docker support আছে সেখানে সেটা run করতে পারবে।
যেমন:
docker run mongodb
docker run redis
docker run node
এখন command মুখস্থ করা important না।
Main concept:
অর্থাৎ:
একবার বানাও → অনেক জায়গায় একইভাবে run করো।
4. Container কী?
একটি Container হলো application run করার জন্য isolated environment।
একটা container-এর নিজের:
- Processes
- Network interfaces
- File system mounts
- Libraries
- Dependencies
থাকতে পারে।
কিন্তু খুব important একটা বিষয় হলো:
তারা host machine-এর same OS kernel share করে।
সহজভাবে:
দেখতে একটা আলাদা computer-এর মতো মনে হয়, কিন্তু আসলে এটা full Virtual Machine না।
5. Containers vs Virtual Machines
এটা Kubernetes/Docker শেখার জন্য খুব important concept।
Virtual Machine কীভাবে কাজ করে?
একটা Virtual Machine বা VM-এর মধ্যে থাকে:
- Application
- Libraries
- Dependencies
- Full Guest Operating System
- নিজের Kernel
ধরো:
Physical Server
↓
Hypervisor
↓
VM 1
├── Ubuntu OS
├── Kernel
├── Libraries
└── Application
VM 2
├── Ubuntu OS
├── Kernel
├── Libraries
└── Application
প্রত্যেক VM-এর নিজের full Operating System আছে।
এই কারণে VM সাধারণত:
- বেশি RAM use করে
- বেশি CPU resource use করে
- বেশি Disk space লাগে
- Start হতে বেশি সময় লাগে
কিন্তু একটা advantage হলো:
Container কীভাবে কাজ করে?
Container-এর মধ্যে সাধারণত থাকে:
- Application
- Libraries
- Dependencies
কিন্তু থাকে না:
- Full Operating System
- নিজের Kernel
সব container host-এর kernel share করে।
Example:
Physical Server
↓
Linux Host OS
↓
Docker
↓
Container 1
├── App
└── Dependencies
Container 2
├── App
└── Dependencies
Container 3
├── App
└── Dependencies
সবগুলো container নিচের একই Linux Kernel use করছে।
এই কারণে container:
- Lightweight
- Fast
- Smaller
- Easy to scale
VM vs Container — সহজ comparison
| Feature | Virtual Machine | Container |
|---|---|---|
| Full OS আছে? | Yes | No |
| নিজের Kernel আছে? | Yes | No |
| Host kernel share করে? | No | Yes |
| Size | সাধারণত GB | সাধারণত MB |
| Startup | তুলনামূলক slow | খুব fast |
| Resource usage | বেশি | কম |
| Isolation | Stronger | VM-এর তুলনায় কম |
| Best for | Full OS virtualization | Application deployment |
সহজভাবে মনে রাখো:
আর
6. “Sharing the Kernel” মানে কী?
এই conceptটা শুরুতে একটু confusing হতে পারে।
একটা Operating System-কে simplistically দুইটা অংশে ভাবা যায়:
Operating System
│
├── Kernel
│
└── User-space Software / Tools
যেমন:
- Ubuntu
- Debian
- Fedora
- CentOS
- SUSE
এগুলো আলাদা Linux distributions।
কিন্তু সবগুলোর base হলো:
তাদের software, package manager, configuration ইত্যাদি আলাদা হতে পারে।
যেমন:
Ubuntu:
Ubuntu Tools
↓
Linux Kernel
Fedora:
Fedora Tools
↓
Linux Kernel
Debian:
Debian Tools
↓
Linux Kernel
তাই Linux Docker host-এর উপরে তুমি বিভিন্ন Linux-based containers run করতে পারো।
যেমন:
Linux Host
↓
Docker
↓
├── Ubuntu Container
├── Debian Container
├── Fedora Container
└── CentOS Container
কারণ সবাই ultimately Linux Kernel use করছে।
তাহলে Windows Container?
Windows uses:
Linux uses:
তাই directly:
Linux Kernel
↓
Windows Container ❌
এটা কাজ করবে না।
কারণ Windows application Windows kernel expect করছে।
একইভাবে:
কিন্তু Windows-এ Linux Docker Container কীভাবে চলে?
তখন সাধারণত Docker/WSL internally একটা ছোট Linux Virtual Machine/environment তৈরি করে।
Conceptually:
Windows
↓
Linux VM / WSL2
↓
Linux Kernel
↓
Docker
↓
Linux Containers
তাই তুমি Windows laptop use করেও Linux Docker containers চালাতে পারো।
7. Docker Image vs Container
এটাও খুব important।
Docker Image কী?
Image হলো একটা template/package।
Image-এর মধ্যে application run করার জন্য দরকারি জিনিসগুলো থাকে।
যেমন একটা MongoDB Image-এর মধ্যে MongoDB run করার environment থাকবে।
সহজভাবে:
Container কী?
Container হলো:
অর্থাৎ:
MongoDB Image
↓
docker run
↓
MongoDB Container
একই image থেকে multiple containers বানানো যায়।
Example:
MongoDB Image
↓
├── Container 1
├── Container 2
└── Container 3
Programming analogy
যদি তুমি OOP জানো:
| Docker Concept | Programming Analogy |
|---|---|
| Image | Class |
| Container | Object / Instance |
| Dockerfile | Class বানানোর instructions-এর মতো |
আরও সহজ:
Dockerfile
↓
Build
↓
Docker Image
↓
Run
↓
Container
এটা খুব গুরুত্বপূর্ণ flow।
মনে রাখো:
8. Dockerfile কী?
Dockerfile হলো একটা text file, যেখানে Docker-কে বলা হয় application environment কীভাবে তৈরি করতে হবে।
Example:
FROM node:20
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
এখানে basically বলা হচ্ছে:
Node.js environment নাও
↓
/app directory বানাও
↓
আমার code copy করো
↓
Dependencies install করো
↓
Application start করো
তারপর:
docker build
দিয়ে Dockerfile থেকে একটা Image তৈরি করা যায়।
তারপর:
docker run
দিয়ে সেই Image থেকে Container চালানো যায়।
So again:
Dockerfile
↓
docker build
↓
Image
↓
docker run
↓
Container
9. Docker Hub কী?
Docker Hub হলো Docker images-এর জন্য একটা online registry/repository।
Programming-এর ক্ষেত্রে যেমন GitHub থেকে code পাওয়া যায়, একইভাবে Docker Hub থেকে ready-made Docker images পাওয়া যায়।
যেমন:
- MongoDB
- Redis
- Node.js
- Ubuntu
- Nginx
- MySQL
- PostgreSQL
ধরো তোমার MongoDB দরকার।
Traditional way:
MongoDB website
↓
Download
↓
Install
↓
Dependencies
↓
Configure
↓
Start service
Docker দিয়ে:
docker run mongo
Docker image না থাকলে Docker Hub থেকে automatically pull করতে পারে।
Conceptually:
Docker Hub
↓
MongoDB Image
↓
Your Computer
↓
MongoDB Container
10. Docker Developers এবং Operations-কে কীভাবে সাহায্য করে?
Traditional software development:
Developer
↓
Application তৈরি
↓
Operations-কে code দেয়
↓
Operations dependencies install করে
↓
Production configure করে
↓
Something breaks
তারপর developer বলে:
কারণ Development এবং Production environment এক না।
Docker-এর ক্ষেত্রে:
Developer এবং Operations team মিলে:
Application
+
Dockerfile
↓
Docker Image
↓
Development
Testing
Production
সব environment-এ same image run করা যায়।
এই কারণে consistency অনেক improve হয়।
মূল benefit:
11. Docker থাকলে Kubernetes কেন দরকার?
এখন আসল Kubernetes concept।
Docker খুব ভালোভাবে করতে পারে:
কিন্তু ধরো তোমার শুধু ২টা container না।
তোমার আছে:
10 servers
100 containers
অথবা:
100 servers
10,000 containers
এখন manually manage করা impossible হয়ে যাবে।
Example:
একটা container crash করল।
কে restart করবে?
Traffic বেড়ে গেল।
কে extra containers তৈরি করবে?
একটা server crash করল।
ওই server-এর containers কে অন্য server-এ নিয়ে যাবে?
Application-এর নতুন version deploy করতে হবে।
সব container simultaneously update করলে service down হয়ে যেতে পারে।
এই problem solve করার জন্য দরকার:
এবং Kubernetes হলো একটি:
12. Container Orchestration কী?
Orchestration মানে অনেকগুলো container automatically coordinate এবং manage করা।
Kubernetes করতে পারে:
- Containers start করা
- Containers stop করা
- Failed containers restart করা
- Application scale করা
- Servers-এর মধ্যে workload distribute করা
- Load balancing করা
- Deployment manage করা
- Rolling updates করা
- Failure থেকে recover করা
- Desired state maintain করা
13. Kubernetes-এর simple example
ধরো তোমার একটা website আছে।
Normal traffic:
Users
↓
Container 1
Container 2
Container 3
হঠাৎ Black Friday-তে traffic অনেক বেড়ে গেল।
তখন Kubernetes automatically:
3 Containers
↓
Traffic increases
↓
10 Containers
করতে পারে।
আবার traffic কমলে:
10 Containers
↓
Traffic decreases
↓
3 Containers
এটাকে বলা হয়:
14. Container crash করলে কী হবে?
ধরো Kubernetes-কে বলেছ:
এখন:
Container 1 ✅
Container 2 ✅
Container 3 ✅
হঠাৎ Container 2 crash করল:
Container 1 ✅
Container 2 ❌
Container 3 ✅
Kubernetes detect করবে:
Desired = 3
Actual = 2
তারপর নতুন container create করবে:
Container 1 ✅
Container 3 ✅
Container 4 ✅
আবার:
Desired = 3
Actual = 3
এটাই Kubernetes-এর একটা fundamental idea:
তুমি Kubernetes-কে বলো:
Kubernetes constantly চেষ্টা করবে actual system-কে সেই state-এ রাখতে।
15. Kubernetes এবং Docker-এর relationship
সহজভাবে:
Docker
Question:
Answer:
Kubernetes
Question:
Answer:
Conceptually:
Application
↓
Dockerfile
↓
Container Image
↓
Containers
↓
Kubernetes
↓
Manage / Scale / Heal / Deploy
16. খুব সহজ Real-Life Analogy
ধরো তুমি একটা restaurant chain চালাও।
Docker Image = Recipe
যেমন:
Container = Actual Burger
Recipe follow করে যে actual burger তৈরি হলো।
একটা recipe থেকে:
Burger 1
Burger 2
Burger 3
Burger 4
তৈরি করা যায়।
একইভাবে:
Docker Image
↓
Container 1
Container 2
Container 3
Container 4
Kubernetes = Restaurant Manager
Kubernetes দেখে:
- কত customer এসেছে
- কত burger লাগবে
- কোন kitchen free
- কোন worker unavailable
- কোথায় extra production দরকার
- কোথায় failure হয়েছে
অর্থাৎ:
17. আরেকটা খুব useful analogy
ধরো:
Virtual Machine = আলাদা বাড়ি 🏠
প্রত্যেক বাড়ির:
- নিজস্ব kitchen
- নিজস্ব bathroom
- নিজস্ব electricity system
- নিজস্ব facilities
তাই powerful isolation, কিন্তু expensive।
Container = Apartment 🏢
প্রত্যেক apartment আলাদা।
কিন্তু building-এর কিছু infrastructure সবাই share করে।
এই কারণে:
18. Important terminology
এই termsগুলো সামনে বারবার আসবে।
Dockerfile
Image কীভাবে তৈরি হবে তার instructions।
Dockerfile
↓
Image
Image
Application-এর packaged template।
Image
↓
Container
Container
Image-এর running instance।
Docker Hub
Online registry যেখানে container images থাকে।
Host
যে machine-এর উপরে containers run করছে।
Kernel
Operating System-এর core অংশ।
Hardware এবং software-এর মধ্যে interface হিসেবে কাজ করে।
Containerization
Application এবং তার dependencies-কে container-এর মধ্যে package করার process।
Container Orchestration
অনেক containers automatically manage করার process।
Kubernetes
Container orchestration platform।
19. পুরো flow একসাথে
এই diagramটা মনে রাখলে অনেক কিছু clear হয়ে যাবে:
Developer writes Code
↓
Creates Dockerfile
↓
docker build
↓
Docker Image
↓
Store Image in Registry
e.g. Docker Hub
↓
docker run
↓
Container
↓
Many Containers
↓
Kubernetes
↓
Manage
Scale
Load Balance
Restart
Deploy
Recover
20. Docker vs Kubernetes এক লাইনে
Docker:
Kubernetes:
21. Important difference
What is Docker?
What is a Container?
What is Kubernetes?
Docker vs Kubernetes?
22. সবচেয়ে important 5টা জিনিস
আপাতত শুধু এই 5টা concept মাথায় রাখলেই হবে:
1. Docker application package করে
App + Dependencies
↓
Docker Image
2. Image থেকে Container তৈরি হয়
Image
↓
Container
3. Container হলো lightweight
কারণ:
Containers
↓
Share Host Kernel
4. VM-এর নিজের Operating System/Kernel থাকে
VM
↓
Guest OS
↓
Own Kernel
কিন্তু:
Container
↓
No own kernel
↓
Uses Host Kernel
5. Kubernetes containers manage করে
Many Containers
↓
Kubernetes
↓
Deploy
Scale
Restart
Load Balance
Recover
Final Simplified Explanation
পুরো বিষয়টা খুব simple করে বললে:
Docker দিয়ে একটা application এবং তার দরকারি dependencies একসাথে package করে Container Image বানানো হয়।
সেই Image থেকে আমরা এক বা একাধিক Container run করি।
Container হলো lightweight, কারণ প্রতিটা container-এর নিজের full Operating System থাকে না। তারা host machine-এর Kernel share করে।
অন্যদিকে একটা Virtual Machine-এর নিজের Guest OS এবং Kernel থাকে, তাই সেটা comparatively heavy।
যখন আমাদের অনেক servers-এর উপরে শত শত বা হাজার হাজার containers manage করতে হয়, তখন Kubernetes ব্যবহার করা হয়।
Kubernetes automatically container:
deploy → run → monitor → restart → scale → load balance → recover
করতে পারে।
সবশেষে শুধু এই lineটা মনে রাখো:
আর flow:
Code
↓
Dockerfile
↓
Image
↓
Container
↓
Kubernetes
↓
Manage at Scale
