Kubernetes series · Part 0202

Container Orchestration কী?Kubernetes কেন দরকার?

Production-এ অনেক containers reliably deploy, connect, scale এবং recover করার problem থেকেই container orchestration-এর শুরু।

Application code থেকে Docker containers, Kubernetes cluster এবং reliable production পর্যন্ত orchestration workflow
FIG. 02 Docker application package করে; Kubernetes containers-কে cluster-এর মধ্যে reliably manage করে।
আগের guide-এ আমরা শিখেছি: Docker application এবং তার dependencies একসাথে package করে। এর ফলে development, testing এবং production environment-এ application একইভাবে run করতে পারে। Part 1 পড়ুন →

কিন্তু 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 ছিল বা এখনো আছে:

ToolCreated byMain idea
Docker SwarmDockerসহজ setup, কম advanced features
KubernetesGoogle / Open SourcePowerful, flexible, widely used
Apache MesosApache ecosystemAdvanced কিন্তু 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।

ScalingMeaningExample
Application scalingApp instances বা replicas বাড়ানো বা কমানো3 Pods → 10 Pods
Node scalingCluster-এর 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

  1. Docker packaging solve করে: App + Dependencies → Container Image.
  2. Production management-এর জন্য orchestration দরকার: Many Containers → Complex Management → Orchestration.
  3. Kubernetes হলো orchestration platform: Containers automatically manage করে।
  4. Cluster হলো machines-এর group: প্রতিটি machine একটি Node.
  5. Kubernetes High Availability দিতে সাহায্য করে: Failure → Recover → Application remains available.
  6. Kubernetes scaling করতে পারে: Traffic বাড়লে more instances, কমলে fewer instances.
  7. 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

Search the archive

Press Esc to close