Engineering guide01

Kubernetes কী?Docker থেকে Container Orchestration

Kubernetes, Docker, Container, VM, Image, এবং Orchestration—সবকিছু একসাথে সহজভাবে বোঝার একটি Banglish guide।

Image, Container, Docker এবং Kubernetes orchestration-এর সম্পর্ক দেখানো diagram
FIG. 01 Images থেকে Kubernetes orchestration পর্যন্ত container journey।

1. Kubernetes কী?

Kubernetes, যাকে সংক্ষেপে K8s বলা হয়, হলো একটি open-source platform যেটা মূলত containers manage করার জন্য ব্যবহার করা হয়।

Kubernetes originally Google তৈরি করেছিল, কারণ Google অনেক বড় scale-এ containerized applications run করত।

সহজভাবে:

কিন্তু Kubernetes ভালোভাবে বোঝার আগে দুইটা concept বুঝতে হবে:

  1. Containers
  2. 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

FeatureVirtual MachineContainer
Full OS আছে?YesNo
নিজের Kernel আছে?YesNo
Host kernel share করে?NoYes
Sizeসাধারণত GBসাধারণত MB
Startupতুলনামূলক slowখুব fast
Resource usageবেশিকম
IsolationStrongerVM-এর তুলনায় কম
Best forFull OS virtualizationApplication 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 ConceptProgramming Analogy
ImageClass
ContainerObject / Instance
DockerfileClass বানানোর 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

Search the archive

Press Esc to close