আগের tutorial: Kubernetes Architecture →
এই tutorial-এর মূল question:
পুরোনো Kubernetes tutorials-এ আমরা অনেক সময় দেখি:
Kubernetes + Docker
কিন্তু modern Kubernetes tutorials-এ বেশি দেখি:
Kubernetes + containerd
তাহলে প্রশ্ন:
- Docker কি Kubernetes থেকে remove হয়ে গেছে?
- Docker images কি আর Kubernetes-এ চলে না?
Answer:
Change হয়েছে mainly container runtime architecture-এ।
1. শুরুতে Kubernetes Docker use করত
Docker খুব popular হয়েছিল কারণ containers use করা অনেক easy করে দিয়েছিল।
Example commands:
docker run nginx
docker ps
docker logs <container-id>
Docker developer-friendly ছিল।
তাই Kubernetes যখন শুরু হয়, তখন Kubernetes Docker containers orchestrate করত।
Concept:
Kubernetes
↓
Docker
↓
Containers
অর্থাৎ:
2. Problem: Kubernetes শুধু Docker support করতে চায়নি
পরে আরও container runtimes আসতে শুরু করল।
যেমন:
- rkt / Rocket
- containerd
- CRI-O
তখন problem হলো:
যেমন:
Kubernetes
├── Docker integration
├── containerd integration
├── CRI-O integration
└── rkt integration
এটা maintain করা difficult।
তাই Kubernetes একটা standard interface introduce করল।
নাম:
3. CRI কী?
CRI = Container Runtime Interface
এটা Kubernetes এবং container runtime-এর মধ্যে standard communication interface।
Simple definition:
Concept:
Kubernetes
↓
CRI
↓
Container Runtime
Runtime হতে পারে:
- containerd
- CRI-O
- other compatible runtimes
এই কারণে Kubernetes-কে runtime-specific implementation নিয়ে এত concern করতে হয় না।
যদি runtime CRI-compatible হয়, Kubernetes তার সাথে communicate করতে পারে।
4. CRI কেন useful?
ধরো Kubernetes সরাসরি প্রতিটা runtime-এর সাথে different way-তে কথা বলত।
তাহলে architecture:
Kubernetes
/ | \
↓ ↓ ↓
Docker CRI-O containerd
এবং প্রতিটা integration আলাদা maintain করতে হতো।
CRI আসার পর:
Kubernetes
↓
CRI
┌──────┼──────┐
↓ ↓ ↓
containerd CRI-O Others
অর্থাৎ:
5. OCI কী?
আরেকটা important term: OCI
OCI মানে:
OCI containers-এর জন্য industry standards define করে।
Tutorial-এ দুইটা important OCI specification আছে:
OCI Image Specification
Define করে: container image-এর format কী হবে।
OCI Runtime Specification
Define করে: container runtime কীভাবে container run করবে।
Simple idea:
এই standardization খুব important।
কারণ:
Docker দিয়ে build করা image containerd দিয়েও run করা সম্ভব।
6. OCI কেন এত Important?
ধরো তুমি Docker দিয়ে image বানালে:
docker build -t myapp .
Result:
Docker-built Image
এখন Kubernetes node-এ Docker Engine নেই।
সেখানে আছে:
containerd
তবুও image run করতে পারে।
কারণ:
Docker Image
↓
OCI Image Standard
↓
containerd understands it
এটাই key point।
7. Docker আসলে কী?
অনেক beginner মনে করে:
কিন্তু Docker শুধু একটা runtime না।
Docker হলো একটা full container platform।
এর মধ্যে অনেক components/features আছে:
- Docker CLI
- Docker API
- Image build tools
- Networking
- Volumes
- Security features
- containerd
- runc
Conceptually:
Docker Platform
│
├── Docker CLI
├── Docker API
├── Build Tools
├── Networking
├── Volumes
├── containerd
└── runc
তাই:
8. containerd কী?
containerd হলো lower-level container runtime component।
এটা originally Docker ecosystem-এর অংশ ছিল, পরে independent project হিসেবেও evolve করেছে।
Simple definition:
Concept:
Docker
↓
containerd
↓
runc
↓
Container
Modern Kubernetes containerd-এর সাথে directly CRI-এর মাধ্যমে communicate করতে পারে।
Kubernetes
↓
CRI
↓
containerd
তাই Kubernetes node-এ শুধুমাত্র containers run করার জন্য full Docker platform-এর দরকার হয় না।
9. runc কী?
Tutorial-এর Docker architecture-এ runc-ও আছে।
Simplified hierarchy:
Docker
↓
containerd
↓
runc
↓
Linux Container
runc আরও lower-level OCI runtime।
Beginner হিসেবে শুধু mental model:
Docker = high level
containerd = runtime manager
runc = very low-level container execution
10. Docker এবং containerd-এর Relationship
এটা খুব important।
Docker এবং containerd completely unrelated competitors না।
Actually:
Concept:
Docker CLI
↓
Docker Engine
↓
containerd
↓
runc
↓
Container
অর্থাৎ containerd হলো Docker platform-এর underlying runtime pieces-এর একটা important অংশ।
11. তাহলে Kubernetes আগে Docker কীভাবে use করত?
এখানে আসে: dockershim
Docker তৈরি হয়েছিল Kubernetes CRI আসার আগে।
তাই Docker Engine directly Kubernetes-এর CRI model-এর সাথে fit করত না।
তখন Kubernetes একটা compatibility layer বানিয়েছিল: dockershim
Simple definition:
Architecture:
Kubernetes
↓
dockershim
↓
Docker
↓
containerd
↓
runc
এটা কাজ করত।
কিন্তু architecture-এ extra layer ছিল।
12. dockershim কেন দরকার ছিল?
Kubernetes চাইত:
Kubernetes
↓
CRI
↓
Runtime
কিন্তু Docker তখন directly সেই CRI structure follow করত না।
তাই:
Kubernetes
↓
dockershim
↓
Docker
dockershim translation/compatibility bridge হিসেবে কাজ করত।
13. Kubernetes Docker support remove করল কেন?
Kubernetes version 1.24 থেকে dockershim remove করা হয়।
Meaning:
কিন্তু আবারও:
Docker images এখনো কাজ করে।
Important distinction:
Docker Runtime Integration ❌
Docker Images ✅
14. Architecture আগে কেমন ছিল?
আগে:
Kubernetes
↓
dockershim
↓
Docker Engine
↓
containerd
↓
runc
↓
Container
অনেক layers।
15. Modern Architecture
এখন:
Kubernetes
↓
CRI
↓
containerd
↓
runc
↓
Container
অর্থাৎ unnecessary middle layer remove হয়েছে।
Very simple:
BEFORE
Kubernetes
↓
dockershim
↓
Docker
↓
containerd
NOW
Kubernetes
↓
CRI
↓
containerd
এটাই পুরো tutorial-এর অন্যতম main concept।
16. Docker vs containerd
| Feature | Docker | containerd |
|---|---|---|
| Type | Full container platform | Container runtime |
| User-friendly CLI | Yes | Limited / lower-level |
| Build images | Yes | Main focus না |
| Run containers | Yes | Yes |
| Networking tools | Yes | Runtime-focused |
| Volume support | Yes | Lower-level |
| Developer friendly | Very | Comparatively low-level |
| Kubernetes runtime | Docker Engine directly না | Commonly used |
| Best for | Development/local workflows | Kubernetes runtime |
Simple summary:
আর:
17. Car Analogy
একটা easy analogy:
Docker
পুরো car:
- Dashboard
- Steering
- Air Conditioning
- Seats
- Controls
- Engine
containerd
গাড়ির: Engine / core running mechanism
অর্থাৎ:
Docker = Full Car
containerd = Engine
এটা exact technical mapping না, কিন্তু concept বোঝার জন্য useful।
18. Docker Image কি Kubernetes-এ এখনো কাজ করে?
Yes.
এটা tutorial-এর সবচেয়ে important point-এর একটা।
তুমি locally Docker use করে image build করতে পারো:
docker build -t myapp .
তারপর registry-তে push করতে পারো।
Example:
Docker
↓
Build Image
↓
Container Registry
↓
Kubernetes
↓
containerd
↓
Run Image
কারণ image OCI-compatible।
19. Practical Workflow
Developer machine:
Code
↓
Dockerfile
↓
docker build
↓
Image
তারপর:
Image
↓
Registry
Kubernetes cluster:
Registry
↓
containerd pulls image
↓
Pod starts
↓
Container runs
So Docker আর Kubernetes runtime হিসেবে directly connected না হলেও:
20. এখন CLI Tools বুঝি
Tutorial-এ তিনটা command-line tool এসেছে:
- ctr
- nerdctl
- crictl
এগুলো easily confuse হওয়া সম্ভব।
তাই একটা একটা করে দেখি।
21. ctr কী?
ctr containerd-এর সাথে আসে।
এটা একটা: Low-level containerd CLI
এটা mainly এগুলোর জন্য use করা হয়:
- Testing
- Debugging
- Low-level containerd interaction
Example:
ctr images pull docker.io/library/redis:latest
ctr run docker.io/library/redis:latest redis
Simple definition:
Normal daily developer workflow-এর জন্য খুব user-friendly না।
22. nerdctl কী?
nerdctl হলো: Docker-like CLI for containerd
Docker জানলে nerdctl commands familiar মনে হবে।
Example:
nerdctl run nginx
nerdctl ps
nerdctl logs <container-id>
দেখো Docker-এর মতোই:
docker run → nerdctl run
docker ps → nerdctl ps
Simple definition:
23. nerdctl কেন useful?
ধরো তোমার machine-এ Docker Engine নেই।
কিন্তু আছে:
containerd
তুমি Docker-style experience চাও।
তখন nerdctl use করতে পারো।
Concept:
You
↓
nerdctl
↓
containerd
↓
Container
24. crictl কী?
এখন Kubernetes-এর জন্য খুব important একটা debugging tool: crictl
crictl Kubernetes community ecosystem-এর CLI।
এটা CRI-compatible runtimes-এর সাথে communicate করে।
Example runtimes:
- containerd
- CRI-O
- Other CRI-compatible runtimes
Simple definition:
25. crictl Commands
Examples:
crictl ps
Running containers দেখায়।
crictl images
Images দেখায়।
crictl logs <container-id>
Logs দেখায়।
crictl pods
Pods/runtime-level pod sandboxes দেখায়।
crictl exec -it <container-id> sh
Container-এর ভিতরে command run করতে পারে।
26. crictl কখন use করব?
ধরো Kubernetes Pod ঠিকমতো start হচ্ছে না।
kubectl দিয়ে initial investigation করলে useful information পাচ্ছ না।
তখন node-এ গিয়ে runtime-level debugging করতে হতে পারে।
Example:
Kubernetes Pod Problem
↓
kubectl inspect
↓
Need deeper runtime debugging
↓
SSH / access Node
↓
crictl
তখন useful হতে পারে:
crictl ps -a
crictl logs <container-id>
crictl images
27. crictl দিয়ে manually production container create করা উচিত?
Mainly: No।
crictl primarily debugging tool।
কারণ Kubernetes workload management-এর responsibility: Kubelet
তুমি manually Kubernetes-এর বাইরে container create করলে:
You
↓
crictl/manual runtime action
↓
Container
কিন্তু Kubernetes desired state-এ সেই container নেই।
তাই Kubernetes সেই manually-created container-কে normal managed application হিসেবে consider করে না।
Kubernetes environment-এ main principle:
যেমন:
- Deployment
- Pod
- StatefulSet
- DaemonSet
28. kubectl vs crictl
এটা খুব important difference।
kubectl
kubectl
↓
Kubernetes API
↓
Kubernetes Objects
Use করো:
- Pods manage
- Deployments manage
- Services manage
- Nodes inspect
- Cluster state inspect
crictl
crictl
↓
CRI
↓
Container Runtime
Use করো: node/runtime-level troubleshooting-এর জন্য।
29. ctr vs nerdctl vs crictl
| Tool | Main Purpose | Talks To | Typical User |
|---|---|---|---|
| ctr | Low-level debugging | containerd | Runtime/admin |
| nerdctl | Docker-like container management | containerd | Developer/admin |
| crictl | Kubernetes runtime debugging | CRI runtime | Kubernetes admin |
| kubectl | Kubernetes management | API Server | Kubernetes user/admin |
30. Easy Memory Trick
এই চারটা line মনে রাখো:
kubectl → Kubernetes manage
crictl → Kubernetes runtime debug
nerdctl → Docker-like containerd CLI
ctr → Low-level containerd CLI
31. Docker Commands vs crictl Commands
অনেক commands দেখতে similar।
| Docker | crictl | Purpose |
|---|---|---|
| docker ps | crictl ps | Running containers |
| docker images | crictl images | Images |
| docker logs | crictl logs | Logs |
| docker exec | crictl exec | Container-এর ভিতরে command |
| docker inspect | crictl inspect | Container details |
| docker version | crictl version | Version |
কিন্তু purpose আলাদা।
Docker: General-purpose container workflow
crictl: Kubernetes runtime troubleshooting
32. কোন Situation-এ কোন Tool?
Locally Image Build করতে
Use: Docker
docker build -t myapp .
containerd দিয়ে Docker-like commands চাইলে
Use: nerdctl
containerd low-level debug করতে
Use: ctr
Kubernetes node runtime troubleshoot করতে
Use: crictl
Kubernetes applications manage করতে
Use: kubectl
33. Full Architecture
এখন সবকিছু একসাথে connect করি।
Developer side:
Developer
↓
Docker
↓
Build Image
↓
OCI Image
↓
Registry
Kubernetes side:
Kubernetes
↓
Kubelet
↓
CRI
↓
containerd
↓
runc
↓
Container
এই flowটা খুব important।
34. Kubernetes Runtime Architecture
আরও detailedভাবে:
Kubernetes Control Plane
│
▼
Kubelet
│
▼
CRI
│
▼
containerd
│
▼
runc
│
▼
Container
এখানে:
- Kubernetes
- বলছে কী run করতে হবে।
- Kubelet
- Node-level agent।
- CRI
- Communication interface।
- containerd
- Container lifecycle manage করে।
- runc
- Low-level container execution করে।
35. Docker Architecture vs Kubernetes Architecture
Docker
Developer
↓
Docker CLI
↓
Docker Engine
↓
containerd
↓
runc
↓
Container
Kubernetes
Kubernetes
↓
Kubelet
↓
CRI
↓
containerd
↓
runc
↓
Container
দেখো: দুইটার নিচের দিকে common components থাকতে পারে:
containerd
↓
runc
এই কারণেই Docker এবং Kubernetes/containerd ecosystem historically closely related।
36. Most Important Difference
এইটা মনে রাখো:
আর:
Docker:
Build
Run
Network
Volumes
CLI
Developer UX
containerd:
Pull images
Manage containers
Run containers
Runtime lifecycle
37. Very Important Misunderstanding
অনেকে বলে:
এটা wrong mental model।
Correct:
Docker Engine as Kubernetes runtime
→ No longer directly used through built-in dockershim
কিন্তু:
Docker-built OCI Image
→ Works ✅
কারণ:
38. Image vs Runtime
এটাও clear রাখো।
Image
Application-এর packaged artifact।
Example:
myapp:1.0
Runtime
Image থেকে container run করে।
Example:
containerd
Flow:
Image
↓
Runtime
↓
Running Container
তাই Docker image থাকলেও Docker Engine দরকারই হবে এমন না।
39. CRI vs OCI
এই দুটো easily confuse হয়।
CRI: Container Runtime Interface
Question:
Answer: CRI
Concept:
Kubernetes
↓
CRI
↓
Runtime
OCI: Open Container Initiative
Question:
Answer: OCI
Concept:
OCI
├── Image Specification
└── Runtime Specification
40. CRI vs OCI Easy Memory
মনে রাখো:
Kubernetes
↓
CRI
↓
containerd
আর:
Docker Image
↓
OCI Standard
↓
Different compatible runtimes
41. Car Analogy দিয়ে সবকিছু
ধরো:
Docker
পুরো car।
- Dashboard
- Steering
- Seats
- Controls
- Engine
containerd
Engine/core runtime।
ctr
Mechanic-এর low-level diagnostic tool।
nerdctl
containerd-এর জন্য Docker-like steering/control interface।
crictl
Kubernetes mechanic-এর runtime diagnostic tool।
kubectl
পুরো Kubernetes system control করার remote/control panel।
42. Tool Mental Model
Docker = Full container platform
containerd = Container runtime
ctr = Low-level containerd debugging
nerdctl = Docker-like containerd CLI
crictl = Kubernetes runtime debugging
kubectl = Kubernetes management
43. সবচেয়ে Important 7 Points
1. Docker একটা full platform
Docker
=
CLI + Build + Network + Volumes + Runtime Components
2. containerd একটা runtime
containerd
↓
Runs/manages containers
3. Kubernetes CRI use করে
Kubernetes
↓
CRI
↓
containerd
4. OCI standardization দেয়
OCI
↓
Image + Runtime Standards
5. dockershim ছিল bridge
Kubernetes
↓
dockershim
↓
Docker
6. dockershim remove হয়েছে
Modern path:
Kubernetes
↓
CRI
↓
containerd
7. Docker images এখনও কাজ করে
Docker Build
↓
OCI Image
↓
containerd
↓
Kubernetes Container
44. Final Architecture Diagram
DEVELOPMENT
│
▼
Docker CLI
│
▼
Docker Build
│
▼
OCI Image
│
▼
Container Registry
│
▼
─────────────────────
KUBERNETES
│
▼
Kubelet
│
▼
CRI
│
▼
containerd
│
▼
runc
│
▼
Container
45. Final Simplified Explanation
পুরো tutorial-টা simpleভাবে:
আগে Kubernetes Docker use করত:
Kubernetes
↓
Docker
কিন্তু Kubernetes different container runtimes support করতে চেয়েছিল।
তাই তৈরি হলো: CRI — Container Runtime Interface
Docker directly CRI architecture-এর সাথে fit না করায় Kubernetes use করত: dockershim
Architecture ছিল:
Kubernetes
↓
dockershim
↓
Docker
↓
containerd
পরে Kubernetes dockershim remove করে।
Modern architecture:
Kubernetes
↓
CRI
↓
containerd
↓
runc
↓
Container
কিন্তু Docker images এখনো কাজ করে।
কারণ:
তাই তুমি Docker দিয়ে image build করতে পারো:
docker build -t myapp .
এবং Kubernetes সেই image containerd দিয়ে run করতে পারে।
One-Line Summary
সবচেয়ে useful memory flow:
Docker
↓
Build OCI Image
↓
Registry
↓
Kubernetes
↓
Kubelet
↓
CRI
↓
containerd
↓
runc
↓
Container
আর tools:
kubectl → Kubernetes manage
crictl → Kubernetes runtime debug
nerdctl → Docker-like containerd CLI
ctr → Low-level containerd debug
